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