Кристофер Тоцци, технологический аналитик Fixate.io, рассказывает на портале ITPro Today о микромонолитной (micro-monolith) архитектуре, которая позволяет сочетать гибкость микросервисов с простотой монолитного дизайна, предлагая сбалансированный подход к разработке приложений.

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

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

Что такое микромонолитная архитектура?

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

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

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

Не являются ли микролиты просто микросервисами под другим названием?

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

С этой точки зрения, микромонолит — это, возможно, просто специализированный тип микросервисной архитектуры.

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

Преимущества совместного использования микросервисов и микролитов

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

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

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

Проблемы микромонолитных архитектур

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

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

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

Стоит ли использовать микромонолиты?

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

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

Поиск баланса между микросервисами и монолитами

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