![Масштабирование сервера Apache](https://rvso.com/image/515059/%D0%9C%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%20Apache.png)
У меня есть сервер Ubuntu, на котором запущен apache2, и я ожидаю, что на него будут нагружаться около 500-1000 (одновременных) пользователей в течение ограниченного периода времени. Сервер обслуживает смесь пользовательских (довольно легких) php-страниц, подключенных к базе данных postgresql (размером около 20 МБ), и статического контента. Аппаратное обеспечение стабильное и довольно мощное:
- Intel Xeon E5420 @ 2.5 ГГц
- 12 ГБ ОЗУ
Во время предыдущих рывков на этом сервере я увеличил ServerLimit, MaxClients для модулей MPM и уменьшил Timeout и KeepAliveTimeout. Это сработало, но было вялым, и у меня есть чувство, что можно сделать больше. Как бы вы предложили настроить сервер Apache для обработки такого рода нагрузки?
решение1
Вашим узким местом в этом сценарии будет PHP и то, что он делает с базой данных. Если вы открываете новое соединение с каждым вызовом, то вы, скорее всего, будете сталкиваться со стенами ввода-вывода при доступе к диску больше, чем с чем-либо другим. Лучше всего иметь базу данных и статический контент на RAM-диске и фиксировать изменения по мере необходимости в базе данных на диске. Также поддерживайте эффективный механизм кэширования запросов с помощью выделенного в RAM быстрого поиска хэша в PHP, чтобы не обременять postgresql ненужными циклами обработки, связанными с поиском в кэше запросов. Хотя postgresql, вероятно, будет более эффективен в кэшировании запросов, чем ваш собственный код, он не такой быстрый, как если бы вообще не нуждался в подключении.
решение2
Ваш сервер должен легко справляться с этим. Несколько замечаний:
- Использование SSL увеличит ваши вычислительные требования. Поэтому используйте простой HTTP.
- Использование prefork MPM увеличит ваши требования к памяти. Поэтому используйте worker MPM.
- Использование большего количества параллельных вычислений с большим количеством ядер повысит производительность.
- Выделите больше оперативной памяти для вашей базы данных PostgreSQL.
Это всего лишь общие рекомендации.