Тестирование производительности Amazon EC2, RDS и ELB

У меня есть приложение PHP, которое я запускаю в веб-сервисах Amazon. Это относительно простой PHP-скрипт, который выполняет простую запись в базу данных SQL. Эта база данных является экземпляром Xtra Large RDS. PHP работает на большом экземпляре EC2 за балансировщиком нагрузки.

Что я хотел бы сделать, так это провести стресс-тестирование моего сценария, чтобы имитировать около 800 пользователей, подключенных одновременно (да, это верная оценка).

Я слышал об Siege, но не знал, как использовать его для тестирования своего приложения. Если я попытаюсь запустить его со своего домашнего подключения, я не уверен, что мой ПК / ADSL достаточно быстр, чтобы создать достаточно трафика для имитации 800 пользователей, атакующих EC2 (таким образом, RDS) одновременно.

Целесообразно ли запустить еще один экземпляр EC2 в другой зоне, чтобы просто «осадить» мое приложение? Или, возможно, запустить 2 инстанса EC2, каждый из которых использует по 400 пользователей!?

Есть надежда, что это позволит тщательно протестировать балансировку нагрузки, RDS и EC2.

Есть ли у кого-нибудь опыт такого тестирования с большим числом одновременных пользователей?

Энди


person Schodemeiss    schedule 30.07.2012    source источник


Ответы (4)


Я написал скрипт, который может вам помочь, подробности здесь, источник здесь.

Но прежде всего, и это действительно самое важное, вам нужно рассмотреть, что определяет «пользователь». Хотя это может показаться очевидным в описательных терминах, с технической точки зрения вам нужно начать говорить о запросах в секунду.

Теперь, когда этот медвежонок убран, для запуска нагрузочных тестов на Amazon с использованием ELB есть несколько вещей, о которых вы, возможно, захотите узнать.

  1. При такой нагрузке вам, скорее всего, придется попросить Amazon «предварительно разогреть» вещи. В прошлый раз, когда я изучал это, я обнаружил, что ELB — это, по сути, программный балансировщик нагрузки, работающий на простом экземпляре. Как и у всех вещей, у этих инстансов есть предел пропускной способности и, как правило, максимальная скорость составляет около (очень расплывчато) 40 запросов в секунду. Они будут автоматически масштабироваться, но алгоритм для этого не подходит для нагрузочного тестирования, поэтому предварительный прогрев — это то, что Amazon заранее запускает X ELB, где X основан на информации, которую вы предоставляете им в своем запросе (см. мой первый пункт о запросах в секунду, а не о пользователях). ).

  2. ELB могут кэшировать DNS, что при нагрузочном тестировании может вызвать проблемы. Если ваш инструмент тестирования основан на Java (например, JMeter), используйте: -Dsun.net.inetaddr.ttl=0

Какое бы решение вы ни выбрали, имейте в виду, что сам тест может стать узким местом, вы должны сначала проверить это, прежде чем обвинять тестируемое приложение.

person Oliver Lloyd    schedule 01.08.2012

Доступен ряд облачных сервисов нагрузочного тестирования, в том числе

http://blazemeter.com http://www.neustar.biz/enterprise/web-performance

Они могут стать довольно дорогими, но опять же, так же как и запуск нескольких экземпляров ec2 для тестирования (плюс ваше инженерное время).

person Mike Brant    schedule 30.07.2012

Пока не отказывайтесь от Siege. Это простой, но очень мощный инструмент для нагрузочного тестирования. Основным примером использования может быть:

siege -d 1 -c 10 http://url

Что будет имитировать 10 одновременных подключений (пользователей), делающих запрос примерно каждую 1 секунду. Если размер вашего HTTP-запроса и ответов достаточно мал, у вас все получится, даже если вы используете DSL-соединение. Siege покажет вам статистику, включая средний размер ответа, так что вы сможете легко оценить, каковы ваши ограничения. Если размеры слишком велики для вашего соединения, идея использования отдельных экземпляров EC2 определенно сработает. Вероятно, будет достаточно одного экземпляра, но вам, возможно, придется увеличить лимит файловых дескрипторов на машине, на которой запущена осада (иначе они у вас закончатся):

sysctl -w fs.file-max=100000

Если вы хотите протестировать несколько URL-адресов, вы можете поместить их в текстовый файл и указать Siege использовать его в качестве целей:

siege -d 1 -c 800 -i -t 2m -f urls.txt

будет эмулировать 800 пользователей, делающих запрос каждую 1 секунду в течение 2 минут. URL-адреса будут выбраны случайным образом (-i) из файла urls.txt.

Я бы рекомендовал запустить пару тестов, постепенно увеличивая количество подключений.

Вы должны получить хорошую статистику, когда он завершится, или вы завершите его вручную, нажав ctrl+C. Вам НЕОБХОДИМО запросить предварительное прогревание ELB с поддержкой AWS, если тест будет генерировать гораздо больше трафика, чем у вас есть в настоящее время. ELB медленно масштабируют пропускную способность в ответ на всплески трафика.

По умолчанию Siege использует HTTP 1.1, поэтому, если ваш сервер использует постоянные соединения, он будет работать.

person Chris Koston    schedule 14.03.2013
comment
Отличный инструмент! Мне нравится, что вы можете задержать каждого пользователя, чтобы сделать только 1 в секунду, это была моя проблема с ab, что он просто бомбардировал сервер и давал сбой. - person soote; 24.03.2015

Существует ряд инструментов, которые могут генерировать нагрузку из облака — вероятно, это то, что вы хотите сделать (это намного проще, чем настраивать собственные механизмы загрузки). Обязательно выберите тот, который может обрабатывать балансировку нагрузки DNS ... многие не могут обрабатывать новые записи DNS во время теста и поэтому не тестируют приложение ELB точно. Вышеупомянутое предложение для JMeter помогает, но все же не совсем точно, поскольку больший процент VU переключится на новые IP-адреса, как только они станут доступны. Настоящие пользователи останутся с тем IP-адресом, с которого они начали, и только НОВЫЕ пользователи перейдут на вновь добавленные IP-адреса.

Я буду улучшать наше программное обеспечение, которое точно тестирует сайты ELB — Web Performance Load Tester. Вы можете попробовать бесплатную версию здесь: http://www.webperformance.com/load-testing/free-load-tester-lite.html и не стесняйтесь обращаться к нам с любыми вопросами.

person CMerrill    schedule 06.08.2012