Монолит vs Микросервисы
Приветствую вас, друзья!
Меня зовут Альбина Гараева, я senior системный аналитик с 8-ми летним опытом работы, за это время я приняла участие в 24 проектах. Также являюсь автором и спикером курса “Системный аналитик”, поэтому обучение студентов — одно из моих основных направлений работы.
Эта статья посвящена насущному вопросу о монолитах и микросервисах. Что лучше? Что выбрать?
Сравнивать, что лучше — монолит или микросервисы — будет не совсем корректно. В каких-то проектах лучше использовать монолит, а в других микросервисы.
Рассмотрим плюсы и минусы каждой из архитектур по восьми параметрам:
1. Язык программирования и технологии
Монолит: Один язык программирования, что влечет за собой отсутствие гибкости в языке и технологиях.
Микросервисы: Много языков программирования.
Точнее правильнее сказать, что можно создавать микросервисы как на одном языке, так и каждый микросервис на разных языках.
Это и плюс, и минус одновременно. Плюс, потому что есть гибкость, а минус в том, что нужны сотрудники, знающие разные языки и технологии, т. е. если для монолита достаточно только разработчика, к примеру, на C#, то для микросервисов, которые написаны на C# и Java, нужно будет искать уже нескольких специалистов.
2. База данных (БД)
Монолит: Одна БД
Микросервисы: Много БД
Во-первых, каждый микросервис имеет свою БД.
Во-вторых, эти БД могут быть разные. Например, один микросервис имеет БД Oracle, другой PostgreSQL, а третий вообще нереляционную БД, например, MongoDB.
3. Проектирование
Монолит: Простое проектирование
Взаимодействие между компонентами происходит в рамках одного сервиса.
Микросервисы: Сложное проектирование
Необходимо правильно распределить зоны ответственности каждого сервиса (каждый сервис должен выполнять свой функционал, условно, в сервисе авторизации не должно быть функционала оплаты) .
4. Производительность/скорость
Монолит: Низкая производительность в высоконагруженных системах.
Микросервисы: Высокая производительность, высокая скорость разработки.
5. Отказоустойчивость/надежность
Монолит: Низкая отказоустойчивость/надежность.
Если разработчик выкатил фичу или изменения в существующую и что-то сделал не так, то весь сервис упадет и будет выдавать 500 ошибки.
Микросервисы: Высокая отказоустойчивость/надежность.
Если разработчик выкатил фичу или изменения в существующую и что-то сделал не так, 500 ошибку будет выдавать лишь один сервис из ста, остальные будут успешно работать.
6. Масштабируемость
Монолит: Сложная масштабируемость
Также любые изменения в инфраструктуре и разработке будут влиять на продукт целиком, поэтому будут увеличиваться расходы как финансовые, так и скорее всего временные, тем более если монолит уже разросся.
Микросервисы: Легкая масштабируемость
При масштабировании в микросервисах перед командой разработки возникает вопрос: добавить функционал в текущий сервис или создать новый сервис?
7. Мониторинг/контроль
Монолит: Легкий мониторинг
Контролировать, как работает 1 сервис легче, чем несколько, а монолит — это 1 большой сервис.
Микросервисы: Сложный мониторинг
Микросервисов может быть десятки, а то и сотни, поэтому следить за работой каждого сервиса сложнее. И для этого желательно уделять много внимания системам управления и мониторинга.
8. Тестирование
Монолит: Упрощенное тестирование
Тестирование проводится быстрее, т. к. не нужно ничего тестировать помимо текущих изменений, добавлений.
Микросервисы: Усложненное тестирование
Тестировщикам и QA-специалистам помимо тестирования сервиса, который был создан или в который были добавлены изменения, необходимо будет протестировать и смежные сервисы, с которыми взаимодействует новый/изменяемый сервис.
Итого, вывод следующий.
Если компания начинает стартап, дешевле начать с монолита. Также лучше использовать монолит, если компания понимает, что проект будет небольшим по функционалу и вряд ли будет серьезно масштабироваться.
Если проект планируется с множеством фичей, интеграций и т.п. и на старте уже есть понимание масштабируемости, то лучше использовать микросервисную архитектуру.
Подписывайтесь на мой телеграм-канал «Системный аналитик с нуля», где я регулярно делюсь полезными материалами как для начинающих специалистов, так и для аналитиков с грейдом middle+.