Микросерв исы + управляем ое событияминие +...

57
Микросервисы + управляемое событиями пректирование + Docker

Transcript of Микросерв исы + управляем ое событияминие +...

  • Микросервисы +

    управляемое

    событиями

    пректирование

    +

    Docker

  • 08.12.19

    2

    Содержание

    ● Монолитная архитектура в сравнении с микросервисной

    ● Управляемое событиями проектирование микросервисов

    ● Использование Docker для разработки и развертывания микросервисов

    Лекция Chris Richardson : Microservices + Events + Docker = A Perfect Trio

    https://microservices.io/https://www.docker.com/https://www.chrisrichardson.net/https://www.youtube.com/watch?v=sSm2dRarhPo

  • 08.12.19

    3

    Начало

    Представьте себе, что вы должны разработать большое сложное приложение, например, онлайн магазин.

  • 08.12.19

    4

    “”

    Критерий успеш

    ной

    разработки

    АРХИТЕКТУРА

    ПРОЦЕСС ОРГАНИЗАЦИЯ

  • 08.12.19

    5

    Организация

    АРХИТЕКТУРА

    ПРОЦЕССОРГАНИЗАЦИЯ

    небольшие,автономныекоманды

  • 08.12.19

    6

    Процесс

    АРХИТЕКТУРА

    ПРОЦЕССОРГАНИЗАЦИЯнебольшие,автономныекомандыГибкое проектирование

    Непрерывное внедрение…{* см. DevOps }

  • 08.12.19

    7

    Архитектура

    АРХИТЕКТУРА

    ПРОЦЕССОРГАНИЗАЦИЯнебольшие,автономныекомандыГибкое проектирование

    Непрерывное внедрение…{* см. DevOps }

    ?

  • 08.12.19

    8

    Архитектура на

    высшем

    уровне абстрак

    ции

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

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

  • 08.12.19

    9

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

  • 08.12.19

    10

    Монолитная архитектура● Модульная● Многослойная● Но

    упаковывается, как единая система для развертывания(ear, war, jar ...)

  • 08.12.19

    11

    Монолитная архитектураПопулярна, поскольку упрощает:

    ● разработку● тестирование● развертывание● масштабирование

    REST JSON

    https://www.restapitutorial.com/https://www.w3schools.com/whatis/whatis_json.asp

  • 08.12.19

    12

    В чем же пробл

    ема?

    Но, успешные приложенияпостоянноразрастаются...

  • 08.12.19

    13

    Проблемы : «монолитный ад»

    Agile

    http://agilemethodology.org/

  • 08.12.19

    14

    Где же решение?микросервисная архитектура

  • 08.12.19

    15

    Трехмерное

    масштабировани

    е

    ● Ось X — горизонтальное дублирование: множественные копии монолитного приложения и балансировка нагрузки

    ● Ось Y — функциональная декомпозиция: масштабируем разделяя различные элементы (см. далее)

    ● Ось Z — декомпозиция данных: масштабируем разделяя аналогичные элементы, отсылая запросы с одинаковыми атрибутами к специализированному серверуСсылка:«The Art of Scalability. Scalable Web Architecture, Processes and Organizations for the Modern Enterprise» Martin L. Abbott and Michael T. Fisher — Addison-Wesley 2010

  • 08.12.19

    16

    Функциональная декомпозиция

    ● Разбиение монолитного приложения на множество небольших приложений с определенной функциональностью = микросервисы

  • 08.12.19

    17

    Пример МС архитектуры● Теперь каждый модуль

    превращается в самостоятелбное приложение = микросервис

  • 08.12.19

    18

    Пример МС архитектуры● Теперь каждый модуль

    превращается в самостоятелбное приложение = микросервис

    ● каждый из них имеет собственную базу данных

    ● Это порождает новые проблемы управления микросервисами

  • 08.12.19

    19

  • 08.12.19

    20

    Достоинства и недостатки МС

    ● Гибкость● Автономность● Адаптируемость к новым технологиям● Сложность :1) разрабатывается распределенная система2) организация межпроцессных взаимодействий3) обработка частичных отказов4) реализация бизнес транзакций на распределенных базах данных (без

    2PC — Two-Phase Commit)5) проблемы тестирования6) развертывание и поддержка обеспечение функциональности распределенной

    системы7) реализация особенностей, требующих взаимодействия множества микросервисов● ! Ура Существует решение большинства проблем!

    https://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_txns003.htm#ADMIN12223

  • 08.12.19

    21

    В целом, достоинства применения микросервисной архитектурызначительно перевешивают

    недостатки для большихи сложных приложений

  • 08.12.19

    22

    Темы для обсуждения● Как развернуть сервисы?● Как организовать коммуникацию между сервисами?● Как клиенты, использующие сервисы,

    взаимодействуют с ними?● Как правильно разбить систему на сервисы?● Как работать с распределенными базами данных?● ...

  • 08.12.19

    23

    Управляемые событиями(event driven) микросервисы

    https://microservices.io/patterns/data/event-driven-architecture.html

  • 08.12.19

    24

    Паттерн управления данными

    Архитектура базы данных

    База данных сразделяемым доступом

    База данныхдлясервиса

  • 08.12.19

    25

    Разделяемая база данных

  • 08.12.19

    26

    Разделяемая база данных

    Сильная связьПросто ACID -

    атомность,согласованность,

    изоляция,продолжительность

  • 08.12.19

    27

    База данных для сервиса

  • 08.12.19

    28

    Проблема : как обеспечить согласованность данных без 2ЗС?

    ● 2PC (Two-Phase Commit) обычный протокол для распределенных транзакций становится трудно применимым для современных приложений.

  • 08.12.19

    29

  • 08.12.19

    30

    Где же решение?

  • 08.12.19

    31

    Пример

  • 08.12.19

    32

    Проблема двойн

    ой записи

  • 08.12.19

    33

    Надежное решен

    ие

  • 08.12.19

    34

    Техника источни

    к-события

  • 08.12.19

    35

    Можно восстано

    вить состояние

  • 08.12.19

    36

    Достоинства событийного подхода● Разрешается проблема согласованности данных в архитектуре

    микросервисы/NoSQL● Надежная публикация событий для использования при анализе

    прогнозирования и прочего, уведомления пользователей …● Исключает (в основном) проблему отображения

    Объект/Реляционная база данных ● Материализует изменения состояний1) через аудит встроенных log записей2) через временные запросы● Сохранение истории позволяет легче реализовывать новые

    требования в будущем

    https://www.mongodb.com/nosql-inline

  • 08.12.19

    37

    Недостатки событийного подхода● Требует переписывания кода приложения● Хитрый и незнакомый стиль программирования● События сохраняют историю ваших плохих решений● Приходится обрабатывать дублирующиеся события :

    идемпотентные обработчики или обнаружение дублирования

    ● Запрос к хранилищу событий может оказаться не простым делом

  • 08.12.19

    38

    О запросах

  • 08.12.19

    39

  • 08.12.19

    40

  • 08.12.19

    41

  • 08.12.19

    42

    Развертывание микросервисовиспользуя

    Docker

    https://www.katacoda.com/courses/docker

  • 08.12.19

    43

    Мы применяем микросервисный паттерн:

    но, как развернуть десятки или даже сотни сервисов?

  • 08.12.19

    44

    Проблемы с сервисами● сервисы написаны на разных языках, с использованием

    различных фреймвоков и их версий● каждый сервис состоит из множества экземпляров,

    пропускной способности и доступности● построение и развертывание сервиса должно быть

    быстрым● сервисы развертываются и масштабируются независимо● экземпляры сервиса должны быть изолированы● развертывание должно быть надежным и эффективным

    https://microservices.io/

  • 08.12.19

    45

    Варинты развертывания

  • 08.12.19

    46

    Контейнер (Docker)

  • 08.12.19

    47

    Паттерн: один сервис на контейнер

  • 08.12.19

    48

    Преимущества контейнеров● Изолированность● Управляемость● Инкапсуляция технологий реализации● Эффективная утилизация ресурсов● Быстрое развертывание

  • 08.12.19

    49

    Docker упрощает разработку

  • 08.12.19

    50

    Выполнение инфраструктурных сервисов в среде разработчика

    ● Обычно сервис должен иметь доступ к базе данных, брокеру сообщений …

    ● Обеспечить гарантию каждому разработчику, что он имеет доступ к актуальной версии = было трудно

  • 08.12.19

    51

    Выполнение инфраструктурных сервисов в среде разработчика

    ● Обычно сервис должен иметь доступ к базе данных, брокеру сообщений …

    ● Обеспечить гарантию каждому разработчику, что он имеет доступ к актуальной версии = было трудно

    Теперь достаточно создать конфигурационный файл для дирижера Docker:

  • 08.12.19

    52

    Тестирование интеграции ms

  • 08.12.19

    53

    Развертывание микросервиса (Jenkins pipeline)

    Разработка итестированиемикросервиса

    Построение итестированиеобраза Docker

    Развертываниеобраза Dockerв реестре

    Один проход на один сервис

    https://jenkins.io/doc/book/pipeline/

  • 08.12.19

    54

    «Тест на задымленность» (Smoke test) для Docker контейнеров

    Smoke test

    Dockerdaemon

    POST/containers/create

    POST/containers/{id}/start

    Docker демон должен прослушивать TCP порт

    Servicecontainer

    creates

    REST API :

    GET /health

    http://softwaretestingfundamentals.com/smoke-testing/https://medium.com/extend/what-is-rest-a-simple-explanation-for-beginners-part-1-introduction-b4a072f8740f

  • 08.12.19

    55

    Выполнение в Docker

    EC2 EBS

    https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.htmlhttps://aws.amazon.com/ebs/

  • 08.12.19

    56

    Заключение

    ● Используйте микросервисы, чтобы ускорить разработку ИС

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

    ● Используйте Docker для упрощения разработки и развертывания

  • 08.12.19

    57

    Книги для чтения● The Art of Scalability. Scalable Web Architecture,

    Processes and Organizations for the Modern Enterprise Martin L. Abbott and Michael T. Fisher — Addison-Wesley 2010

    ● Microservices Patterns. With examples in Java. Chris Richardson — MANNING, 2019

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54Slide 55Slide 56Slide 57