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

Термин «Микросервис» впервые прозвучал в Венеции в 2011. Этим словом участники архитектурного воркшопа описывали наблюдаемые ими изменения в проектировании систем. В 2012 та же группа ввела новый термин.

Так что такое микросервисы и какими свойствами они обладают?

Первые вехи в развитии микросервисов согласно википедии:

Заключительный слайд презентации Фреда Джорджа весьма точно предсказал дальнейшей развитие микросервисов

Были упоминания и раньше, но в 2012-м оформился конкретный термин со своим четким смыслом.

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

Общепринятого определения нет, но есть схожие и дополняющие друг друга. Наиболее емким выглядит определение Мартина Фаулера, данное им в одноименной статье, перевод которой есть на Хабре:

Если коротко, то архитектурный стиль микросервисов — это подход, при котором единое приложение строится как набор небольших сервисов, каждый из которых работает в собственном процессе и коммуницирует с остальными используя легковесные механизмы, как правило HTTP. Эти сервисы построены вокруг бизнес-потребностей и развертываются независимо с использованием полностью автоматизированной среды. Существует абсолютный минимум централизованного управления этими сервисами. Сами по себе эти сервисы могут быть написаны на разных языках и использовать разные технологии хранения данных.

Из этого определения можно вынести ряд свойств микросервисов.

Свойства микросервисов

Важнейшим свойством является автономность. Автономность распространяется на все, что касается разработки микросервисов:

  • Автономность на уровне модели предметной области (микросервисы строятся вокруг бизнес-концепций)
  • Автономное развертывание
  • Автономное тестирование
  • Независимое эволюционное развитие (сокрытие внутренней реализации)
  • Изоляция сбоев

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

Возможно и обратное — сервисы поделены слишком мелко и транзакционная граница распространилась на несколько микросервисов.

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

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

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

Так же микросервисам присуща всесторонняя децентрализация. Не даром Ребека Парсонс, Нил Форд и Патрик Куа, авторы книги «Эволюционная архитектура», именно микросервисный стиль назвали наиболее подходящим для эволюционного развития архитектурного решения. При наличии централизованного управления эволюционное развитие значительно усложняется за счет внешней координации развития.

Модульный монолит

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

Image result for who told you can make microservice simon

И когда он говорит о хорошо структурированном монолите — это не пустые слова. Хорошо структурированный монолит обладает такими свойствами, как:

  • Высокое сцепление
  • Слабая связанность
  • Моделирование вокруг бизнес-концепций
  • Инкапсуляция данных
  • Заменяемость (не так давно, пока тихо и робко, в сообществе снова заговорили об OSGi)

Что в дополнение к этому предлагают микросервисы? Пожалуй:

  • Автономная поставка
  • Автономное обновление
  • Индивидуальная замена
  • Независимое масштабирование
  • Свобода выбора технологий под каждый отдельный микросервис

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

Ссылки

Архитектурное сообщество в facebook

Микросервисное сообщество в Telegram

Share