• Обсудить проект
  • Обсудить проект

Микросервисная и монолитная архитектуры: сравнение, плюсы и минусы

Изображение к статье

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

Что такое монолит (Монолитная архитектура)

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

Плюсы и минусы монолитной архитектуры

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

Плюсы монолитной архитектуры

Быстрый старт разработки.

Быстрый старт разработки и выпуск первых версий продукта (быстрее микросервисов) благодаря наличию решений «из коробки». Также все компоненты приложения объединены в единую систему, что делает разработку более простой и понятной. Нет необходимости связываться с различными API и протоколами, что упрощает жизнь разработчикам. Если у вас типовые задачи, то вам нужно будет только настроить решение Быстрый старт разработки и выпуск первых версий продукта (быстрее микросервисов) благодаря наличию решений «из коробки». Также все компоненты приложения объединены в единую систему, что делает разработку более простой и понятной. Нет необходимости связываться с различными API и протоколами, что упрощает жизнь разработчикам. Если у вас типовые задачи, то вам нужно будет только настроить «решение из коробки» под свой бизнес, при этом часто не требуется большой объем доработок.

Одна кодовая база.

А значит, легче разрабатывать и проще делать отладку всей системы.

Тестирование системы.

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

Экономичнее в создании и проще в поддержке.

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

Основные минусы монолита

Несмотря на то, что монолитная архитектура имеет свои преимущества, она также имеет свои недостатки:

Сложность при масштабировании.

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

Надежность.

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

Стек технологий на проекте.

Расширение стека может вызывать конфликты на уровне инфраструктуры проекта. А устаревшие компоненты – стать трудными для поддержки.

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

Что такое микросервисная архитектура

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

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

Плюсы и минусы микросервисной архитектуры

Основные плюсы микросервисов

Микросервисная архитектура также имеет свои преимущества:

Масштабируемость. У вас не будет «потолка», система может органично расти вместе с вашим бизнесом и справляться с любыми требуемыми нагрузками. Более того, каждый сервис можно масштабировать отдельно и только тогда, когда он приближается к пику своей нагрузки и вскоре может стать узким местом.

Независимое развертывание.

Обновлять приложения на основе микросервисов гораздо проще, поскольку каждый сервис можно развернуть независимо от других. Например, при обновлении одной из библиотек, работающих в одном процессе перезапускаться будет не все приложение (как при монолите), а только изменившийся сервис.

Гибкость.

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

Повышение отказоустойчивости.

Если один микросервис по каким-то причинам даст сбой, то другие продолжат свою работу, а значит, ваш сайт не «ляжет» целиком.

Возможность поэтапного внедрения.

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

Возможность использовать подходящие технологии для каждого сервиса.

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

Минусы микросервисов

Некоторые из недостатков микросервисной архитектуры включают в себя:

Скорость разработки первой версии продукта.

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

Возможное расширение стека технологий на проекте.

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

Сообщения между сервисами.

Есть риск задержки ответов между микросервисами. Но чаще всего микросервисы располагаются в одной локальной сети, поэтому риск сводится к минимуму

Усложнение тестирования.

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

Когда стоит переходить на микросервисы с монолита

Точного ответа на вопрос «когда» и «нужно ли?» – нет. Все зависит от целей и ресурсов бизнеса. Как правило, переход позволяет бизнесу масштабироваться и упрощает внедрение нового функционала.

Основные признаки, что вам нужно переходить на микросервисную архитектуру

Рост нагрузки

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

У одного из наших клиентов – маркетплейса электротоваров – изначально была монолитная CMS Bitrix, товарная база насчитывала 7-9 тыс. товаров, но сейчас они активно развиваются и в скором времени товарная база пополнится еще на 1 млн. товаров. Такое резкое расширение товаров существенно увеличит нагрузку на:

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

Рост системы, разработка нового функционала

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

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

Проблемы со скоростью доставки каждого нового релиза

Когда новая фича требует полной проверки и пересборки всего монолита (!), и все больше времени занимает и сама разработка, и тестирование функционала. Микросервисная архитектура может помочь вам чаще выпускать релизы и быстрее реагировать на запросы клиентов.

Можно ли оставить монолитную архитектуру?

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

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

Какой стек выбрать для микросервиса

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

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

  1. Каковы функциональные требования к микросервису?
  2. Какие нефункциональные требования необходимо учитывать (например, требования к производительности, масштабируемости, надежности, безопасности)?
  3. Какие технологии уже используются в инфраструктуре компании и конкретного проекта?
  4. Какой язык программирования и фреймворк лучше подходит для имеющейся команды разработчиков? Готов ли клиент расширить стек проекта?
  5. Какой тип БД вы планируете использовать для микросервиса?
  6. Насколько хорошо рассматриваемый стек поддерживает горизонтальное масштабирование и управление ресурсами?
  7. Какие инструменты использует команда для сборки, тестирования и развертывания ПО?
  8. Какой стек технологий используется в вашей отрасли или среди конкурентов?

Вместо заключения

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

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

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

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

Поделиться: