Upload
vitebsk-dsc
View
536
Download
1
Embed Size (px)
Citation preview
ВИТАЛИЙ КВЯТКОВСКИЙ
Микросервисы
на практике
2015
2
Agenda
• Что такое микросервисы?
• Ориентация на бизнес
• Инфраструктура
• Дизайн микросервисов
Agenda
3
Тип Архитектуры
Монолитное
приложение
Микросервисное
приложение
4
Монолит
APP
Налоги Emailing
ОтчетыКредитки
СкидкиСправочник
5
СуперМонолит
company.com
Приложение
1
APP
Налоги Emailing
ОтчетыКредитки
СкидкиСправочник
Издателей
Приложение
2
6
Микросервисы
Налоги
Emailing
Отчеты
APP
Кредитки
Скидки
Справочник
Издателей
Postgre
SQL
Mongo
REST
7
За и Против
Плюсы
+ Протокол
+ Простота модуля
+ Скорость разработки
+ Независимость команд
+ Независимость технологий
8
За и Против
Минусы
- Подверженность ошибкам
- Сложность системы
- Сложность разработки
- Нужно автоматизировать
9
Business Capabilities
Организация вокруг потребностей бизнеса
• Разные сервисы под разные нужды
• отчеты
• кредитки
• Отдельные команды
• Поддержка на продакшене
• Создание вспомогательных утилит
10
Infrastructure
• Абстрагироваться от инфраструктуры
• Выровнять инфраструктуру окружений
• Отдельные окружения (DEV/QA/PS/PROD)
• Автоматизация
11
Infrastructure Automation
Автоматизация инфраструктуры
• Continuous Integration• Jenkins
• Выделенное окружение разработчика
• Развертывание одной кнопкой
• Эволюция Базы Данных
• Создание структур БД
• Миграция данных
• Автоматическое выполнение
• Chef
12
Дизайн микросервисов
• Децентрализованное управление
• Децентрализованные данные
• Взаимодействие сервисов
• Проектирование под отказ
• Типы взаимодействия
13
Decentralized Governance
Децентрализованное управление
•Разные технологии для разных целей
• Фреймворки
• Базы Данных
•Архитектурные решения
•Но единая платформа
• Система сборки Gradle
• Общие библиотеки (Guava)
• Стандарты кода
14
Дизайн микросервисов
• Децентрализованное управление
• Децентрализованные данные
• Взаимодействие сервисов
• Проектирование под отказ
• Типы взаимодействия
15
Decentralized Data
PostgreSQL MongoDB
ROA СкидкиREST
Децентрализованные данные
• Разные хранилища данных
• polyglot persistence
• MongoDB/PostgreSQL/Lucene
• Нет доступа к хранилищам других сервисов
16
Дизайн микросервисов
• Децентрализованное управление
• Децентрализованные данные
• Взаимодействие сервисов
• Проектирование под отказ
• Типы взаимодействия
17
Взаимодействие сервисов
•Протокол взаимодействия
• REST
• Messaging
• JMS
•Версионирование (X.Y.Z)
•Без состояния / Stateless
• Позволяет масштабироваться
18
Дизайн микросервисов
• Децентрализованное управление
• Децентрализованные данные
• Взаимодействие сервисов
• Проектирование под отказ
• Типы взаимодействия
19
Проектирование под отказ
•Найти отказ
• Мониторинг
• Исчерпывающее логгирование
•Быстрое исправление
• Автоматическое• Автоматическая повторная попытка (Redelivery)
• High Availability (Load balancing)
• Ручное• Проверка email
Design for failure
20
Дизайн микросервисов
• Децентрализованное управление
• Децентрализованные данные
• Взаимодействие сервисов
• Проектирование под отказ
• Типы взаимодействия
21
Типы взаимодействия
Взаимодействие между сервисами
• Синхронное
• обычно R в CRUD
• Асинхронное
•может быть CUD в CRUD
Сканировани
е документа
асинхЗаказ
документа
Чтение из БД
синхПросмотр
заказа
22
Синхронное Взаимодействие
• Максимально быстро• Все что требует внимания пользователя
Иначе асинхронное
• Использовать кэш• Внутрипроцессный кэш Guava
Для небольших данных
Сохранение заказа
Снятие денегСоздание лицензии
синхсинх асинх
23
Асинхронное Взаимодействие
Клиент Микросервис
БД Микросервиса
Запрос
Сохранение
Обработка
БД Клиента
Возврат ID запроса
Сохранение + ID
Обновление статуса
Запрос статуса
Сообщение о завершении
24
Асинхронное Взаимодействие
Клиент Микросервис
БД Микросервиса
Запрос
Сохранение
Обработка
БД Клиента
Возврат ID запроса
Сохранение + ID
Обновление статуса
Запрос статуса
Сообщение о завершении
25
Асинхронное Взаимодействие
Клиент Микросервис
БД Микросервиса
Запрос
Сохранение
Обработка
БД Клиента
Возврат ID запроса
Сохранение + ID
Обновление статуса
Запрос статуса
Сообщение о завершении
26
Асинхронное Взаимодействие
Клиент Микросервис
БД Микросервиса
Запрос
Сохранение
Обработка
БД Клиента
Возврат ID запроса
Сохранение + ID
Обновление статуса
Запрос статуса
Сообщение о завершении
27
Асинхронное Взаимодействие
Клиент Микросервис
БД Микросервиса
Запрос
Сохранение
Обработка
БД Клиента
Возврат ID запроса
Сохранение + ID
Обновление статуса
Запрос статуса
Сообщение о завершении
28
Асинхронное Взаимодействие
Клиент Микросервис
БД Микросервиса
Запрос
Сохранение
Обработка
БД Клиента
Возврат ID запроса
Сохранение + ID
Обновление статуса
Запрос статуса
Сообщение о завершении
29
Асинхронное Взаимодействие
Клиент Микросервис
БД Микросервиса
Запрос
Сохранение
Обработка
БД Клиента
Возврат ID запроса
Сохранение + ID
Обновление статуса
Запрос статуса
Сообщение о завершении
30
Асинхронное Взаимодействие
Клиент Микросервис
БД Микросервиса
Запрос
Сохранение
Обработка
БД Клиента
Возврат ID запроса
Сохранение + ID
Обновление статуса
Запрос статуса
Сообщение о завершении
31
Отказы (Failures)
• Быть готовым к отказу
• Быть готовым к восстановлению
• Найти точки отказа
• Определить как восстанавливать
• Синхронное- на стороне клиента
• ответственный: пользователь
• Асинхронное- на стороне сервера
• ответственный: разработчик
32
Redelivery & DLQ
Очередь1 Consumer
Повторная
доставка
(X попыток)
чтение
БрокерActiveMQ
DLQ
перемещение
Служба
поддержки
просмотр
исправление
запрос
33
Redelivery & DLQ
Очередь1 Consumer
Повторная
доставка
(X попыток)
чтение
БрокерActiveMQ
DLQ
перемещение
Служба
поддержки
просмотр
исправление
запрос
34
Redelivery & DLQ
Очередь1 Consumer
Повторная
доставка
(X попыток)
чтение
БрокерActiveMQ
DLQ
перемещение
Служба
поддержки
просмотр
исправление
запрос
35
Redelivery & DLQ
Очередь1 Consumer
Повторная
доставка
(X попыток)
чтение
БрокерActiveMQ
DLQ
перемещение
Служба
поддержки
просмотр
исправление
запрос
36
Redelivery & DLQ
Очередь1 Consumer
Повторная
доставка
(X попыток)
чтение
БрокерActiveMQ
DLQ
перемещение
Служба
поддержки
просмотр
исправление
запрос
37
Redelivery & DLQ
Очередь1 Consumer
Повторная
доставка
(X попыток)
чтение
БрокерActiveMQ
DLQ
перемещение
Служба
поддержки
просмотр
исправление
запрос
38
Когда использовать монолиты?
• Первая версия
• Система достаточно понятна
• Система достаточно размыта
39
Когда использовать микросервисы?
• Система слишком большая
• Команда слишком большая
• Система слишком сложная
• Система слишком новая
40
•Микросервисы
• Не серебряная пуля
• Упрощают понимание
• Упрощают масштабирование
• Нужный инструмент для каждой цели
ВЫВОДЫ
41
42
Спасибо за внимание!