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

Проектировать изначально или переходить по необходимости?

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

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

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

Making lego creations from an inspiration book
Фотография Kelly Sikkema / Unsplash

Когда нужно переходить к микросервисам?

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

1. Необходимость разделения между разными серверами

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

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

2. Повышение уровня безопасности

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

3. Необходимость разделения на составные части по функциям

Если требуется приложение разделить на составные части или небольшие приложения, то лучше использовать микросервисы. Например, Google Карты, Google Classroom и Google Диск не имеет смысла держать «в одной корзине».

4. Отказоустойчивость

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

5. Упрощение поддержки

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

6. Упрощение разработки и тестирования

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

Фотография James Pond / Unsplash

Где и как размещать микросервисы?

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

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