У любого инженера есть истории про «день, когда я сделал что-то очень-очень плохое». А вот и моя.
Шла моя последняя неделя в Ning. Уже год я отвечал за группы инфраструктуры и разработки. Подходил конец приятному периоду работы с сильной командой над трудными задачами.
В начале 2010 года (до того, как начал работать) Ning успешно поменял premium на платную модель монетизации. Среди двух миллионов социальных сетей сервиса встречались и кипящие онлайн-сообщества, но большинство активными не являлись. Превратить их в сотню тысяч платежеспособных клиентов было верным для бизнеса решением. Некоторое время мы держали 1,9 млн. осиротевших сайтов на случай, если кто-то захочет принять их во владение и начать платить. К концу 2011 года доля возвращающихся упала достаточно низко, что можно было начинать чистить мусор.
Я вызвался проводить чистку. Мне нравились такие мелкие задания, поскольку они позволяли мне сконцентрироваться в коде, а инженеров подобная надоедливая рутина лишь отвлекала. Работа заключалась в нескольких SQL-запросах, написании скриптов, тестировании на нагрузку и двойной перепроверке. Тяжелее всего было удостовериться в том, что у нас получился верный список соцсетей для удаления.
Чтобы написать и запустить скрипты, понадобилось примерно два месяца, позже они были одобрены без особых происшествий, и я расслабился.
В проход очистки не была включена устаревшая часть системы. Поначалу я не задумывался о ней — это были лишь несколько тысяч соцсетей. Но коль скоро я покидал Ning, любую работу нужно было доводить до конца, в том числе и этот проект чистки. Я собрал список ненужностей и запустил мои скрипты. 2 тысячи удалений прошли мгновенно. На часах было 11 часов вечера — это была моя последняя рабочая среда в Ning.
Мне немедленно стало понятно, что я сделал что-то очень нехорошее. Поскольку я сидел рядом с группой поддержки клиентов, я услышал участившиеся сигналы их мессенджеров и трель телефонных звонков. Весь Ning отдавал страницу 404 с надписью «Мы сожалеем». Вот черт.
На выяснение причины понадобились лишь пара минут. Одна из сетей, которую я пометил для удаления, имела центральные Javascript и CSS, необходимые каждой сети Ning — важные штучки. Важность сети socialnetworkmain была известна всем, и если б я внимательней выполнял выборочные проверки, то не проморгал бы. Но я отнесся к этому небрежно.
Ограничения безопасности я обходил бэкдор-методом, против которого не действовала защита очень важных соцсетей.
К счастью, Фил, один из наших лучших инженеров инфраструктуры, сидел неподалеку и быстро восстановил работу сети через бэкэнд. Всё вернулось на круги своя почти сразу же. Чувство тревоги начало спадать. Мы расслабились и обменивались шутками.
Чтобы поправить эффекты второго и третьего порядка от моего прокола, потребовалось ещё несколько часов. Неработающий механизм создания соцсетей — исправлено. Тихо подыхающая система внутреннего мониторинга — исправлено. И так далее.
Я получил четыре урока:
- Инструменты отката — ваши друзья. Создание готовых инструментов для отмены изменений займет время, но если они понадобятся, их наличию вы будете только рады.
- Изменения нужно производить днем. Решение резких проблем осложняется отсутствием нужных людей или вялостью работников. Многочасовое полуночное решение описанного выше инцидента днем могло занять считанные минуты.
- Дело не закончено до того момента, пока оно не закончено. На антикризисном настрое от проблем избавляться легче. Как только основная задача решена, люди начинают выдыхаться, уходят перекусить, отсыпаться, куда угодно. Но последствия могут показаться попозже, или же их будет не так просто найти.
- Несоразмерные эффекты. Все мы знакомы с нелинейными состояниями отказа сложных систем. Инциденты по типу этого — напоминания крупных результатов мелких изменений. Другими словами, серьезно относиться нужно даже к мелочам.
Моя работа в Akamai хорошо подготовила меня к управлению кризисом. Но и такие курсы повышения квалификации недурны.
Автор: FakeFactFelis