Пока на сервере всего 250 сайтов, ничего не предвещает беды.
Но вот что будет, если натравить на сервер бэнчмарк...
Если Apache работает в штатном режиме и никто его не дергает:
Concurrency Level: 10
Time taken for tests: 9.982 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Total transferred: 8778000 bytes
HTML transferred: 7929000 bytes
Requests per second: 300.53 [#/sec] (mean)
Time per request: 33.275 [ms] (mean)
Time per request: 3.327 [ms] (mean, across all concurrent requests)
Transfer rate: 858.74 [Kbytes/sec] received
А теперь попробуем во время бенчмарка сделать reload (всего лишь reload, а не restart):
Concurrency Level: 10
Time taken for tests: 11.518 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Total transferred: 8778000 bytes
HTML transferred: 7929000 bytes
Requests per second: 260.46 [#/sec] (mean)
Time per request: 38.394 [ms] (mean)
Time per request: 3.839 [ms] (mean, across all concurrent requests)
Transfer rate: 744.24 [Kbytes/sec] received
Потери порядка 10% на пустом сервере (250 сайтов - 8-я часть от его "крейсерской" загрузки). Не сложно угадать, что начнется на сервере с 2000-2300 сайтами при простом советском релоаде.
Тут нам приходит на помощь директива Nginx:
http { upstream backend { server aaa.bbb.ccc.ddd:8080; server aaa.bbb.ccc.ddd:8090 backup; } }
Пока перегружается первый Apache, второй продолжает обслуживать запросы.
А самое интересное, что теперь можно решить проблему HTTP503, когда Apache просит Nginx постоять в очереди на обслуживание, так как у него нету свободных воркеров на обслуживание запроса. Nginx умеет менять свое поведение в зависимости от ошибки. Например отправить запрос на бэкэнд в случае 503. Делается это через директиву proxy_next_upstream.
Комментариев нет:
Отправить комментарий