Микросервисы или монолит - Какую архитектуру выбрать?

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

Что такое сервис?

Сначала выясним, что такое сервис. IT-продукт – это по сути программа, написанная на каком-то языке программирования. Например, сайт - это программа на JavaScript. Классическая "Hello World" - это тоже программа, пусть и наиболее простая.

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

Такие программы в IT называют сервисами (программы, как услуги, что-то принимают на вход, что-то делают и что-то отдают нам). В случае, когда продукт написан в одном файле, это монолит (от слова mono - "один"), и архитектура - монолитная. Когда код разнесен по нескольким файлам, это микросервисная архитектура, а сами файлы - микросервисы (то есть, "маленькие" сервисы, являющиеся частью единого целого).

Рассмотрим же особенности и характеристики этих двух подходов и выясним, что же лучше.

Особенности монолита

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


Область применения:

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


Характеристики монолита:

  • Легкое развертывание, так как используется только один исполняемый файл или каталог
  • Разработка на монолите легче, так как приложение создается с использованием одной базы кода
  • Производительность. Один интерфейс API часто может выполнять ту функцию, которую при работе с микросервисами выполняют несколько API
  • Легче проводить тестирование, так как монолитное приложение представляет собой единый централизованный модуль
  • Удобная отладка, весь код находится в одном месте

Особенности микросервисов

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

Области применения:
  • При работе небольшой команды разработки
  • При тестировании (вы можете протестировать какую-то отдельную область. Не нужно запускать все приложение целиком, как при монолите)
  • При разных технологических стеках (например, одна команда разработки использует Python, а другая C++)

Характеристики микросервисов:
  • Удобность для бизнеса (бизнес эффективность повышается за счет роста эффективности малых групп)
  • Удобная маршрутизация. Все просто - микросервисы получают запросы и после дают на них ответ
  • Несколько компонентов - сервисы работают независимо друг от друга
  • Данные управляются децентрализовано
  • Устойчивость к сбоям. Сложно себе представить ситуацию, в которой все компоненты выходят из строя одновременно

Что же лучше?

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

Достоинства:
Минусы:
Суммируя, можно сказать, что для разработки сложных высоконагруженных приложений для бизнеса лучше подойдет микросервисный подход. Пример системы на микросервисе - популярные маркетплейсы, например, Wildberries или Ozon. Каталог товаров, рейтинг, чат с поддержкой, отзывы и фото — это отдельные микросервисы.

Классический же интернет-магазин, например, магазин комнатных растений одного поставщика является монолитом.

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

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

Интенсив по архитектуре
Узнать больше про архитектурные паттерны разработки вы сможете на нашем интенсиве