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

Масштабирование сервера Apache

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

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

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

Ваш сервер должен легко справляться с задачами. Несколько примечаний:

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

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