TGViewer
Никита Ульшин про IT Никита Ульшин про IT @ulshinblog · 3.2K subscribers
Post #241 438
Антипаттерн миграции слонов

Встретил это замечательное определение в книге “Software architecture: the hard parts”. Антипаттерн описывает один из самых популярных, понятных, очевидных и неправильных подходов к распиливанию монолита - “мигрировать слона по кусочкам”.

Сама по себе идея - замечательная. Вот у нас есть большая штука, её нужно как-то переделать. Значит, нужно съесть этого слона по кусочкам! В случае обычных проектов в жизни этот подход работает прекрасно (сам проверял). Но в случае распиливания монолита на сервисы этот слоник способен легко вызвать несварение. При всей простоте, у подхода есть куча минусов и побочных эффектов.

Главный на мой взгляд минус - это игнорирование общей системы в пользу частного куска. Часто какая-то функциональная часть сервиса так и просится быть выделенной в отдельный микросервис. Команда увлечённо начинает этим заниматься (и даже, возможно, завершает этот процесс). Но на выходе оказывается, что полученный сервис превратил наш монолит в распределённый монолит со всем ворохом сопутствующих проблем. К сервису идёт куча сетевых обращений, появились распределённые транзакции или ещё неизвестно что.

Вторая проблема - выделение микросервиса по функциональному признаку. В таком подходе существует скрытый риск того, что изменения в требованиях превратят в легаси половину системы. Даже если изначально сервис был выделен хорошо и отвязан от монолита - малейшие изменения в структуре данных снова создают распределённый монолит.

В итоге такое распиливание “слона по кусочкам” частенько приводит к появлению на проекте архитектурного долга и проблем с надёжностью. И заканчивается это всё тем, что я на практике делал чуть ли не на каждом месте работы - заливанием микросервисов назад в монолит. Грустно, не так ли? В одном из самых неприятных сценариев мы полгода (полгода, Карл!) выносили микросервис - писали код, мигрировали данные, настраивали взаимодействие. А затем торжественно похоронили его и еще несколько месяцев заливали назад в монолит.

И ладно, когда дело ограничивается одним сервисом. Некоторые команды умудряются распилить ВЕСЬ монолит на микросервисы в таком подходе. В итоге код становится проще, а вся сложность монолита уезжает на уровень взаимодействий между микросервисами. Надёжность системы помахала ручкой и вышла из чата.

Именно поэтому так важно изучать то же DDD и выносить микросервисы, основываясь на домене. Это тоже не панацея, но вероятность сливания микросервиса назад в монолит всё-таки становится пониже.

Есть ещё одна отличная практика. В следующий раз, когда у вас или кого-то из команды зачешутся руки что-то вынести в микросервис, можно задать очень отрезвляющий вопрос: “А, собственно, нахрена?”
  • ⚡ 4
  • 👍 2
  • 💯 2
More from @ulshinblog
  1. Sep 26, 2026Новые ИИ-возможности в управлении ИТ-услугами — бесплатный практический вебинар 7 октября…
  2. Sep 25, 2026«Масштабированный скрам. Как организовать гибкую разработку в крупной компании», Крэг Ларм…
  3. Sep 24, 20261–2 октября в Москве состоится byteoilgas_conf — четвертая профессиональная конференция дл…
  4. Sep 23, 2026Как я возвращаю паузы, которые у меня отнял ИИ Недавно я писал, что ИИ убрал из моей работ…
  5. Sep 22, 2026Avito.Tech.Conf уже совсем близко 🕺 Разработка меняется из-за AI, а руководители всё так…
  6. Sep 21, 2026Почему не все интересные идеи влияют на жизнь Я люблю читать книги. В детстве меня поглоща…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →