Расширение сервера Apache

У меня есть сервер Ubuntu под управлением apache2, который, как я ожидаю, будет поражен примерно 500-1000 (одновременными) пользователями в течение ограниченного периода времени. Сервер обслуживает смесь пользовательских (довольно легких) php-страниц, связанных с postgresql db (размером около 20 Мб) и статическим контентом. Аппаратное обеспечение стабильное и довольно мощное:

  • Intel Xeon E5420 @ 2,5 ГГц
  • 12 ГБ ОЗУ

Во время предыдущих сбоев на этом сервере я увеличивал ServerLimit, MaxClients для модулей MPM и уменьшал Timeout и KeepAliveTimeout. Это сработало, но было вялым, и я чувствую, что многое можно сделать. Как бы вы предложили настроить сервер Apache для обработки такого рода нагрузки?

2 ответа

Решение

Узким местом в этом сценарии будет PHP и то, что он делает с базой данных. Если вы открываете новое соединение с каждым вызовом, то вы, скорее всего, столкнетесь со стенами ввода-вывода на доступ к диску больше, чем что-либо еще. Лучше всего, чтобы база данных и статический контент находились на диске RAM и фиксировали изменения по мере необходимости в базе данных на диске. Также поддержите эффективный механизм кэширования запросов, используя выделенный в оперативной памяти быстрый поиск хеша в PHP, чтобы вы не обременяли postgresql ненужными циклами обработки, связанными с поиском в кэше запросов. Хотя postgresql, вероятно, будет более эффективен в кэшировании запросов, чем ваш собственный код, он не так быстр, как никогда, прежде всего, не требует подключения.

Ваш сервер должен быть в состоянии справиться с вещами легко. Всего несколько заметок:

  1. Использование SSL увеличит ваши вычислительные требования. Итак, используйте простой HTTP.
  2. Использование prefork MPM увеличит ваши требования к памяти. Итак, используйте рабочий MPM.
  3. Использование большего количества параллелизма с большим количеством ядер улучшит производительность.
  4. Выделите больше оперативной памяти для вашей базы данных PostgreSQL.

Это просто общие рекомендации.

Другие вопросы по тегам