Добрый день.
Требовалась написать тест-план для нагрузочного тестирования чат-сервера.
Серверная структура размещена на сервисе AWS. Постоянно подняты 2-ва инстанса чат-сервера. Так же настроены условия при которых поднимается новый инстанс в зависимости от подаваемой нагрузки на серверную часть.
Между инстансами AWS Elastic Load Balance распределяет нагрузку.
=======
При тестировании выявилось что подаваемая нагрузка не распределяется между серверами, и примерно выглядит ситуация следующим образом:
1ый инстанс -> грузится на 90% cpu
2ой инстанс -> грузится на 20% cpu
Выяснил, что AWS распределяет нагрузку только если долбится с разных IP адресов. Для этого в тест план был добавлен DNS Cash Manager.
При повторном тестировании распределяется, но распределяется не совсем равномерно:
1ый инстанс -> грузится на 70% - 80% cpu
2ой инстанс -> грузится на 30% - 40% cpu
Так же запускал Jmeter с параметром "-Dsun.net.inetaddr.ttl=0"
И прописывал в файл system.properties дополнительные параметры:
networkaddress.cache.ttl=0
Кто сталкивался с проблемой не равномерной подачи нагрузки на распределенные системы?
Как решали проблему с AWS Elastic Load Balance?
p.s. гуглить я умею, так что не надо кидать простые ссылки, а желательно высказывать свои мысли :)
=======
Тест план выглядит следующим образом:
- User Defined Variables
- Load_Performance_Chat_Thread => number of thread - задается переменно постоянной и задается 100 потоков / Loop Count - forever
-- CSV Data Set Config - файл с токенами авторизации пользоватлей (в списке 100 пользоватлей)
-- DNS Cache Manager - указаны DNS 8.8.8.8 / 77.88.8.8
-- Requests / Join -> web socket - конектимся к сокету
-- While Controller - пока есть подключение по сокету отправляем в чат сообщения
-- Requests / New messege - web socket
-- Requests / Leave -> закрываем конек к web socket
- Constant Throughput Timer