Книга описывает методы создания событийно-управляемых микросервисов для обработки больших объемов данных и предлагает шаблоны приложений, использующих подобную архитектуру. Рассказано о роли микросервисов в поддержке событийно-управляемых проектов, представлены примеры практических реализаций подобных архитектур как силами сотрудников организации, так и с привлечением сторонних специалистов. Подробно описаны инструменты, необходимые для разработки экосистемы микросервисов. Приведены способы решения возникающих проблем, даны рекомендации по налаживанию взаимодействия команд и отдельных сотрудников в процессе создания событийно-управляемых микросервисных систем.
Author(s): Адам Беллемар
Edition: 1
Publisher: БХВ-Петербург
Year: 2022
Language: Russian
Commentary: Vector PDF
Pages: 320
City: СПб.
Tags: Asynchronous Programming; Virtualization; Stream Processing; Microservices; Scalability; Deployment; Unit Testing; Containerization; Software Architecture; Integration Testing; Testing; Event-Driven Architecture; Domain-Driven Design; Data Integration; Domain Modeling; Bounded Contexts; Communication Structures; Event Brokers; Data Contracts; Event-Driven Processing; Event Scheduling; Stateful Streaming; Workflows; Function-as-a-Service; Event-Driven Microservices
Оглавление
Предисловие
Условные обозначения, принятые в книге
Благодарности
Предисловие научного редактора к русскому изданию
Глава 1. Почему именно событийно-управляемые микросервисы?
Что такое событийно-управляемые микросервисы?
Введение в предметно-ориентированное проектирование и ограниченные контексты
Использование моделей предметной области и ограниченных контекстов
Привязка ограниченных контекстов к бизнес-требованиям
Структуры обмена информацией
Структуры обмена бизнес-информацией
Структуры обмена технической информацией
Структуры обмена данными
Закон Конвея и структуры обмена информацией
Структуры обмена информацией в традиционных вычислениях
Вариант 1: создать новый сервис
Вариант 2: добавить новое бизнес-требование в существующий сервис
Плюсы и минусы каждого варианта
Командный сценарий: продолжение
Конфликтующие обстоятельства
Событийно-управляемые коммуникационые структуры
События являются основой обмена информацией
Потоки событий обеспечивают единственный источник истины
Потребители занимаются своим моделированием и выполняют свои запросы
Обмен данными улучшается по всей организации
Доступные данные поддерживают изменения в обмене информацией
Асинхронные событийно-управляемые микросервисы
Пример команды, использующей событийно-управляемые микросервисы
Синхронные микросервисы
Недостатки синхронных микросервисов
Связь «точка-точка»
Зависимое масштабирование
Обработка отказов сервисов
Управление версиями API и зависимостями
Доступ к данным с привязкой к реализации
Распределенные монолиты
Тестирование
Преимущества синхронных микросервисов
Резюме
Глава 2. Основы событийно-управляемых микросервисов
Построение топологий
Топология микросервисов
Бизнес-топология
Содержимое события
Структура события
Событие без ключа
Сущностное событие
Событие с ключом
Материализация состояния из сущностных событий
Определения и схемы данных событий
Принцип единственного источника событий
Взаимодействие микросервисов с помощью брокера событий
Хранение и обработка событий
Дополнительные факторы, которые следует учитывать
Брокеры событий или брокеры сообщений?
Потребление из неизменяемого журнала
Потребление в качестве потока событий
Потребление в форме очереди
Обеспечение единственного источника истины
Масштабное управление микросервисами
Размещение микросервисов в контейнерах
Размещение микросервисов на виртуальных машинах
Управление контейнерами и виртуальными машинами
Уплата налога на микросервисы
Резюме
Глава 3. Обмен информацией и контракты на передачу данных
Событийно-управляемые контракты на передачу данных
Использование явных схем в качестве контрактов
Комментарии к определению схемы
Полнофункциональное развитие схемы
Поддержка генератора кода
Разрушительные изменения схемы
Учет критических изменений схемы для событий
Выбор формата события
Дизайн событий
Говорите правду, всю правду и ничего, кроме правды
Используйте одно-единственное определение события в расчете на поток
Используйте самые точные типы данных
Держите события узконаправленными
Пример: перегрузка определений событий
Минимизируйте размер событий
Привлекайте потенциальных потребителей к дизайну события
Не используйте события в качестве семафоров и сигналов
Резюме
Глава 4. Интеграция событийно-управляемых архитектур с существующими системами
Что такое освобождение данных?
Компромиссы для освобождения данных
Конвертация освобожденных данных в события
Шаблоны освобождения данных
Фреймворки освобождения данных
Освобождение данных по запросу
Массовая загрузка
Инкрементная загрузка временных меток
Загрузка с автоинкрементируемым ID
Выполнение пользовательских запросов
Инкрементное обновление
Выгоды от обновления по запросу
Недостатки обновления по запросу
Освобождение данных с помощью журналов захвата изменений в данных
Выгоды от использования журналов хранилища данных
Недостатки использования журналов базы данных
Освобождение данных с помощью исходящих таблиц
Некоторые мысли по поводу производительности
Изоляция внутренних моделей данных
Обеспечение совместимости схем
Выгоды от создания событий с помощью исходящих таблиц
Недостатки создания событий с помощью исходящих таблиц
Захват изменений в данных с помощью триггеров
Выгоды от использования триггеров
Недостатки использования триггеров
Внесение изменений определения данных в захватываемые наборы данных
Обработка произведенных постфактум изменений определения данных для шаблонов запросов и журналов CDC
Обработка изменений определения данных для шаблонов захвата таблиц изменений в данных
Запись данных о событиях в хранилища данных
Влияние на бизнес записи данных в приемники и получения их из источников
Резюме
Глава 5. Основы событийно-управляемой обработки
Топологии без поддержки состояния
Преобразования
Ветвление и слияние потоков
Переподразделение потоков событий
Пример переподразделения потока событий
Соподразделение потоков событий
Пример соподразделения потока событий
Назначение разделов экземпляру потребителя
Назначение разделов с помощью контроллера разделов
Назначение соподразделенных разделов
Стратегии назначения разделов
Назначение по круговой схеме
Статическое назначение
Индивидуально настраиваемое назначение
Восстановление после отказов экземпляра обработчика без поддержки состояния
Резюме
Глава 6. Детерминированная обработка потоков
Детерминизм событийно-управляемых рабочих процессов
Временные метки
Синхронизация распределенных временных меток
Обработка с помощью событий, помеченных временными метками
Пример: выбор порядка событий при обработке многочисленных разделов
Планирование событий и детерминированная обработка
Индивидуально настраиваемые планировщики событий
Обработка на основе времени события, времени обработки и времени получения
Извлечение временной метки потребителем
Вызовы к внешним системам в форме «запрос-ответ»
Водяные знаки
Водяные знаки в параллельной обработке
Время потока
Время потока в параллельной обработке
Неупорядоченные и запоздалые события
Запоздалые события с водяными знаками и временем потока
Причины и последствия неупорядоченных событий
Загрузка из источников с неупорядоченными данными
Несколько производителей в несколько разделов
Чувствительные ко времени функции и управление окнами
Переворачивающиеся окна
Скользящие окна
Сеансовые окна
Обработка запоздалых событий
Повторная обработка или обработка в режиме, близком к реальному времени
Периодические сбои и запоздалые события
Проблемы с подключением производителя/брокера событий
Резюме и дополнительная литература
Глава 7. Потоковая передача с поддержкой состояния
Хранилища состояний и материализация состояний из потока событий
Запись состояния в поток событий журнала изменений
Материализация состояния во внутреннее хранилище состояний
Материализация глобального состояния
Преимущества использования внутреннего состояния
Требования к масштабируемости снимаются с разработчика
Высокопроизводительные возможности, основанные на использовании дисков
Гибкость использования подключенного через сеть внешнего диска
Недостатки использования внутреннего состояния
Ограничения при использовании локальных дисков
Потери при использовании дискового пространства
Масштабирование и восстановление внутреннего состояния
Использование «горячих реплик»
Восстановление и масштабирование из журналов изменений
Восстановление и масштабирование входных потоков событий
Материализация состояния во внешнее хранилище состояний
Преимущества внешнего состояния
Полная локализация данных
Технологии
Недостатки внешнего состояния
Управление многочисленными технологиями
Потеря производительности из-за сетевой задержки
Финансовые затраты на сервисы внешнего хранилища состояний
Полная локальность данных
Масштабирование и восстановление с помощью внешних хранилищ состояний
Использование исходных потоков
Использование журналов изменений
Использование моментальных снимков
Перестраивание хранилищ состояний или их мигрирование?
Перестраивание
Мигрирование
Транзакции и практически однократная обработка
Пример: сервис учета запасов
Практически однократная обработка с транзакциями клиент-брокер
Практически однократная обработка без транзакции клиент-брокер
Генерация дублирующихся событий
Идентификация дублирующихся событий
Защита от дубликатов
Поддержание согласованного состояния
Резюме
Глава 8. Построение рабочих процессов с помощью микросервисов
Шаблон «хореография»
Простой пример событийно-управляемой хореографии
Создание и изменение хореографического рабочего процесса
Мониторинг хореографического рабочего процесса
Шаблон «оркестровка»
Простой пример событийно-управляемой оркестровки
Простой пример оркестровки с прямым вызовом
Событийно-управляемая оркестровка в сравнении с окрестровкой с прямым вызовом
Создание и изменение рабочего процесса на основе оркестровки
Мониторинг процесса на основе оркестровки
Распределенные транзакции
Хореографические транзакции: шаблон «Сага»
Пример хореографической транзакции
Транзакции с оркестровкой
Компенсационные процессы
Резюме
Глава 9. Микросервисы с использованием технологии «Функция как сервис»
Проектирование функционально-ориентированных решений в качестве микросервисов
Обеспечивайте строгое членство в ограниченном контексте
Фиксируйте смещения только после завершения обработки
Когда функция завершила свою обработку
Когда функция только что запустилась
Меньше значит больше
Выбор провайдера FaaS
Построение микросервисов из функций
«Холодный старт» и «теплые старты»
Запуск функций с помощью триггеров
Запуск по новому событию: слушатель потока событий
Запуск по задержке группы потребителей
Запуск по расписанию
Запуск с использованием веб-перехватчиков
Запуск по событиям ресурсов
Решение бизнес-задач с помощью функций
Поддержание состояния
Функции, вызывающие другие функции
Шаблон событийно-управляемого обмена информацией
Шаблон прямого вызова
Хореография и асинхронный вызов функций
Оркестровка и синхронный вызов функций
Завершение работы функции и выключение
Тонкая настройка функций
Выделение достаточных ресурсов
Параметры пакетной обработки событий
Масштабирование решений FaaS
Резюме
Глава 10. Микросервисы на основе базового шаблона производителя и потребителя
Где BPC работают хорошо?
Интеграция с существующими и унаследованными системами
Пример: шаблон «Коляска»
Бизнес-логика с поддержкой состояния без учета порядка событий
Пример: книгоиздание
Когда уровень данных выполняет значительную часть работы
Независимое масштабирование уровня обработки и данных
Пример: агрегирование данных о событиях для создания профилей взаимодействия с пользователями
Гибридные приложения BPC с внешней потоковой обработкой
Пример: использование внешнего фреймворка обработки потоков для объединения потоков событий
Резюме
Глава 11. «Тяжеловесные» фреймворки для микросервисов
Краткая история «тяжеловесных» фреймворков
Внутренняя логика работы «тяжеловесных» фреймворков
Выгоды и ограничения
Варианты настройки кластера и режимы исполнения
Используйте сервис, размещенный на хосте провайдера
Постройте свой собственный полный кластер
Создайте кластер, интегрированный с CMS
Развертывание и запуск кластера с использованием CMS
Указание ресурсов для одного задания с использованием CMS
Режимы передачи приложений в кластер
Драйверный режим
Кластерный режим
Обработка состояния и использование контрольных точек
Масштабирование приложений и обработка разделов потока событий
Масштабирование приложения во время его работы
Масштабирование приложения путем его перезапуска
Автоматическое масштабирование приложений
Восстановление после отказов
Рекомендации по части мультитенантности
Языки и синтаксис
Выбор фреймворка
Пример: обработка щелчков и просмотров с помощью сеансовых окон
Резюме
Глава 12. «Легковесные» фреймворки для микросервисов
Выгоды и ограничения
«Легковесная» обработка
Обработка состояния и использование журналов изменений
Масштабирование приложений и восстановление после отказов
Перераспределение событий
Назначение состояния
Репликация состояния и «горячие реплики»
Выбор «легковесного» фреймворка
Apache Kafka Streams
Apache Samza: режим встраивания
Языки и синтаксис
Операция соединения «поток-таблица-таблица»: шаблон обогащения
Резюме
Глава 13. Интегрирование событийно-управляемых микросервисов с микросервисами типа «запрос-ответ»
Обработка внешних событий
Автономно генерируемые события
Реактивно генерируемые события
Обработка автономно генерируемых аналитических событий
Интегрирование со сторонними API «запрос-ответ»
Обработка и обслуживание данных с поддержкой состояния
Обслуживание запросов реального времени с помощью внутренних хранилищ состояний
Обслуживание запросов реального времени с помощью внешних хранилищ состояний
Обслуживание запросов путем материализации событийно-управляемого микросервиса
Обслуживание запросов через отдельный микросервис
Обработка запросов внутри событийно-управляемого рабочего процесса
Обработка событий для пользовательских интерфейсов
Пример: рабочий процесс публикации газет (шаблон одобрения)
Разделение сервисов одобрения редактором и рекламодателем
Микрофронтенды в приложениях на основе запросов-ответов
Выгоды от микрофронтендов
Композиционные микросервисы
Простота привязки к бизнес-требованиям
Недостатки микрофронтендов
Потенциальное отсутствие единообразия элементов пользовательского интерфейса и стилизации
Различающаяся производительность микрофронтендов
Пример: приложение поиска источников впечатлений и отзывов о них
Резюме
Глава 14. Вспомогательные инструменты
Система закрепления микросервисов за командами
Создание и модифицирование потока событий
Разметка потока событий метаданными
Квоты
Реестр схем
Оповещение о создании и модификации схем
Управление смещением
Разрешения и списки контроля доступа для потоков событий
Управление состоянием и сброс приложения
Мониторинг запаздывания смещения потребителей
Оптимизированный процесс создания микросервисов
Элементы управления контейнерами
Создание кластеров и управление ими
Программная доводка брокеров событий
Программная доводка вычислительных ресурсов
Межкластерная репликация событийных данных
Программная доводка инструментария
Отслеживание зависимостей и визуализация топологии
Пример топологии
Резюме
Глава 15. Тестирование событийно-управляемых микросервисов
Общие принципы тестирования
Модульное тестирование функций топологии
Функции без поддержки состояния
Функции с поддержкой состояния
Тестирование топологии
Тестирование развития и совместимости схем
Интеграционное тестирование событийно-управляемых микросервисов
Локальное интеграционное тестирование
Создание временной среды внутри среды выполнения тестируемого кода
Создание временной среды, внешней по отношению к тестируемому коду
Интеграция размещенных на хосте сервисов с использованием возможностей имитации и симуляции
Интеграция удаленных сервисов, не имеющих локальных возможностей
Полное интеграционное тестирование
Программное создание временной среды интеграционного тестирования
Заполнение событиями с использованием реальных производственных данных
Заполнение событиями из подготовленного источника тестирования
Создание имитационных событий с использованием схем
Тестирование с использованием единой общей среды
Тестирование с использованием производственной среды
Выбор стратегии полного интеграционного тестирования
Резюме
Глава 16. Развертывание событийно-управляемых микросервисов
Принципы развертывания микросервисов
Архитектурные компоненты развертывания микросервисов
Системы непрерывной интеграции, доставки и развертывания
Системы управления контейнерами и стандартное аппаратное обеспечение
Базовый шаблон полного развертывания
Шаблон непрерывного обновления
Шаблон разрушительных изменений схемы
Продолженная миграция через два потока событий
Синхронизированная миграция в новый поток событий
Шаблон «сине-зеленого» развертывания
Резюме
Глава 17. Заключение
Уровни обмена информацией
Предметные области бизнеса и ограниченные контексты
Совместные инструменты и инфраструктура
Схематизированные события
Освобождение данных и единственный источник истины
Микросервисы
Варианты реализации микросервисов
Тестирование
Развертывание
Завершающие слова
Предметный указатель
Об авторе
Об обложке