javascript

Хроники Облачного княжества: как я приручал монолит‑дракона

  • воскресенье, 12 апреля 2026 г. в 00:00:02
https://habr.com/ru/articles/1022326/

Часть 1.

Когда я шёл в DevOps, я думал, что буду приручать серверы. Оказалось — людей, процессы и древнего дракона по имени Легаси.

Я пришёл в Башню релизов ровно в девять ноль‑ноль — как человек, который ещё верит в расписание.

Башня стояла на холме, укрытая облаками и корпоративными ценностями. Над входом висел герб: три кольца, перечёркнутые молнией, и девиз, вырезанный на граните так, чтобы его невозможно было отрефакторить:

«Не деплой в пятницу».

Внутри меня встретила девушка в мантии, похожей на худи с капюшоном, и сказала:

— Добро пожаловать в Облачное княжество. Я Марфа ПиЭмова, бард‑продакт. Тебе в отдел магии стабильности. Подпиши вот тут.

Она протянула мне свиток. На свитке было написано мелким шрифтом: «Подписывая, вы соглашаетесь с тем, что все инциденты произошли по причине человеческого фактора, кроме случаев, когда человеческий фактор — вы».

— Это шутка? — спросил я.

— Это юридическая магия, — улыбнулась Марфа. — Шутка будет на ретро.

Пока я подписывал свитки кровью из пальца (на самом деле — стилусом), мимо прошёл мужчина с лицом человека, который видел слишком много релизов и слишком мало сна. Он держал в руках щит из задач и копьё из ответственности.

— Сэр Тимлид Артур, — представился он. — Ты новый?

— Да.

— Тогда запомни первое правило Башни релизов: если всё тихо — это не значит, что всё хорошо. Это значит, что мониторинг молчит из вежливости.

Я нервно рассмеялся.

— Я думал, здесь всё в облаках, автоматически, — попытался я пошутить.

— Автоматически у нас только «срочно», — ответил Артур и ушёл, оставив после себя запах кофе и незакрытых тикетов.

Марфа повела меня дальше, по коридорам, полным табличек с загадочными надписями: «Согласование», «Зона ответственности», «Согласование согласования», «Кухня (не трогать прод)».

Самая большая дверь вела в зал, где стоял круг из стульев. В центре кругом лежала доска. На доске было написано:

«СТЕНДАП».

— Это… — начал я.

— Ритуал, — сказала Марфа. — Ежедневный. Мы встаём и говорим правду. Иногда коротко. Иногда — чтобы не расплакаться.

В круг вошли люди. Один был в плаще, полностью покрытом стикерами «FIXME». Другой нёс за собой тележку со свитками схем, похожих на карты древних континентов. Третий пришёл с огромным котлом, из которого пахло SQL.

— Это Гаврила, гном‑ДБА, — шепнула Марфа. — Он хранитель состояния. Не обижай его. Он может поднять базу из мёртвых, но потом неделю будет ворчать и просить «не трогать прод».

Гаврила посмотрел на меня, как на человека, который однажды скажет «а давайте миграцию прямо сейчас».

— Здорово, — сказал он. — Я Гаврила. Если начнёшь говорить «просто добавим индекс» — я начну говорить «просто переедем в другую компанию».

Я понял, что попал в правильное место.

Стендап начался.

— Вчера я делал задачу «ускорить», — сказал плащ со стикерами. — Сегодня продолжу ускорять. Блокеры: реальность.

— Вчера я писал тесты, — сказала девушка с глазами человека, который видел всё. — Сегодня буду чинить тесты. Блокеры: разработчики.

— Вчера мы планировали релиз, — сказала Марфа и взмахнула руками так, словно дирижировала оркестром. — Сегодня мы релизим. Блокеры: нет.

Я автоматически посмотрел на Артура. Артур ничего не сказал, но его взгляд говорил: «Блокеры: да».

Потом слово дали мне.

— Я… — начал я. — Я новый. Я планировал сегодня настроить наблюдаемость: метрики, алерты, логирование…

В зале повисла пауза, как будто я сказал «давайте жить дружно».

— Отлично, — сказал Артур. — У нас как раз сегодня деплой. Познакомишься с системой… в боевых условиях.

Я почувствовал, как внутренний оптимизм начинает писать заявление на увольнение.

Деплой выглядел как церемония призыва. В комнате релизов стоял алтарь — монитор, на котором светились руны пайплайна. Рядом лежал гримуар с надписью «runbook (черновик)». В углу сидел Некромант Легаси — архитектор древних времён. Он не поднимал головы.

— Некромант, — шепнул Артур, — не любит, когда трогают его дракона. Но дракон уже дышит state‑ом на нас. Так что выбора нет.

— Какого дракона? — спросил я.

Артур показал на диаграмму на стене. Она была похожа на карту подземелий: один огромный блок, из которого тянулись тонкие трубки к множеству маленьких блоков.

— Это монолит‑дракон, — сказал Артур. — Когда‑то он был один. Потом вокруг него построили микросервисы, чтобы «всё было как у взрослых». Теперь дракон один, но у него много маленьких родственников, которые вечно спорят за общий state. И все они хотят кушать.

Марфа хлопнула в ладоши.

— Ну что, команда! Релизим! Главное — без паники. Паника должна быть структурированной, по Kanban.

Пайплайн зажёгся зелёным. Я увидел шаги:

  • сборка;

  • тесты;

  • деплой на stage;

  • «ручное подтверждение»;

  • деплой на prod.

Слово «ручное» мне почему‑то не понравилось.

Сборка прошла. Тесты… тоже прошли. Я даже начал верить. Пайплайн дошёл до ручного подтверждения, и Марфа торжественно сказала:

— Ну что, подтверждаем. У нас дедлайн.

— Подожди, — сказал Артур. — Давайте хотя бы посмотрим последние изменения. Новое правило: «сначала читаем, потом жмём».

— У нас времени нет, — ответила Марфа. — У нас же agile.

В этот момент монитор мигнул, словно кто‑то за стеной отключил электричество, и из пайплайна вылезло сообщение красными буквами:

«PROD: permission denied».

— Это шутка? — спросила Марфа.

— Нет, — сказал Артур. — Это безопасность.

В комнату вошла Инквизиторша. На плече у неё висела связка печатей, а на лице — выражение человека, который видел слишком много «мы быстро».

— Кто начал ритуал без согласования? — спросила она.

— Мы… — начал было Марфа.

— «Мы» — это всегда «никто», — отрезала Инквизиторша. — Согласования нет. Печати нет. А значит, портал в прод не откроется.

Я осторожно поднял руку:

— А можно посмотреть, какие именно права нужны? Может, роль не привязана…

Инквизиторша посмотрела на меня так, как смотрят на новичка, который ещё не знает, что слово «можно» в компании — это отдельный проект.

— Можно. Но сначала — обучение. Потом — заявка. Потом — согласование. Потом — ещё одно согласование, чтобы согласовать согласование. Потом вы получите доступ. Если не передумаете.

Марфа медленно обернулась к Артуру:

— Мы не успеем.

— Мы не успеем, — согласился Артур. — Поэтому мы сделаем по‑взрослому: откатим решение. И, возможно, наконец напишем нормальный runbook.

Некромант Легаси впервые поднял голову.

— Я же говорил, — сказал он тихо. — Дракона не будят.

В этот момент пейджер‑амулет на поясе Артура зазвенел. Звук был похож на крик чайника, которого забыли выключить в проде.

— Алерт, — сказал Артур. — Идём.

Я ещё не знал, что это только начало.

Я шёл за ними по коридорам Башни релизов и думал: странно. Я пришёл на работу, чтобы писать инфраструктуру как код. А оказался в месте, где код — это самое простое. Труднее всего здесь было писать… реальность.

И всё же, где‑то внутри меня загорелся маленький огонёк профессионального любопытства.

Если у них «permission denied» — значит, у них есть permissions. Если у них есть permissions — значит, можно навести порядок.

А если порядок невозможен… что ж. Тогда можно хотя бы написать об этом историю.

Продолжение следует...