Микросервисная архитектура.

Димитров Вячеслав Михайлович, старший преподаватель кафедры ИМО, dimitrov@cs.petrsu.ru

Устаревание структур объектов в информационных средах

  • 62% информационных систем имеют данные, которые нужно детализировать, расширить или увеличить степень их уникальности.
  • Но в рамках текущей ИС это невозможно.

Работает, не трогай!

  • Система, унаследованная с прошлых времен.
  • Использует ЯП, который в настоящее время практически не используется
  • Использует аппаратное обеспечение, которое давно устарело.
  • Заменить: слишком дорого и рискованно.

Характеристики ПО

  • Высокая доступность.
  • Качество.
  • Адекватная стоимость.
  • Все эти характеристики можно заложить в архитектуре.

Монолитные приложения и их проблемы

  • С ростом функциональности растет сложность системы
  • Поддерживать все труднее.
  • Разбираться в ней сложно: особенно если уже не первое поколение ее поддерживает.

Монолитные приложения и их проблемы

  • Много ошибок.
  • Мало тестов.
  • Дорого вносить изменения.
  • Застревание на технологиях.

Теорема CAP

Развитие системы требует решения следующих задач:

  • Доступность (A): любой запрос завершается откликом.
  • Согласованность (C): в любой момент времени данные не противоречат друг другу.
  • Устойчивость к разделению (P): расщепление на секции системы не приводит к некорректным откликам.

Теорема CAP

  • В любой системе можно достигнуть решения только двух задач:
  • CA (реляцинные БД)
  • CP (некоторые NoSQL базы: MongoDB)
  • AP (DNS)

Промежуточные решения: гибкие системы

  • Архитектура управляемая событиями
  • Микроядерная архитектура

Архитектура управляемая событиями (EDA)

Архитектура управляемая событиями (EDA)

  • Каждый обработчик отвечает за одну функцию бизнес логики.
  • Посредник: фрейморки интеграции Apache Camel, Spring Integration, Mule ESB и др.
  • Относительно сложный шаблон

Микроядерная архитектура

Микроядерная архитектура

  • Делится на ядро и плагины.
  • Ядро содержим минимум бизнес логики.
  • Ядро: загрузка, выгрузка и запуск плагинов.

Микроядерная архитектура

  • Плагины разрабатываются и выполняются отдельно
  • Плагины тестируются отдельно.
  • Примеры: браузер, Eclipse IDE.

Микросервисы. Примеры компаний.

  • Amazon
  • Netflix (java)
  • Uber

Истоки идеи

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

Микросервисная архитектура - это шаблон, в котором сервисы

  • маленькие
  • сфокусированные
  • слабосвязанные
  • высокосогласованные

Характеристики микросервисов

  • Разделение на компоненты (сервисы)
  • Группировка по бизнес-задачам
  • Сервисы имеют бизнес смысл
  • Умные сервисы, простые коммуникации

Характеристики микросервисов

  • Децентрализованное управление
  • Децентрализованное управление данными
  • Автоматизации развертывания и мониторинга
  • Проектирование для ошибки

Разделение на компоненты (сервисы)

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

Группировака по бизнес задачам

  • Если монолит, то деление на команды: команда UI, команда BD, команда
  • Если микросервисы, то команда отчетов, команда стриминга и др.

Умные сервисы.

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

Децентрализованное управление данными

  • Каждый сервис - своя база данных.
  • Одна база данных для двух сервисов, только если второй - копия первого.
  • Базы не взаимодействуют.
  • Единственный вариант взаимодействия - сетевое.

Автоматизации развертывания и мониторинга

  • DevOps
  • Автоматического развертывание.
  • Непрерывная интеграция и постановка
  • Непрерывный мониторинг

Проектирование для ошибок

  • Исходить из того, что другой сервис не работает.
  • Netflix: chaos monkey, ломает сервисы, хаотично рвет соединения.
  • Нужно, чтобы оценить надежность системы.

Взаимодействие с клиентами

Взаимодействие с клиентами

Типы взаимодействия между сервисами

  • Service Discover - сервисы знают о друг друге и общаются между собой напрямую (через API).
  • Event driven - сервисы общаются через брокера (ничего не знают о подписчиках и издателях).

Проблемы микросервисов

  • Распределенность - общение через каналы связи может вызывать задержки и сбои.
  • Согласованность - один сервис изменил свой API для второго, сломался третий, которого забыли предупредить.
  • Развертывание должно быть на высоком уровне.

Проблемы микросервисов

  • Не решает проблем плохого кода
  • Не решает проблем использования антипаттернов.
  • Возникает проблема "это не моя проблема".