Главная · Статьи · Монолит и микросервисы

Монолит и микросервисы: в чём разница простыми словами

Вячеслав Степанов Вячеслав Степанов — проджект-менеджер, ментор ·

Проджект-менеджер оценивает кнопку «Напомнить» в один день работы, а разработчики называют пять. Спор возникает из-за того, что проджект видит кнопку в интерфейсе, а команда видит всё, что за ней стоит. Чтобы говорить с разработчиками на одном языке, не нужно уметь программировать. Достаточно понимать, как устроено приложение и чем монолит отличается от микросервисов.

IT-архитектура с нуля: от монолита к микросервисам | Урок 19

Если видео не открывается, смотри на YouTube (может понадобиться VPN).

Содержание
  1. Как устроено веб-приложение
  2. Что такое монолит
  3. Что такое микросервисы
  4. Сравнение в одной таблице
  5. Что выбирают и почему
  6. Зачем архитектура проджект-менеджеру
  7. Вопрос на собеседовании
  8. Типичные ошибки
  9. Частые вопросы

Как устроено веб-приложение

Любое приложение в интернете работает по схеме «клиент и сервер». Клиент открыт у пользователя: браузер, мобильное приложение, Telegram-бот. Сервер стоит в дата-центре и выполняет работу. Они общаются через запросы и ответы по протоколу HTTP, подробнее об этом в статье про API.

Внутри приложение обычно делят на три слоя:

Рядом часто работают два помощника. Кэш хранит в быстрой памяти то, что запрашивают часто: из кэша данные приходят за миллисекунду, а из базы за десятки миллисекунд. Очередь задач уводит долгую работу в фон: пользователь нажал «отправить всем письмо», сразу получил ответ «приняли», а письма уходят чуть позже.

Собрать эти слои в работающий продукт можно двумя основными способами.

Что такое монолит

Схема: монолит — один блок, внутри которого интерфейс, логика и данные; микросервисы — пять отдельных блоков: пользователи, оплаты, уроки, уведомления, бот
Слева всё приложение в одной программе, справа оно разделено на независимые сервисы.

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

Плюсы монолита понятны: его быстро разработать и дёшево содержать. Небольшой команде с одним продуктом этого достаточно. Сложности приходят с ростом. Код разрастается, любое изменение задевает соседние части, разработчики мешают друг другу, а выпуск новой версии превращается в нервное событие, потому что ошибка в одном месте может положить весь сервис.

Что такое микросервисы

Микросервисы — подход, при котором приложение делят на несколько небольших сервисов. Каждый отвечает за свою область продукта, у каждого свой код и свой выпуск, а между собой они общаются запросами или через очереди сообщений. Термин стал широко известен после статьи Джеймса Льюиса и Мартина Фаулера «Microservices» в 2014 году.

Схема: при поломке оплаты в монолите не работает весь сервис, а в микросервисах ломается только сервис оплат, остальные продолжают работать
Изоляция сбоев — одна из главных причин переходить на микросервисы.

Кроме изоляции сбоев микросервисы дают свободу: сервис уведомлений можно обновлять хоть каждый час, не трогая оплаты, а разные сервисы можно писать на разных технологиях. Платить за это приходится сложностью. Чем больше отдельных частей, тем больше мест, где что-то сломается. Нужно следить за множеством сервисов, собирать их логи в одно место и прослеживать запрос, который прошёл через пять систем. Для этого нужны отдельные инструменты, например Kubernetes, и опытные DevOps-инженеры.

Сравнение в одной таблице

МонолитМикросервисы
УстройствоОдна программаНесколько независимых программ
Выпуск новой версииВсё приложение сразуКаждый сервис отдельно
ТехнологииОдин набор на всёДля каждого сервиса свой
СбойМожет уронить весь продуктОбычно задевает один сервис
СложностьНизкая на старте, растёт со временемВысокая с самого начала
ИнфраструктураОбычный серверОркестрация контейнеров, сбор логов, мониторинг
Кому подходитНовый продукт, небольшая командаЗрелый продукт, несколько команд

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

Записаться на бесплатную консультацию

Что выбирают и почему

Мартин Фаулер в 2015 году сформулировал совет «сначала монолит»: успешные системы на микросервисах чаще всего вырастали из монолита, который стал слишком большим. Начинать сразу с микросервисов рискованно, потому что на старте границы между частями продукта ещё непонятны.

Обратные переходы тоже бывают. В 2023 году команда Prime Video рассказала, как перевела один из своих сервисов мониторинга с распределённой архитектуры на монолит и сократила расходы на инфраструктуру на 90%. Netflix, наоборот, после крупного сбоя базы данных в 2008 году начал переезд в облако и на микросервисы и завершил его к 2016 году.

Между двумя крайностями есть модульный монолит: одно приложение, но с чёткими внутренними границами между модулями. Его часто выбирают небольшие продукты, которые хотят оставить себе дорогу к микросервисам.

Есть ещё закон Конвея. Программист Мелвин Конвей в 1968 году заметил, что системы повторяют структуру общения в организации, которая их создаёт. Если в компании пять независимых команд, их продукт естественно делится на пять частей. Поэтому, выбирая архитектуру, компания заодно решает, как будут устроены команды.

Зачем архитектура проджект-менеджеру

Схема: кнопка «Напомнить» требует изменений во фронтенде, бэкенде, базе данных, очереди задач, боте и почте — пять мест
Маленькая кнопка в интерфейсе проходит через всю систему.

На примере видно, откуда берутся «пять дней вместо одного»: нужен новый компонент во фронтенде, новый метод на бэкенде, новая таблица в базе, фоновая задача на отправку и интеграции с ботом и почтой. В каждом месте нужны проверки, и в каждом что-то может сломаться. Проджект, который видит эту цепочку, оценивает фичу по количеству задетых частей системы.

Вопрос на собеседовании

Проджектов часто спрашивают: «Микросервисы всегда лучше монолита?». Сильный ответ показывает, что ты понимаешь компромисс. Примерно так: «Нет, это вопрос задачи. Монолит проще и дешевле, особенно для нового продукта и небольшой команды. Микросервисы оправданы, когда несколько команд должны работать независимо, у продукта есть отдельные области или разным частям нужны разные технологии. Без таких причин они добавляют сложность и расходы».

Типичные ошибки

Частые вопросы

Что такое монолит простыми словами?

Приложение, в котором интерфейс, логика и работа с данными собраны в одну программу. Её разрабатывают и выпускают целиком.

Что такое микросервисы простыми словами?

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

Что лучше: монолит или микросервисы?

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

Что такое модульный монолит?

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

Нужно ли проджект-менеджеру разбираться в архитектуре?

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

Читайте также
  1. Что такое API простыми словами
  2. Что такое CI/CD простыми словами
  3. Роли в IT-команде: кто есть кто и за что отвечает

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

Играть в «Путь проджекта!»