Расширение сервера 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, вероятно, будет более эффективен в кэшировании запросов, чем ваш собственный код, он не так быстр, как никогда, прежде всего, не требует подключения.
Ваш сервер должен быть в состоянии справиться с вещами легко. Всего несколько заметок:
- Использование SSL увеличит ваши вычислительные требования. Итак, используйте простой HTTP.
- Использование prefork MPM увеличит ваши требования к памяти. Итак, используйте рабочий MPM.
- Использование большего количества параллелизма с большим количеством ядер улучшит производительность.
- Выделите больше оперативной памяти для вашей базы данных PostgreSQL.
Это просто общие рекомендации.