dastapov: (Default)
[personal profile] dastapov
Раз уж в предыдущих комментариях затрагивалась тема божественности рекурсии, расскажу я вам баечку про рекурсию.

Начиналась история достаточно безобидно.

Жил да был некий администратор. И в служебные обязанности ему вменялось следить за нормальной работой N важных систем. В какой-то момент, когда систем стало N+1, он задумался о том, что надо как-то облегчать свою жизнь.

Например, сделать так, чтобы его уведомляли о самых страшных и приоритетных проблемах SMS-ами на его мобильный телефон.

Сказано - сделано, благо администратор работал в компании, предоставляющей услуги мобильно связи, и организовать email2sms ему было - раз плюнуть.

И вот уже написан скрипт, который мониторит /var/log/* на предмет критических ошибок. Скрипт написан на perl, весь ощетинился regexp-ами, красота неописуемая.

Долго ли, коротко ли, приходит конец рабочего дня. Администратор прописывает скрипт в cron, с запуском раз в минуту и идет домой.

И надо же такому было случиться, что именно в эту ночь на одной из подшефных систем случается какой-то сбой - кажется, место в /var закончилось. Монитор дискового пространства пишет об этом запись в syslog. Скрипт-уведомитель уже тут как тут - отсылает администратору SMS, пишет об уведомлении запись в свой лог. Точнее, пытается - места-то нет. А это ошибка в работе скрипта, о которой тоже надо уведомить администратора по SMS!

Через минуту все повторяется. И еще раз. И еще раз. И еще много, много раз. А надобно заметить, что особенность системы коротких сообщений сети GSM в том, что телефон может одномоментно принять и хранить ограниченное количество сообщений. В те далекие времена новые SMS-ы хранились только на SIM-карте, и помещалось их туда от силы 10.

После того, как администратору пришло 10 SMS-ов и буфер в SIM-карте забился, все остальные SMS-ы стали накапливаться на SMSC (центре доставке SMS), пока и там не закончилось место для очереди SMS-ов для одного конкретного абонента. Тогда письма стали накапливаться в очереди sendmail-а на том сервере, с которого посылались уведомления.

А утром пришел администратор, постучал по скрипту и сказал: "Горшочек, не вари".

Впрочем, к этому моменту манной каши уведомлений уже было сгенерировано на пол-года вперед. Хорошая новость заключалась в том, что очередь sendmail-а можно было просто почистить. Плохая новость заключалась в том, что почистить очередь на SMSC не представлялось возможным.

Администратор попробовал удалять SMS-ы на телефоне, но вместо них сразу же приходили новые, точно такие же.

Пришлось ему ждать 5 суток, пока SMS-ы на SMSC не протухли и не распались на 100% recyclable электроны.

Мораль басенки: организовывая рекурсию, не забывай про организацию грамотной базы :)

(no subject)

Date: 2006-08-23 08:51 am (UTC)
From: [identity profile] rssh.livejournal.com
Вобще повезло, что скорость генерации была меньше пропускной способности SMS Gat-a ;)
Аффтор, пиши ищщо !

(no subject)

Date: 2006-08-23 09:02 am (UTC)
From: [identity profile] eth0-blog.livejournal.com
какая-то рекурсия завуалированная...
тут скорее крон, а не рекурсия :)

(no subject)

Date: 2006-08-23 09:48 am (UTC)
From: [identity profile] xoma-xoma.livejournal.com
Ну почему "завуалированная"? Ошибка, порждающая другу ошибку -- вполне явно. Не все факторы были учтены при разработке. А крон тут просто как промежуточный шаг. Админ мог циклически сделать проверку лога, тогда крон был бы спусковым крючком "маннойкашиварениея" ;)
Кстати, достаточно классическая ситуация: обработчик ошибки генерирует очередную (если не такую же) ошибку...

(no subject)

Date: 2006-08-23 09:58 am (UTC)
From: [identity profile] eth0-blog.livejournal.com
ну, если бы вторая порожденная ошибка снова порождала ошибку и уведомление, а та в свою очередь - следующую ошибку и уведомление и тд, то это была бы честная и явная рекурсия :)

а когда ошибка породила ошибку и села ждать следующего запуска из крона - то это псевдо-рекурсия имхо.

(no subject)

Date: 2006-08-23 01:40 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Там, кстати, что-то такое было. По-моему, все усугублялось тем, что скрипт сам ругался в syslog и сам на себя реагировал при следующем запуске.

Надо было по свежим следам записывать, но это было в прошлом веке :)

(no subject)

Date: 2006-08-23 09:34 am (UTC)
From: [identity profile] awind.livejournal.com
о, взаимодействие подохшего /var и чего-ниубдь типа syslog это всегда весело.

(no subject)

Date: 2006-08-23 10:16 am (UTC)
From: [identity profile] alexshubert.livejournal.com
хорошоооо

(no subject)

Date: 2006-08-23 10:41 am (UTC)
From: [identity profile] -darkus-.livejournal.com
Сильно!

(no subject)

Date: 2006-08-23 01:13 pm (UTC)
From: [identity profile] http://users.livejournal.com/_navi_/
хорошая басенка!
есть ещё мораль: на mission-critical системах располагай /var/log на отдельном partition'е

(no subject)

Date: 2006-08-23 02:18 pm (UTC)
From: [identity profile] barbabionda.livejournal.com
Улыбнуло...
Тетя Таня (С) Татьяна Владимировна (АССОИУ КПИ, кто знает тот поймет), всегда говорила "осторожней с рекурсией, память ограничена"....

(no subject)

Date: 2006-08-23 07:49 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Just curious, а она рассказывала про tail call optimization, или у нее любая рекурсия ела память?

(no subject)

Date: 2006-08-28 01:12 pm (UTC)
From: [identity profile] barbabionda.livejournal.com
Любая :))))

(no subject)

Date: 2006-08-23 06:09 pm (UTC)
From: [identity profile] blinohod.livejournal.com
Мда, я так при попытке подцепить отправку SMS-нотификаций, дошел до пункта "а ежели свалился SMS-шлюз", но успел спохватиться вовремя :)

(no subject)

Date: 2006-08-24 07:23 am (UTC)
From: [identity profile] tarantul.livejournal.com
Все таки мне кажется что это была итерация :)

(no subject)

Date: 2006-08-24 07:24 am (UTC)
netch: (Default)
From: [personal profile] netch
У Снара была история в Питере году в 97-м как ему звонили из пейджерного оператора со словами "чувак, а ты в курсе, что у нас на всех один 9600, а ты нам гонишь свои плачи про упавший канал на 28800?"

(no subject)

Date: 2006-08-24 10:14 am (UTC)
From: [identity profile] nealar.livejournal.com
А почему нельзя было почистить очередь SMSC? Он не на SMPP был сделан?

(no subject)

Date: 2006-08-24 11:23 am (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
У данного конкретного админа доступа к SMPP-интерфейсу не было, а ради него эксплуатация SMSC, как я понимаю, злорадно решила не напрягаться.

(no subject)

Date: 2006-08-24 12:22 pm (UTC)
From: [identity profile] nealar.livejournal.com
А через что ещё можно рассылку SMS сделать?

(no subject)

Date: 2006-08-24 02:46 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Гейт email-to-sms.

Profile

dastapov: (Default)
Dmitry Astapov

May 2022

M T W T F S S
       1
2345678
9101112131415
161718 19202122
23242526272829
3031     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags