Современный подход программной архитектуре: сложные компромиссы

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"

В архитектуре программного обеспечения нет простых решений. Напротив, есть масса сложностей — задач и проблем, для решения которых нет готовых ответов, и приходится выбирать между различными компромиссами. Эта книга научит вас критически относиться к компромиссам, связанным с распределенными архитектурами. Опытные архитекторы Нил Форд, Марк Ричардс, Прамод Садаладж и Жамак Дехгани обсуждают стратегии выбора архитектуры, подходящей для тех или иных случаев. История Sysops Squad — вымышленной группы специалистов — позволяет исследовать все аспекты выбора архитектуры: от определения степени гранулярности сервисов, управления рабочими процессами и оркестрации, разделения контрактов и управления распределенными транзакциями до оптимизации таких операционных характеристик, как масштабируемость, адаптируемость и производительность. https://architecturethehardparts.com

Author(s): Нил Форд, Марк Ричардс, Прамод Садаладж, Жамак Дехгани
Publisher: Питер
Year: 2023

Language: Russian
Pages: 480
City: СПб.

Краткое содержание
Оглавление
Вступление
Условные обозначения
Использование программного кода примеров
Благодарности
От Марка Ричардса
От Нила Форда
От Прамода Садаладжа
От Жамак Дехгани
От издательства
Глава 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. Паттерны повторного использования
Репликация кода
Когда использовать
Разделяемая библиотека
Управление зависимостями и изменениями
Стратегии версионирования
Когда использовать
Общий сервис
Риск изменений
Производительность
Масштабируемость
Отказоустойчивость
Когда использовать
Sidecar-компоненты и сервисная сетка
Когда использовать
Сага о Sysops Squad: общая инфраструктурная логика
Повторное использование кода: когда это ценно
Повторное использование через платформы
Сага о Sysops Squad: общая функциональность
Глава 9. Владение данными и распределенные транзакции
Владение данными
Единоличное владение
Общее владение
Совместное владение
Прием разделения таблиц
Прием выделения предметной области
Прием делегирования
Прием объединения сервисов
Резюме о владении данными
Распределенные транзакции
Паттерны согласованности в конечном счете
Паттерн фоновой синхронизации
Паттерн оркестрации запроса
Паттерн на основе событий
Сага о Sysops Squad: владение данными в обработке заявок
Глава 10. Распределенный доступ к данным
Паттерн взаимодействий между сервисами
Паттерн репликации схемы столбцов
Паттерн реплицированного кэша
Паттерн предметной области данных
Сага о Sysops Squad: доступ к данным для назначения заявок
Глава 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. Понятия и термины
Приложение Б. Ссылки на записи в реестре архитектурных решений
Приложение В. Ссылки на компромиссы
Об авторах
Иллюстрация на обложке