|
|
|
Канал Игры Мечты: «Multithreading в играх» |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Мы недавно совсем задействовали watchdog на actor model фреймворке для C++ (SObjectizer) в сфере e-commerce 24x7 high-load.
Смысл в том, что приложение строится из акторов (они же агенты в терминах фреймворка). Агент есть класс с множеством методов, часть из которых является событиями. Агенту выделяется нить, и соответственно на ней вызываются события. Однако, в некоторых случаях возможны ситуации, когда нить зависает намертво, и в большой системе с большим кол-вом агентов от мертвых душ ничего хорошего. Соответственно, watchdog периодически посылает сообщения агентам (которые вызывают у них события) и те обязаны ответить по таймауту. Если таймаута нет, то принимается решение, чаще всего рестарт приложения (что уже отлажено).
На практике watchdog реагирует на порядок быстрее, чем саппорт, и ещё быстрее по ночам. Т.о. повышается эксплуатационная готовность системы.
А основная причина зависания - повисание коннекта в Oracle. И чего там у оракла под капотом иногда творится не знают ни админы, ни техподдержка.
Ещё очень похожее на watchdog делали проверку сетевых соединений. Если траффика по открытому соединению нет, то по нему периодически инициируется обмен ping-pong. Если ping-pong за разумно-предельное время не проходит, то делается реконнект (т.е. как рестарт по инициативе watchdog'a).
Такие вот высокоуровневые сторожевые собаки.
_________________ μηδείς αγεωμέτρητος εισίτω
Последний раз редактировалось: Minx (14:59 19-12-2015), всего редактировалось 1 раз |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Minx : |
Ещё очень похожее на watchdog делали проверку сетевых соединений. Если траффика по открытому соединению нет, то по нему периодически инициируется обмен ping-pong. Если ping-pong за разумно-предельное время не проходит, то делается реконнект (т.е. как рестарт по инициативе watchdog'a).
|
Это не совсем то. Одно дело переконнект, другое дело просто убить поток в состоянии лока.
Minx : |
На практике watchdog реагирует на порядок быстрее, чем саппорт, и ещё быстрее по ночам. Т.о. повышается эксплуатационная готовность системы.
А основная причина зависания - повисание коннекта в Oracle. И чего там у оракла под капотом иногда творится не знают ни админы, ни техподдержка.
|
Тем не менее это говнокод и костыль
_________________ MOV topka, C++ |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Jurec : |
Это не совсем то. Одно дело переконнект, другое дело просто убить поток в состоянии лока.
|
Та же схема, только ресурс и действия другие.
Jurec : |
Тем не менее это говнокод и костыль
|
Твое неговнокодовое бескостыльное решение?
_________________ μηδείς αγεωμέτρητος εισίτω
Последний раз редактировалось: Minx (15:18 19-12-2015), всего редактировалось 1 раз |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
Minx : |
зависания - повисание коннекта в Oracle.
|
а странно, что в этом случае рестарт приложению, когда можно было бы ровно то же, что и во втором случае
я когда столкнулся с более-менее промышленной СУБД, MS-SQL, то там коннект дохнет сам по себе, возможно по таймауту, простейшее решение, перед тем как чего-то послать, SQL, проверить состояние коннекта и переконнектиться, если надо
а в постгрес меня такую штуку заставили опсы написать, они иногда рестартили демон СУБД на живом игровом сервере
_________________ This is what you get ...
(c) Radiohead |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Sh.Tac. : |
а странно, что в этом случае рестарт приложению, когда можно было бы ровно то же, что и во втором случае
|
В том случае нить начала выполнять запрос и заткнулась в нем.
Реконнект как правило спасает если у оракла поехала крыша и при работе с коннектом сыплются ORA-ошибки-эксепшены. Что бывает чаще, чем зависшая нить.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
БулерМэн
420 EGP
   Рейтинг канала: 2(21) Репутация: 68 Сообщения: 1580 Откуда: Гороховец Зарегистрирован: 07.02.2006
 |
|
Minx : |
Соответственно, watchdog периодически посылает сообщения агентам (которые вызывают у них события) и те обязаны ответить по таймауту. Если таймаута нет, то принимается решение, чаще всего рестарт приложения (что уже отлажено).
|
У меня похожая задача была, решено было использовать аналогичный метод - если через N секунд нет ответа - убить "дочерний" процесс.
Работает весьма эффективно, то есть подходить вообще не нужно.
Конечно, если некорректно завершить головной процесс, который следит за всем этим хозяйством - то велика вероятность замусорить память не отвечающими процессами.
|
|
|
Vostok-1
155 EGP
  Репутация: 24 Сообщения: 394
Зарегистрирован: 15.08.2015
 |
|
Sh.Tac. : |
с более-менее промышленной СУБД, MS-SQL, то там коннект дохнет сам по себе, возможно по таймауту,
|
Совершенно точно по тайм-ауту. Потому, пользуйтесь пулом соединений.
_________________ "The gods do not protect fools.
Fools are protected by more capable fools."
Larry Niven |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Jurec : |
эмдедед уже какой-то пошел
|
эмбедед тоже не лыком шит (;
http://www.oosmos.com/intro
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Vostok-1
155 EGP
  Репутация: 24 Сообщения: 394
Зарегистрирован: 15.08.2015
 |
|
Хочется спросить, нет ли менеджера памяти с автосборкой мусора для какого-нибудь простенького Си-компилятора.
_________________ "The gods do not protect fools.
Fools are protected by more capable fools."
Larry Niven |
|
|
|
|
|
Канал Игры Мечты: «Multithreading в играх» |
|