Микросервисы – это способ независимо и быстро разрабатывать приложение большей командой людей, чем без них.
Как это происходит? Выделяется какая-то область приложения, под нее выделяется отдельная команда, эта команда либо выделяет код из первоначального монолита (если там уже был функционал), либо пишет заново. Для независимости у команды часто полная свобода: технологии, политики, релизы.
Часто микросервисы являются легитимным способом переписать систему. Система не просто рефакторится в микросервис, а при этом фактически код переписывается. Опять же часто это имеет смысл: накопленный опыт позволяет лучше реализовать (легче поддерживать, стабильнее работает, быстрее работает и т.п.) – так называемое улучшение нефункциональных характеристик.
Микросервисы приносят дополнительные проблемы: прежде всего из-за распеределенного характера системы:
- сетевые задержки
- сложность отладки
- сложность транзакций
- …
Более серьёзная проблема – когда команды меняются (разделяются / объединяются / сокращаются / создаются) – тогда моментально из потенциально технически идеальных микросервисов образуется технический долг – уже нет выделенной команды, которая им занимается (или вообще нет команды “временно” или несколько команд его). Может оказаться, что команде придется работать с несколькими языками вместо одного ранее и т.п. По сути, нужно делать рефакторинг, но по понятным причинам стоимости и снижения интенсивности релизов, его стараются отложить и вообще избежать.
Отдельно стоит рассмотреть принцип “модулей”. Существовала (может и сейчас еще где-то бродит) идея, что микросервисы нужны только в случае больших нагрузок, а если просто много разработчиков, то можно остаться в рамках монолита, но собирать его из отдельных модулей. Сейчас довольно легко найти такие приложения – это большие мобильные приложения – у них просто нет другого выбора. В теории, оно должно быть так же как микросервисы, но на практике единый релиз накладывает дополнительные расходы – уверен, что если бы была возможность уйти на микросервисы – они бы ушли. Аналогично и на сервере: все-таки микросервисы проще в исполнении, чем модульный монолит и в большинстве случаев из-за этого предпочтительнее.