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