#amazon-sqs
#amazon-sqs
Вопрос:
У меня есть пользователь SQS, работающий в EventConsumerService, которому необходимо успешно обрабатывать до 3 Тыс. операций передачи данных, иногда более 20 тыс. операций передачи данных (или 1,2 миллиона сообщений в минуту). Для каждого обработанного сообщения я выполняю REST-вызов TCP VIP DataService. Я пытаюсь выполнить нагрузочный тест, чтобы определить максимальное значение TPS, которое может обрабатывать один хост в EventConsumerService, без перенапряжения:
- Объем запросов к зависимостям, хранилище DynamoDB и т. Д
- Загрузка ЦП как в EventConsumerService, так и в DataService
- Сетевые подключения на хост
- Статистика ввода-вывода из-за переполнения
- Размер DLQ должен быть минимальным, в настоящее время я вижу, что мой DLQ увеличивается до 500 Тыс. сообщений из-за 500 исключений недоступности службы, выданных из DataService, поэтому что-то должно быть не так.
- Приблизительный возраст самого старого сообщения. Я не хочу, чтобы сообщение находилось в очереди более X минут.
- Фатальные значения и задержка вызова REST для DataService
- Активные потоки
Вот как я выполняю тест производительности:
-
Я настроил и своего пользователя, и другую службу на одном хосте, причина в том, что я хочу понять нагрузку на обе службы на хост.
-
Я использую генератор TPS для заполнения очереди SQS миллионом сообщений
-
Служба EventConsumerService уже запущена в производство. Как только сообщения начали заполнять очередь SQS, я сразу же смог увидеть запросы, отправляемые в DataService.
Вот параметры, которые я настраиваю для поиска сообщений, отправленных в секунду:
messagesPolledPerSecond = (numberOfHosts * numberOfPollers * messageFetchSize) * (1000/(sleepTimeBetweenPollsPerMs receiveMessageTimePerMs))
messagesInSurge / messagesPolledPerSecond = ageOfOldestMessageSLA
ageOfOldestMessage settingsUpdatedLatency < latencySLA
Переменные для SqsConsumer, которые я сохранил постоянными, являются:
- Количество хостов = 1
- ReceiveMessageTimePerMs = 60 мс? Это вне моего контроля
- Максимальный размер пула потоков: 300
Все остальные факторы играют роль:
- Количество опросчиков (по умолчанию 1), я установил равным 150
- Время ожидания между опросами (по умолчанию 100 мс), я установил равным 0 мс
- Время ожидания при отсутствии сообщений (по умолчанию 1000 мс), ???
- размер выборки сообщений (по умолчанию 1), я установил равным 10
Однако с указанными выше параметрами я вижу большое количество сообщений, отправляемых в DLQ из-за ошибок сервера, поэтому очевидно, что я установил слишком высокие значения. Эта методология тестирования кажется крайне неэффективной, и я не могу найти оптимальный TPS, который не приводит к отправке такого огромного количества сообщений в DLQ и не приводит к такому высокому приблизительному возрасту самого старого сообщения.
Приветствуются любые рекомендации относительно того, как мне лучше всего проводить тестирование. Было бы очень полезно, если бы мы могли назначить время для общения. Напишите мне напрямую