Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 21, 2014 18:03:00

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Архитектура приложения. Отказоустойчивость.

s0rg
За него не скажу, но у flask есть специальный обработчик всех ошибок, типа финализатор запроса, возможно, что-то подобное есть в и пирамиде.
Мне кажется это не будет работать, потому что воркер убивается 9 сигналом и никто его ждать не будет.

DAMN ! worker 2 (pid: 4247) died, killed by signal 9 :( trying respawn ...
Respawned uWSGI worker 2 (new pid: 4457)

s0rg
типа финализатор запроса
Запрос не успевает закончиться.



Отредактировано Budulianin (Авг. 21, 2014 18:04:56)

Офлайн

#2 Авг. 21, 2014 18:09:36

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Архитектура приложения. Отказоустойчивость.

Я ещё думаю, что проблема может быть в time out uWSGI.
Главный процесс видит, что воркер тупит с запросом и убивает его.
Наверняка есть настройка time out uWSGI. Может если поставить его больше, то воркер не будут убивать.

Но это не исправит архитектуру приложения.



Офлайн

#3 Авг. 21, 2014 18:27:06

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Архитектура приложения. Отказоустойчивость.

Budulianin
Наверняка есть настройка time out uWSGI
Настройка-то есть. Только это настройка именно uWsgi.
А есть еще сервер выше.
У меня был проект веб-интерфейса к хитрой службе, единственный канал взаимодействия с котрой был через thrift, само приложение работало штатно, но на крупных париях данных, thrift начинал тупить.
Я выкрутил все тайм-ауты на максимум (приложение для внутреннего использования) как у uWSGI так и у веб-сервера (nginx в моем случае) - но приложение все-равно дохло, если не успевало ответить за время
около минуты. Что именно его прибивало - я так и не смог понять.

Офлайн

#4 Авг. 21, 2014 18:32:03

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Архитектура приложения. Отказоустойчивость.

Budulianin
Мне кажется это не будет работать, потому что воркер убивается 9 сигналом и никто его ждать не будет.
А как это произошло? Это проверка sleep-ом?

Отредактировано s0rg (Авг. 21, 2014 18:32:19)

Офлайн

#5 Авг. 21, 2014 19:24:12

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Архитектура приложения. Отказоустойчивость.

s0rg
А как это произошло? Это проверка sleep-ом?
Нет, ты посоветовал “прибирать” БД в “финализаторе”, типо если воркер будет падать, то этот “финализатор” отработает и почистит БД.

А я говорю, что никто не даст этому “финализатору” отработать(не успеет), потому что главный процесс uWSGI убивает воркер 9 сигналом, когда делает вывод, что он “тупит”.



Отредактировано Budulianin (Авг. 21, 2014 19:26:50)

Офлайн

#6 Авг. 21, 2014 20:31:57

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Архитектура приложения. Отказоустойчивость.

А! Теперь понял.
По поводу финализатора - это была мысль, касательно ‘отвалившихся’ клиентов и только о них.

Офлайн

#7 Авг. 21, 2014 20:49:40

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Архитектура приложения. Отказоустойчивость.

s0rg
А есть еще сервер выше.
У меня: клиент -> nginx -> uWSGI.

Так что можно подкрутить time out. В разумных пределах конечно, потому что долгие запросы никому не нужны, такие воркеры, пусть погибают(не знаю будут ли такие ситуации в реале на продакшене). Похоже действительно нужно об очередях подумать.



Отредактировано Budulianin (Авг. 21, 2014 20:50:24)

Офлайн

#8 Авг. 22, 2014 05:17:46

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Архитектура приложения. Отказоустойчивость.

Мне кажется, или вы сейчас заново изобретаете транзакции?



Офлайн

#9 Авг. 22, 2014 09:52:06

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Архитектура приложения. Отказоустойчивость.

To Fishhook

У меня mongodb. Там нельзя объединять несколько запросов в одну транзакцию.



Офлайн

#10 Авг. 22, 2014 12:07:11

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Архитектура приложения. Отказоустойчивость.

Budulianin
А я говорю, что никто не даст этому “финализатору” отработать(не успеет), потому что главный процесс uWSGI убивает воркер 9 сигналом,
В uWSGI есть фича перезапуска приложения при обновлении (файлов), дак вот там тоже рубит -9, никакие финализаторы не срабатывают.

Если запрос висит долго - плохо, так можно лекго заддосить, забить все потоки и т.п. Как выше упомянули - очереди.
У меня в одном из проектов формирование страницы (индикатора) занимает от 2 - 200 сек. За счет того что фоново происходит предрасчет всех кешей (правда не для всех задач такое подойдет) - все страницы открываются мгновенно.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version