Назад | Перейти на главную страницу

Оптимизация httpd сервера для 50-100к пользователей

В настоящее время у меня есть экземпляр AWS EC2 m5.24xlarge который имеет :

В настоящее время мы ожидаем более 50 000 одновременных пользователей в сети, я добавил слой облачной вспышки, но проблема в том, что я продолжаю получать server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting на Apache error_log.

Какие настройки Apache лучше всего подходят для обработки такого трафика?

Боюсь, вы делаете это неправильно. Вместо запуска одного огромного мега-экземпляра вам следует управлять парком небольших экземпляров за балансировщиком нагрузки. Например заменить m5.24xlarge с участием 24 х m5.xlarge, в идеале в группа автомасштабирования с участием точечные экземпляры для экономии затрат.

Вот некоторые из причин:

  • Если ваш большой экземпляр выходит из строя или требует обслуживания, весь ваш сайт выходит из строя. Если то же самое произойдет с одним из меньших экземпляров, вы потеряете только 1/24 своей емкости.

  • Вы можете добавлять или удалять емкость при изменении трафика, например, автоматически отключать некоторые экземпляры на выходных или на ночь, когда спрос снижается. Экономит ваши деньги.

  • Вы можете автоматизировать восстановление отказавших экземпляров, вы можете использовать спотовые экземпляры, чтобы сэкономить немного денег и т. Д.

Сказав, что вам, возможно, придется немного изменить архитектуру вашего приложения. Например, если база данных в настоящее время работает на том же экземпляре, вам нужно будет переместить его в AWS Aurora так что все экземпляры могут его использовать.

То же самое для файловая система - если ваше приложение хранит пользовательские данные локально, вам может потребоваться ввести общую файловую систему, например AWS EFS - эластичная файловая система.

Есть некоторая работа, но есть огромные преимущества горизонтального масштабирования (добавление большего количества мелких рабочих для выполнения работы) по сравнению с вертикальным (делая одного рабочего все больше и больше).

Надеюсь, это поможет :)

Фактически возможно масштабирование на очень большом экземпляре веб-сервера.

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

MaxRequestWorkers ранее назывался MaxClient. Увеличьте это настолько, насколько позволяет ваша память. Возьмем, например, простую процедуру из Как рассчитать значение MaxClient в apache? Предположим, можно использовать 350 ГБ памяти, остальная часть предназначена для ОС и других накладных расходов. Разделить на RSS по процессу из top. Скажем, это 50 МБ, а результат будет больше 7000. Это ваше первое предположение MaxRequestWorkers. ServerLimit также должно быть больше, попробуйте 10000.

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

Следя за происходящим, спланируйте следующий эксперимент по изменению настройки. Возможно увеличение ThreadsPerChild позволит сократить количество процессов и соответственно уменьшить использование памяти.

50 КБ - это больше, чем диапазон временных портов по умолчанию в большинстве операционных систем. Если весь ваш трафик поступает с одного и того же IP-адреса и порта балансировщика нагрузки, найдите способы обойти это.