Я сбился со счёта, сколько микросервисных проектов я видел — каждый с гордостью показывает свой “новый, масштабируемый до бесконечности набор микросервисов”. И каждый раз я думаю: через полгода всё это развалится. Не потому что микросервисы — плохая идея. У них есть своё место. Но это место точно не в команде из трёх человек с полуготовым MVP.
Парадокс? Самые успешные проекты, которые я видел — те, что реально запускались, регулярно релизились и не сливали бюджеты на бесполезную инфраструктуру — работали на монолитах.
Да, на тех самых “динозаврах” программной архитектуры.
Монолит — не враг
В какой-то момент слово “монолит” стало ругательством. Почти как “легаси”. Но большинство тех, кто осуждает монолиты — никогда не делали ничего сложнее CRUD-приложения.
А между тем, реальные проекты, которые находят пользователей, генерируют выручку и растут, зачастую пишут целый бизнес в одном репозитории с Postgres на бэке и одной большой папкой services.
И это работает. Великолепно работает.
Монолит — не проблема. Преждевременная сложность — вот настоящая беда.
Миф о “масштабируемости”
Молодые проекты обожают говорить, что “строят под масштаб”. Типа: “А что если нас завтра будет миллион пользователей?” — говорят они, в то время как форма регистрации на сайте не работает.
Реальность такова:
Молодым проектам не нужно масштабироваться. Им нужно выжить.
Им нужно быстро понять, что они вообще делают, и суметь резко сменить курс. Им нужно деплоить каждый день (а лучше каждый час), не разбираясь сутками, почему не работает gRPC между двумя контейнерами на одном и том же сервере.
На раннем этапе гибкость важнее масштабируемости. Простота лучше элегантности.
Рабочий, понятный код > распределённый код, который вызывает слёзы.
Быстро. Сфокусированно. В прод.
Знаете, что происходит, когда вы строите монолит?
Вы завершаете задачи.
Вы не тратите три дня, решая, нужно ли выносить авторизацию в отдельный сервис. Вы не пишете YAML ради YAML. Вы не заводите пять репозиториев и не называете это “архитектурой”.
Вы просто… делаете фичу.
Именно поэтому опытные команды чаще выбирают монолит. Потому что они уже прошли через весь этот микросервисный ад и знают цену вопроса. И знают, что это оправдано только при настоящей нагрузке.
Facebook в начале? Монолит.
GitHub? Монолит.
Amazon? Тоже начал как монолит — до того, как стало ясно, что нужно делить.
Цена микросервисов — не только техническая
Все говорят про границы сервисов и масштабируемость. Никто не говорит про мотивацию команды.
Попробуйте онбордить разработчика в проект с 40 микросервисами, половина из которых без документации и с названиями в стиле payment-helper-v2-legacy
. Посмотрите, как его душа тихо покидает тело.
А теперь сравните это с аккуратным, читаемым монолитом. Где можно найти нужную функцию и где “запустить проект” — это не три bash-скрипта и ритуал жертвоприношения.
Архитектура напрямую влияет на скорость команды. И микросервисы, если они не являются абсолютно необходимым злом, скорее тормозят, чем помогают. Культурно. Логистически. Ментально.
Монолит легко разбить. А вот микросервисы обратно не собрать.
Монолит — обратим. Микросервисы — нет.
Если монолит разрастается — отлично. Выделите часть. Отделите её, когда она начнёт мешать. И делать это нужно только после того, как появятся реальные “швы” в коде, по которым удобно резать.
Хорошая архитектура растёт органически, а не рисуется заранее в блокноте.
Вы не защитите свой проект, строя сложную систему. Вы защищаете его, выживая. Быстро. Разумно. И без выгорания.
Итог
Монолиты — не устарели. Они недооценены.
Они не потому что вы ленитесь. А потому что вы умны.
Потому что вы строите успешный проект, а не защищаете диплом по распределённым системам.
Потому что вы знаете: технологии — это не про “что модно”. Это про что работает.
А когда вы действительно достигнете той самой мифической “нагрузки” — у вас уже будут и деньги, и команда, и понимание, как и зачем всё разносить.
А до тех пор?
Релизьтесь быстро. Проектируйте просто. Да здравствует монолит!