У меня есть сервер Ubuntu, на котором запущен apache2, который, как я ожидаю, поразит около 500-1000 (одновременных) пользователей в течение ограниченного времени. Сервер обслуживает смесь пользовательских (довольно легких) php-страниц, подключенных к базе данных postgresql (размером около 20 МБ), и статического контента. Аппаратное обеспечение стабильное и довольно мощное:
Во время предыдущих скачиваний на этом сервере я увеличил ServerLimit, MaxClients для модулей MPM и уменьшил Timeout и KeepAliveTimeout. Это сработало, но было вялым, и я чувствую, что можно сделать больше. Как бы вы посоветовали настроить сервер Apache для обработки такой нагрузки?
Узким местом в этом сценарии будет PHP и то, что он делает с базой данных. Если вы открываете новое соединение с каждым вызовом, то вы, скорее всего, столкнетесь со стенами ввода-вывода при доступе к диску больше, чем что-либо еще. Лучше всего иметь базу данных и статический контент на RAM-диске и фиксировать необходимые изменения в базе данных на диске. Также поддерживайте эффективный механизм кэширования запросов с использованием выделенного RAM быстрого поиска по хешу в PHP, чтобы вы не обременяли postgresql ненужными циклами обработки, связанными с поиском в кэше запросов. Хотя postgresql, вероятно, будет более эффективным в кэшировании запросов, чем ваш собственный код, он не так быстр, как если бы вообще не было необходимости подключаться к нему.
Ваш сервер должен легко справляться с задачами. Несколько примечаний:
Это просто общие рекомендации.