Как стать автором
Обновить
54.57

Микросервисы vs Монолит: плюсы и минусы

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров3.2K

Привет! Меня зовут Игорь Шаталкин, я разработчик-эксперт в CUSTIS. В ИТ только и разговоров о том, что лучше — разделять или монолитствовать. Однако выбор архитектурного подхода зависит от множества факторов: масштабов проекта, бизнес-логики, организационной структуры команды и технических ограничений.

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

А в следующих статьях планирую поделиться практическими кейсами внедрения микросервисов и рекомендациями по переходу от монолита к микросервисам.

Суть микросервисов и монолита

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

Хронология развития архитектурных подходов
Хронология развития архитектурных подходов

Микросервисы — это набор независимых модулей, где каждая часть приложения выполняет свою специализированную задачу. Это позволяет вносить изменения, затрагивая лишь конкретный сервис, а не всю систему. Такой подход упрощает параллельную разработку, поскольку над каждым модулем может работать своя команда.

Статистика: Более 90% организаций внедрили или планируют внедрить микросервисный подход (отчёт O’Reilly, 2020).

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

Различия архитектурных подходов
Различия архитектурных подходов

Теперь подробнее поговорим о плюсах и минусах каждого из подходов.

Сравнение архитектур

Ресурсоёмкость

Микросервисы

Монолит

Необходимо поднять инфраструктуру для управления развёртыванием отдельных сервисов.

Требуется время на грамотное разделение бизнес-областей и выделение API.

Затраты на разработку на начальных этапах ниже.

Развёртывается как единое целое, что упрощает первичное тестирование гипотез.

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

Параллельная работа

Микросервисы

Монолит

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

Возможна значительная оптимизация календарных сроков за счёт независимой разработки.

При одновременной работе разработчиков выше риск конфликтов при изменении одного и того же участка кода.

Использование под разные проекты

Микросервисы

Монолит

Преимущество в том, что они позволяют использовать одни и те же API для разных клиентов с индивидуальной реализацией.

Заказчики могут дорабатывать и заменять отдельные части приложения по своим требованиям.

Из-за целостности приложения сложнее адаптировать систему под разный функционал без полной переработки.

Если двум компаниям необходимы принципиально разные бизнес-процессы в области Х, то вендор напишет два принципиально разных микросервиса, у которых будет одно API, но индивидуальная реализация. Кстати, сами заказчики также могут дорабатывать приложение, заменяя его части.

Взаимодействие частей системы

Микросервисы

Монолит

Взаимодействие между модулями реализуется через API, что позволяет видеть верхнеуровневую схему системы.

Требуется тщательная проработка API для поддержки различных бизнес-процессов.

Возможны сложности при одновременной поддержке нескольких версий API.

Взаимодействие реализуется через вызовы функций, что упрощает внесение изменений в коммуникацию между частями системы.

Разделение областей ответственности

Микросервисы

Монолит

Необходима чёткая декомпозиция системы на модули с отдельными бизнес-областями.

При корректном разделении изменения затрагивают только один модуль, что снижает вероятность возникновения ошибок.

Отсутствие разделения монолита на части приводит к тому, что изменения в одной функции могут неожиданно повлиять на другие части приложения.

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

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

Технологическая гибкость

Микросервисы

Монолит

Позволяют проще внедрять новые технологии, фреймворки и языки программирования. Переход может быть инкрементальным, по потребности.

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

Для команды разработчиков использование последних версий фреймворков — это дополнительная мотивация, а для компании один из плюсов технологической гибкости — возможность диверсифицировать риски. Java-разработчики стали слишком дорогими? Давайте усиливать C#-команду!

Скорость компиляции

Микросервисы

Монолит

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

При изменениях приходится ждать длительной компиляции всего приложения (5–10 минут и более).

Сложность отладки

Микросервисы

Монолит

Отладка функций, зависящих от других сервисов, требует наличия разработческого стенда, запуска зависимых сервисов локально или использования специальных скриптов (например, docker-compose).

Отладка упрощается за счёт целостности приложения и отсутствия необходимости координировать работу нескольких сервисов.

Подведём итоги

Микросервисы

Монолит

Более затратны на разработку из-за необходимости грамотной декомпозиции.

Облегчают внесение изменений в крупномасштабных системах.

Позволяют распараллелить работу команды и внедрять новые технологии.

Проще на старте разработки.

Подходит для тестирования гипотез и работы с небольшим объёмом функционала.

Может привести к сложностям при масштабировании и поддержке.

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

Эта статья стала первой частью в серии материалов о микросервисах и монолитах. В следующих статьях я расскажу о практических кейсах внедрения микросервисной архитектуры, а также поделюсь рекомендациями по переходу от монолита к микросервисам.

Теги:
Хабы:
0
Комментарии28

Публикации

Информация

Сайт
www.custis.ru
Дата регистрации
Дата основания
1996
Численность
201–500 человек
Местоположение
Россия