Я разрабатываю высокодоступный сайт WP на AWS с помощью Elastic Beanstalk и тестирую нагрузку с помощью Locust.
Все выглядит нормально: мои EC2 - это t2.mediums, автоматически масштабируются на 3-6 зон доступности. Балансировщик нагрузки настроен на «межзонную» балансировку нагрузки (поэтому трафик должен распределяться на 3 сервера в 3 разных зонах), я использую Aurora (db.t2.medium) с настройкой реплики master-> read.
Когда я захожу на сайт в своем браузере, все в порядке, но как только я запустил Locust (100-500 пользователей, время ожидания 90-100 секунд, коэффициент вывода 10 пользователей), мой сайт почти мгновенно потеряет соединение с базой данных. и в конечном итоге выдаст ошибку 50x.
Моя установка Apache / PHP довольно необычна из Beanstalk (Amazon Linux AMI, php 5.6), спецификации указаны ниже. opcache включен по умолчанию, но phpfpm в настоящее время не установлен.
Вот схема моей настройки, а затем спецификации:
Я не уверен, является ли это проблемой конфигурации оборудования, или мне нужно настроить PHP / Apache / MySql
Хорошо, думаю, у меня было несколько проблем:
Когда я изначально создавал базы данных, я сделал t2.micros, который по умолчанию разрешает одновременно только 40 подключений. Позже я изменил экземпляр на t2.mediums, но max_connections, похоже, остался прежним. Я воссоздал базы данных на t2.mediums, а max_connections теперь 90, и при необходимости я могу увеличить их.
Я неправильно прочитал документацию Locust, и я настроил тест на попадание на сайт каждые 90 мс, так что каждые 0,09 секунды, что очень много. Я просто увеличил время обращения до 3-10 секунд (фактических секунд), и теперь серверы работают нормально.
Однако увеличение количества пользователей Locust до 200 приводит к 75% отказу (отключение базы данных), но я думаю, что могу либо еще больше настроить max_connections, либо создать CDN перед сайтом (что я все равно буду делать)
@ michael-sqlbot получает приз здесь, он вел меня по правильному пути.