От монолита к микросервисам

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Новая книга Сэма Ньюмена подробно описывает проверенный метод перевода существующей монолитной системы на микросервисы, поддерживающий работу организации в обычном режиме. Она дополняет его бестселлер «Создание микросервисов». Руководство содержит наглядные примеры, шаблоны миграции, массу практических советов по переводу монолитной системы на платформу для микрослужб, различные сценарии и стратегии успешной миграции, начиная с первичного планирования и заканчивая декомпозицией приложений и баз данных. Описанные шаблоны и методы можно использовать для миграции уже существующей архитектуры.

Author(s): Сэм Ньюмен
Edition: 1
Publisher: БХВ-Петербург
Year: 2021

Language: Russian
Pages: 272
City: СПб.
Tags: Management; Relational Databases; Microservices; Transactions; Database Design; User Interface; Software Architecture; Team Management; Monolithic Architecture; Domain-Driven Design

Оглавление
Об авторе
Предисловие
Чему вы научитесь
Условные обозначения, принятые в книге
Благодарности
Глава 1. Основные сведения о микрослужбах
Что такое микрослужбы?
Независимая развертываемость
Моделируются вокруг бизнес-домена
Владеют своими собственными данными
Какие преимущества приносят микрослужбы?
Какие проблемы они создают?
Пользовательские интерфейсы
Технология
Размер
И владение
Монолит
Однопроцессный монолит
И модульный монолит
Распределенный монолит
Сторонние черно-ящичные системы
Трудности монолитов
Преимущества монолитов
О сопряженности и связности
Связность
Сопряженность
Имплементационная сопряженость
Временная сопряженность
Сопряженность развертывания
Доменная сопряженность
Доменно-обусловленный дизайн
Агрегат
Ограниченный контекст
Отображение агрегатов и ограниченных контекстов в микрослужбы
Дальнейшее чтение
Резюме
Глава 2. Планирование миграции
Понимание цели
Три ключевых вопроса
Почему вы, возможно, выберете микрослужбы?
Повысить автономию групп
Как еще это сделать?
Сократить время до рынка
Как еще это сделать?
Выполнить эффективное по стоимости масштабирование с учетом нагрузки
Как еще это сделать?
Повысить робастность
Как еще это сделать?
Промасштабировать число разработчиков
Как еще это сделать?
Внедрить новую технологию
Как еще это сделать?
Когда микрослужбы будут плохой идеей?
Неясный домен
Стартапы
Софт инсталлируется и управляется клиентом
Отсутствует веская причина!
Компромиссы
Приглашение людей в "путешествие"
Изменение организаций
Закрепление чувства насущной необходимости
Создание направляющей коалиции
Развитие видения и стратегии
Коммуницирование видения перемен
Расширение полномочий сотрудников по широкому кругу действий
Генерирование краткосрочных выигрышей
Консолидация выигрышей и порождение новых изменений
Заякоревание новых подходов в культуре
Важность поступательной миграции
Главное — производство
Стоимость изменения
Обратимые и необратимые решения
Более легкие места для эксперимента
Так с чего же мы начнем?
Доменно-обусловленный дизайн
Как далеко заходить?
Событийный штурм
Использование доменной модели для приоритизации
Комбинированная модель
Реорганизация групп
Сдвиг в структуре
Не одна мерка для всех
Внесение изменений
Изменение навыков
Как узнать, что транзит работает?
Наличие регулярных контрольных точек
Количественные показатели
Качественные показатели
Избегать эффекта понесенных расходов
Оставаясь открытым для новых подходов
Резюме
Глава 3. Разложение монолита
Изменять монолит или не изменять?
Вырезать, скопировать или реимплементировать?
Рефакторизация монолита
Модульный монолит?
Поступательные переписывания
Шаблоны миграции
Шаблон приложение "Фикус-удавка"
Как он работает
Где его использовать
Пример: обратный прокси-селектор HTTP
Шаг 1: вставить прокси-селектор
Шаг 2: мигрировать функциональность
Шаг 3: перенаправить вызовы
Данные?
Варианты прокси-селектора
Поступательное внедрение
Смена протоколов
И сетки для служб
Пример: FTP
Пример: перехват сообщений
Маршрутизация на основе содержимого
Селективное потребление
Другие протоколы
Другие примеры шаблона "Фикус-удавка"
Изменение поведения во время мигрирования функциональности
Шаблон "Композиция пользовательского интерфейса"
Пример: страничная композиция
Пример: виджетная композиция
И мобильные приложения
Пример: микрофронтэнды
Где его использовать
Шаблон "Ветвление по абстракции"
Как он работает
Шаг 1: создать абстракцию
Шаг 2: использовать абстракцию
Шаг 3: создать новую имплементацию
Шаг 4: переключить имплементацию
Шаг 5: очистка
В качестве механизма отката
Где его использовать
Шаблон: "Параллельное выполнение"
Пример: сравнение ценообразования кредитных деривативов
Пример: листинги компании Homegate
Методы верификации
Использование "шпионов"
Библиотека Scientist хостинга GitHub
"Темный" запуск и выпуск "канареечных" релизов
Где его использовать
Шаблон: "Сотрудник-декоратор"
Пример: программа лояльности
Где его использовать
Шаблон: "Захват изменений в данных"
Пример: выпуск карточек лояльности
Имплементация захвата изменений в данных
Триггеры базы данных
Опросники журналов транзакций
Пакетный копировальщик дельты
Где его использовать
Резюме
Глава 4. Декомпозиция базы данных
Шаблон: "Совместная база данных"
Шаблоны преодоления
Где его использовать
Но это невозможно сделать!
Шаблон: "Проекция базы данных"
База данных как публичный контракт
Представляемые проекции
Ограничения
Владение
Где его использовать
Шаблон: "Служба обертывания базы данных"
Где его использовать
Шаблон: "Интерфейс база-данных-как-служба"
Имплементация механизма отображения
Сравнение с проекциями базы данных
Где его использовать
Передача владения
Шаблон: "Монолит с выставлением агрегата наружу"
В качестве пути к большему числу служб
Где его использовать
Шаблон: "Смена владельца данных"
Где его использовать
Синхронизация данных
Шаблон: "Синхронизировать данные в приложении"
Шаг 1: массово синхронизировать данные
Шаг 2: синхронизировать при записи, читать из старой схемы
Шаг 3: синхронизировать при записи, читать из новой схемы
Зачем использовать этот шаблон
Где его использовать
Шаблон "Трассировочная запись"
Синхронизация данных
Пример: заказы в Square
Создание новой службы
Синхронизировать данные
Мигрирование потребителей
Где его использовать
Разбиение базы данных
Физическое и логическое разделение баз данных
Что выделять сначала: базу данных или код?
Сначала выделить базу данных
Шаблон "Один репозиторий на один ограниченный контекст"
Где его использовать
Шаблон. "Одна база данных на один ограниченный контекст"
Где его использовать
Сначала выделить код
Шаблон "Монолит как слой доступа к данным"
Где его использовать
Шаблон: "Мультисхемное хранение"
Где его использовать
Выделить базу данных и код вместе
Так что же мне выделять сначала?
Примеры выделения схемы
Шаблон: "Разложить таблицу"
Где его использовать
Шаблон: "Перенести связь по внешнему ключу в код"
Перенос операции соединения
Согласованность данных
Проверять перед удалением
Улаживать удаление изящно
Не разрешать удаление
И как же тогда обрабатывать удаление?
Где его использовать
Пример: совместные статические данные
Шаблон: "Дублировать статические справочные данные"
Где его использовать
Шаблон: "Выделенная схема справочных данных"
Где его использовать
Шаблон: "Библиотека статических справочных данных"
Где его использовать
Шаблон: "Служба статических справочных данных"
Где его использовать
Что бы я сделал?
Транзакции
ACID-транзакции
По-прежнему ACID, но не хватает атомарности?
Двухфазные фиксации
Распределенные транзакции — просто скажи "нет"
Саги
Режимы сбоя саги
Откаты в саге
Переупорядочивание шагов для уменьшения откатов
Смешивание ситуаций сбоя назад и сбоя вперед
Имплементация саг
Оркестрированные саги
Хореографированные саги
Смешивание стилей
Что использовать: хореографию или оркестровку?
Саги против распределенных транзакций
Резюме
Глава 5. Болезни роста
Чем больше служб, тем больше боли
Владение кодом в широком масштабе
Как эта проблема проявляется?
Когда эта проблема возникает?
Потенциальные решения
Переломные изменения
Как эта проблема проявляется?
Когда эта проблема возникает?
Потенциальные решения
Устранять "нечаянные" переломные изменения
Хорошенько подумать, прежде чем вносить переломные изменения
Давать потребителям время на миграцию
Отчетность
Когда эта проблема возникает?
Потенциальные решения
Мониторинг и устранение неполадок
Когда эти проблемы возникают?
Как эти проблемы проявляются?
Потенциальные решения
Агрегирование журналов
Трассировка
Испытание в производстве
В направлении наблюдаемости
Локальный опыт разработчиков
Как эта проблема проявляется?
Когда эта проблема возникает?
Потенциальные решения
Выполнение слишком многого
Как эта проблема проявляется?
Когда эти проблемы возникают?
Потенциальные решения
Сквозное тестирование
Как эта проблема проявляется?
Когда эта проблема возникает?
Потенциальные решения
Ограничить охват функциональных автоматизированных испытаний
Использовать контракты, обусловливаемые потребителем
Использовать автоматическую ремедиацию релиза и прогрессивную доставку
Постоянно уточнять циклы обратной связи относительно качества
Глобальная оптимизация против локальной оптимизации
Как эта проблема проявляется?
Когда эта проблема возникает?
Потенциальные решения
Робастность и отказоустойчивость
Как эта проблема проявляется?
Когда эта проблема возникает?
Потенциальные решения
"Осиротевшие" службы
Как эта проблема проявляется?
Когда эта проблема возникает?
Потенциальные решения
Резюме
Заключение
Приложение 1. Библиография
Приложение 2. Указатель шаблонов
Предметный указатель