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

Повышение доступности сервера Apache

В настоящее время мы запускаем веб-приложение Perl поверх Apache 1.3 (я знаю, что оно сильно устарело, но в настоящее время мы ничего не можем с этим поделать). В течение дня, когда количество пользователей, обращающихся к приложению, увеличивается, сервер становится все менее и менее отзывчивым, пока в конечном итоге он не станет недоступен. На этом этапе мы останавливаем сервер Apache до тех пор, пока не исчезнут активные соединения, а затем перезапускаем сервер. Это далеко не идеальное решение и не решает основной проблемы.

Что мы можем сделать, чтобы найти первопричину нашей проблемы, и что мы можем сделать для ее решения в краткосрочной и долгосрочной перспективе?

Некоторые общие идеи:

  1. Используйте «верхний» и «свободный», чтобы проверить состояние вашего сервера во время высокой нагрузки. Обычно узким местом является ЦП, память или ввод-вывод, но также может быть конкретная проблема с вашим приложением / настройкой (например, проблемы с взаимоблокировкой при увеличении количества одновременных пользователей).
  2. Если проблема связана с памятью (особенно если она начинает переходить на страницу для подкачки), вы можете либо добавить больше оперативной памяти, либо удалить ненужные модули из Apache. Конфигурация по умолчанию обычно загружает все, что заставляет Apache потреблять много памяти для каждого клиента. Хотя это может показаться нелогичным, вы также можете уменьшить количество MaxClients, чтобы Apache не использовал столько памяти, что он начал бы менять местами.
  3. Если проблема связана с процессором, вы можете либо подумать о более мощном сервере, либо попытаться оптимизировать свое приложение. Я не знаком с Perl, но с PHP, устанавливающим код операции, такой как APC, снижает нагрузку на процессор, кэшируя скомпилированные сценарии PHP. Точно так же установка уровня кеширования, такого как Squid или Nginx, может помочь уменьшить количество запросов уровня Apache / Perl в зависимости от того, что кэшируется в вашем случае.
  4. Проблемы ввода-вывода могут быть решены путем получения более быстрых дисков и / или настройки RAID (типы для повышения производительности). Добавление слоя кэширования и / или увеличение памяти также может помочь снизить нагрузку ввода-вывода, сохраняя большую часть вашего приложения в памяти и меньше прикасаясь к диску.
  5. Если проблема не связана просто с неправильно настроенным Apache или приложением, ваши «лучшие» решения могут заключаться в том, чтобы исследовать добавление некоторого кэширования или переход на более мощный сервер, в зависимости от того, что вам проще сделать.

Похоже, у вас проблема с масштабируемостью. У вас есть два варианта:

1- Обновите характеристики сервера, добавив больше ЦП, ОЗУ и т. Д. Этот вариант может быть дорогим и недостаточно масштабируемым в долгосрочной перспективе. Кроме того, очень рекомендуется иметь другой сервер, чтобы устранить единую точку отказа.

2- Добавьте больше серверов и используйте балансировщик нагрузки для распределения нагрузки между всеми серверами. Этот вариант может быть лучше предыдущего для проблем с доступностью, особенно если у вас в настоящее время только один веб-сервер. Добавление дополнительных серверов обеспечивает большую масштабируемость в долгосрочной перспективе и может быть выполнено с использованием нескольких не очень дорогих аппаратных средств.