Что вызывает высокую задержку параллельной доставки SQS? - PullRequest
1 голос
/ 12 марта 2020

Используя Node SDK, я вижу высокую задержку около 9000 мс для доставки сообщений SQS, когда сообщения отправляются параллельно в нескольких очередях. Если я отправляю все сообщения последовательно в одну очередь, у меня намного меньше задержка - около 300 мс. В обоих тестах сообщения отправляются партиями по 10, используя приведенный ниже код. Временная метка отправки помещается внутри самого сообщения, поэтому я могу измерить время доставки, когда сообщение получено.

Почему передача сообщений, отправляемых в параллельные очереди, происходит намного медленнее? Есть ли ограничение скорости у Amazon?

enter image description here

enter image description here

      for (i = 0; i < 10; i++) {
        var entry = {
          Id: String(messageCount),
          MessageBody: "test"+messageCount+(new Date().getTime()),
          MessageDeduplicationId: "test"+messagecount+" "+(new Date().getTime())
        };
        entries.push(entry);
        messageCount += 1;
      }
      var params = {
        QueueUrl: queueUrls[senderIndex],
        Entries: entries
      };
      sqs.sendMessageBatch(params, function(batchSendErr, results) {
              ...
      });

В последовательном случае я запускаю одну нодовую программу, которая отправляет 500 пакетов по 10 сообщений в одну очередь, и одну программу, которая получает 500 пакетов из 10 сообщений. (Всего 500 сообщений.)

В параллельном случае я запускаю одну нодовую программу, которая создает 250 потоков записи и отправляет две партии по 10 сообщений из каждой в одну из 250 различных очередей. Я запускаю еще одну нодовую программу, которая создала 250 потоков чтения и получает две партии по 10 сообщений от каждого. (Всего 5000 сообщений)

В приведенных выше тестах я использую очереди FIFO, хотя результаты схожи с очередями без FIFO.

Я замечаю, что в случае параллельной отправки каждая пакетная отправка вызову AWS SDK требуется около 5 секунд, чтобы получить обратный вызов завершения. В последовательном случае каждый вызов пакетной отправки в AWS SDK занимает около 300 мс. Я не уверен, почему вызовы API медленнее параллельно, если только AWS не ограничивает скорость моих вызовов.

Кстати, вот как выглядит моя очередь. Есть 250 таких очередей с # {item} в диапазоне от 1 до 250

aws sqs create-queue --queue-name loadtest_device#{item}_user#{item}.fifo --attributes "FifoQueue=true,VisibilityTimeout=300,ReceiveMessageWaitTimeSeconds=0"

...