Re: стоит ли убивать воркера?
Sergey Shepelev
temotor на gmail.com
Ср Дек 2 16:33:24 MSK 2009
2009/12/2 vromanov <nginx-forum at nginx.us>:
> Написан небольшой модуль для nginx. Он при старте конектится к базе данных а потом бодро отдет результаты запросов к базе данных (timesten). Проблема возникает если во время работы nginx презапустить базу данных. Конект отваливается и ничего хорошего не происходит. Есть два варианта как себя вести в таком случае - ловить такую проблему и переконекчиваться. Сам конект - операция небыстрая.
> Второй случай - просо убивать такого воркера (точнее он сам себя убьет) и ждать, что его перезапустит мастер.
> Вопросы
> 1) Будет ли мастер перезапускать умершего воркера?
Будет. Он для этого и нужен.
> 2) Как правильно воркер может себя убить
SIGTERM (kill -15, обычное ласковое убийство)
Есть два варианта как себя вести в таком случае: ловить такую проблему
и переподключаться к базе или фейлить запрос с 500. Умирать и
оставлять запрос без ответа это абсолютно странное поведение.
Если б вы сделали ленивый "конект когда его нет", вместо пхпшного
"конект на старте", то вопроса бы не возникло. Ваша небыстрая операция
произойдёт в любом случае. В случае убийства воркера *плюс к небыстрой
операции* ещё потратится несколько сотен микросекунд на запуск нового,
в течение которых по выдуманной вами причине другие запросы будут
обрабатывать только оставшиеся воркеры.
Допустим, база падает раз в час. Лучше один медленный ответ раз в час,
чем один запрос без ответа раз в час
> Posted at Nginx Forum: http://forum.nginx.org/read.php?21,27384,27384#msg-27384
>
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://nginx.org/mailman/listinfo/nginx-ru
>
Подробная информация о списке рассылки nginx-ru