В архитектуре программного обеспечения нет простых решений. Напротив, есть масса сложностей — задач и проблем, для решения которых нет готовых ответов, и приходится выбирать между различными компромиссами. Эта книга научит вас критически относиться к компромиссам, связанным с распределенными архитектурами.
Опытные архитекторы Нил Форд, Марк Ричардс, Прамод Садаладж и Жамак Дехгани обсуждают стратегии выбора архитектуры, подходящей для тех или иных случаев. История Sysops Squad вымышленной группы специалистов — позволяет исследовать все аспекты выбора архитектуры: от определения степени гранулярности сервисов, управления рабочими процессами и оркестрации, разделения контрактов и управления распределенными транзакциями до оптимизации таких операционных характеристик, как масштабируемость, адаптируемость и производительность.
Author(s): Нил Форд, Марк Ричардс, Прамод Садаладж, Жамак Дехгани
Series: Для профессионалов
Edition: 1
Publisher: Питер
Year: 2023
Language: Russian
Commentary: Publisher's PDF
Pages: 480
City: СПб.
Tags: Analytics; Scalability; Maintanability; Best Practices; Software Architecture; Distributed Processing; Testability; Code Reusability; Architecture Patterns; Deployability
Вступление
Условные обозначения
Использование программного кода примеров
Благодарности
От Марка Ричардса
От Нила Форда
От Прамода Садаладжа
От Жамак Дехгани
От издательства
Глава 1. Что происходит, когда нет «передового опыта»
Почему «сложные компромиссы»?
Советы по архитектуре программного обеспечения, не подвластные времени
Важность данных в архитектуре
Запись архитектурных решений
Функции пригодности
Архитектура и проектирование: определения должны быть простыми
Введение в сагу о Sysops Squad
Рабочий процесс, не связанный с заявками
Рабочий процесс обработки заявок
Плохой сценарий
Архитектурные компоненты Sysops Squad
Модель данных Sysops Squad
Часть I. Разделение компонентов
Глава 2. Выявление связей в архитектуре программного обеспечения
Архитектурные кванты
Возможность независимого развертывания
Высокая функциональная связность
Тесная статическая связанность
Динамическая связанность квантов
Сага о Sysops Squad: суть кванта
Глава 3. Архитектурная модульность
Движущие силы модульности
Сопровождаемость
Тестируемость
Развертываемость
Масштабируемость
Доступность/отказоустойчивость
Сага о Sysops Squad: создание бизнес-обоснования
Глава 4. Архитектурная декомпозиция
База кода поддается декомпозиции?
Афферентная и эфферентная связанность
Абстрактность и нестабильность
Расстояние от главной последовательности
Декомпозиция на основе компонентов
Тактическое ветвление
Сага о Sysops Squad: выбор подхода к декомпозиции
Глава 5. Паттерны декомпозиции на основе компонентов
Паттерн Идентификация компонентов и их размеров
Описание паттерна
Функции пригодности для управления
Сага о Sysops Squad: размеры компонентов
Паттерн Объединение общих компонентов предметной области
Описание паттерна
Функции пригодности для управления
Сага о Sysops Squad: объединение общих компонентов
Паттерн Упрощение иерархии компонентов
Описание паттерна
Функции пригодности для управления
Сага о Sysops Squad: упрощение иерархии компонентов
Паттерн Определение зависимостей компонентов
Описание паттерна
Функции пригодности для управления
Сага о Sysops Squad: определение зависимостей компонентов
Паттерн Создание предметных областей компонентов
Описание паттерна
Функции пригодности для управления
Сага о Sysops Squad: создание предметных областей компонентов
Паттерн Создание предметных сервисов
Описание паттерна
Функции пригодности для управления
Сага о Sysops Squad: создание предметных сервисов
Резюме
Глава 6. Разделение
операционных данных
Движущие силы декомпозиции данных
Движущие силы дезинтеграции данных
Движущие силы интеграции данных
Сага о Sysops Squad: обоснование декомпозиции данных
Декомпозиция монолитных данных
Этап 1: анализ базы данных и создание предметных областей данных
Этап 2: распределение таблиц по предметным областям
Этап 3: разделение соединений с предметными областями в базе данных
Этап 4: перемещение схем на отдельные серверы баз данных
Этап 5: переключение на независимые серверы баз данных
Выбор типа базы данных
Реляционные базы данных
Базы данных «ключ — значение»
Документные базы данных
Колоночные базы данных
Графовые базы данных
Базы данных NewSQL
Облачные базы данных
Базы данных временных рядов
Сага о Sysops Squad: многоязычные базы данных
Глава 7. Гранулярность сервисов
Силы дезинтеграции гранулярности
Область действия и функциональность сервиса
Изменчивость кода
Масштабируемость и пропускная способность
Отказоустойчивость
Безопасность
Расширяемость
Силы интеграции гранулярности
Транзакции базы данных
Рабочий процесс и хореография
Общий код
Отношения в данных
Поиск правильного баланса
Сага о Sysops Squad: гранулярность сервиса заявок
Сага о Sysops Squad: гранулярность сервиса регистрации клиентов
Часть II. Объединяем все вместе
Глава 8
Глава 8. Паттерны повторного использования
Репликация кода
Когда использовать
Разделяемая библиотека
Управление зависимостями и изменениями
Стратегии версионирования
Когда использовать
Общий сервис
Риск изменений
Производительность
Масштабируемость
Отказоустойчивость
Когда использовать
Sidecar-компоненты и сервисная сетка
Когда использовать
Сага о Sysops Squad: общая инфраструктурная логика
Повторное использование кода: когда это ценно
Повторное использование через платформы
Сага о Sysops Squad: общая функциональность
Глава 9
Глава 9. Владение данными и распределенные транзакции
Владение данными
Единоличное владение
Общее владение
Совместное владение
Прием разделения таблиц
Прием выделения предметной области
Прием делегирования
Прием объединения сервисов
Резюме о владении данными
Распределенные транзакции
Паттерны согласованности в конечном счете
Паттерн фоновой синхронизации
Паттерн оркестрации запроса
Паттерн на основе событий
Сага о Sysops Squad: владение данными в обработке заявок
Глава 10
Глава 10. Распределенный доступ
к данным
Паттерн взаимодействий между сервисами
Паттерн репликации схемы столбцов
Паттерн реплицированного кэша
Паттерн предметной области данных
Сага о Sysops Squad: доступ к данным для назначения заявок
Глава 11
Глава 11. Управление
распределенными
рабочими процессами
Организация взаимодействий с оркестрацией
Организация взаимодействий с хореографией
Управление состоянием рабочего процесса
Компромиссы при выборе оркестрации и хореографии
Сага о Sysops Squad: управление рабочими процессами
Глава 12. Транзакционные саги
Паттерны транзакционных саг
Паттерн Эпическая сага (Epic Saga)(сао)
Паттерн Переписка (Phone Tag Saga)(сах)
Паттерн Сказка (Fairy Tale Saga)(спо)
Паттерн Путешествие во времени (Time Travel Saga)(спх)
Паттерн Фантастика (Fantasy Fiction Saga)(аао)
Паттерн Ужасы (Horror Story)(аах)
Паттерн Параллельная сага (Parallel Saga)(апо)
Паттерн Антология (Anthology Saga)(апх)
Управление состоянием и потенциальная согласованность
Конечные автоматы
Методы управления сагами
Сага о Sysops Squad: атомарные транзакции и компенсирующие воздействия
Глава 13. Контракты
Строгие и свободные контракты
Компромиссы между строгими и свободными контрактами
Контракты в микросервисах
Связывание по структурированным данным
Чрезмерное сильное связывание по структурированным данным
Пропускная способность
Связывание по структурированным данным для управления рабочим процессом
Сага о Sysops Squad Saga: контракты в рабочем процессе управления заявками
Глава 14. Управление аналитическими данными
Предыдущие подходы
Хранилище данных
Озеро данных
Сетка данных
Определение сетки данных
Квант продукта данных
Сетка данных, связанность и квантовая архитектура
Когда использовать сетку данных
Сага о Sysops Squad: сетка данных
Глава 15. Собственный анализ компромиссов
Поиск запутанных измерений
Связанность
Анализ точек сопряжения
Оценка компромиссов
Методы анализа компромиссов
Качественный и количественный анализ
Списки МЕСЕ
Ловушка «выпадения из контекста»
Модели релевантных предметных случаев
Практический результат важнее неопровержимых доказательств
Избегайте панацеи и пропаганды
Сага о Sysops Squad: эпилог
Приложения
Приложение A. Понятия и термины
Приложение Б. Ссылки на записи в реестре архитектурных решений
Приложение В. Ссылки на компромиссы
Об авторах
Иллюстрация на обложке