Микросервисная архитектура.
Димитров Вячеслав Михайлович, старший преподаватель кафедры ИМО, 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 для второго, сломался третий, которого забыли предупредить.
- Развертывание должно быть на высоком уровне.
Проблемы микросервисов
- Не решает проблем плохого кода
- Не решает проблем использования антипаттернов.
- Возникает проблема "это не моя проблема".