УДК 004.4
ББК 32.971.3
П26
П26 Искусство неизменяемой архитектуры: теория и практика управления
данными в распределенных системах / пер. с анг. C. В. Минца; науч. ред.
В. С. Яценков. – М.: ДМК Пресс, 2022. – 388 с.: ил.
Майкл Л. Перри
ISBN 978-5-93700-111-5
Эта книга раскрывает преимущества использования неизменяемых объектов
в распределенных системах. Вы узнаете о том, почему важна неизменяемость,
исследуете пространство альтернатив и аспекты исторического моделирования.
Затем ознакомитесь с математическими основами неизменяемости и увидите,
как применять эти знания для анализа систем, построения машин состояний
и соблюдения правил безопасности. В завершение будут рассмотрены компоненты
компьютерной системы и их использование в неизменяемой архитектуре.
Издание предназначено для архитекторов программного обеспечения
и опытных разработчиков, а также аналитиков бизнес-систем.
УДК 004.4
ББК 32.971.3
First published in English under the title The Art of Immutable Architecture; Theory and
Practice of Data Management in Distributed Systems by Michael Perry, edition: 1.
This edition has been translated and published under licence from APress Media, LLC, part
of Springer Nature.
APress Media, LLC, part of Springer Nature takes no responsibility and shall not be made
liable for the accuracy of the translation.
Все права защищены. Любая часть этой книги не может быть воспроизведена
в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения
владельцев авторских прав.
ISBN (анг.) 978-1-107-02398-7
ISBN (рус.) 978-5-93700-111-5
Copyright © Michael L. Perry, 2020
© Оформление, издание, перевод, ДМК Пресс, 2022
Стр.5
Оглавление
Об авторе ...........................................................................................................16
О техническом рецензенте ........................................................................17
Благодарности .................................................................................................18
Введение ............................................................................................................20
ЧАСТЬ I. ОПРЕДЕЛЕНИЕ .....................................................................25
Глава 1. Почему неизменяемая архитектура ......................................26
Решение проблемы неизменяемости .............................................................26
Проблемы с неизменяемостью ........................................................................27
Начинаем новое путешествие .........................................................................27
Ошибки распределенных вычислений ...........................................................28
Сеть ненадежна ..........................................................................................28
Время задержки не равно нулю ................................................................29
Топология не меняется .............................................................................30
Изменение предположений ......................................................................30
Неизменяемость меняет все ............................................................................31
Совместное изменяемое состояние .........................................................32
Структурное разделение ..........................................................................32
Проблема двух генералов .................................................................................34
Заранее подготовленный протокол .........................................................36
Уменьшение неопределенности...............................................................36
Дополнительное сообщение .....................................................................37
Доказательство невозможности ...............................................................38
Смягчение ограничений ..................................................................................39
Переопределение проблемы.....................................................................40
Решать и действовать ................................................................................40
Принять истину .........................................................................................41
Действенный протокол .............................................................................41
Примеры неизменяемой архитектуры ...........................................................42
Git ...............................................................................................................43
Блокчейн ....................................................................................................44
Docker .........................................................................................................46
Стр.7
Оглавление 7
Глава 2. Формы неизменяемой архитектуры .....................................48
Выведение состояния из истории ...................................................................48
Исторические записи ................................................................................49
Опираясь на прошлое ........................................................................49
Развитие понимания ..........................................................................50
Изменяемые объекты ................................................................................50
Идентичность .....................................................................................50
Изменение состояния ........................................................................51
Проекции ...................................................................................................51
Два вида состояния ............................................................................52
Проецирование объектов ..................................................................52
Поиск событий ..................................................................................................53
Генерация событий ....................................................................................53
CQRS ...........................................................................................................54
DDD .............................................................................................................55
Взгляд с точки зрения функций ..............................................................56
Коммутативные и идемпотентные события ...........................................57
Асинхронное обновление представления модели .........................................58
Цикл обновления .......................................................................................58
Однонаправленный поток данных ..........................................................60
Неизменяемая архитектура приложений ................................................61
Историческое моделирование .........................................................................62
Частичный порядок ...................................................................................62
Предшественники .....................................................................................63
Преемники .................................................................................................65
Неизменяемые графы ...............................................................................66
Совместная работа ....................................................................................68
Ациклические графы.................................................................................69
Своевременность .......................................................................................69
Ограничения исторического моделирования ................................................70
Отсутствие центральной власти ..............................................................71
Отсутствие часов реального времени ......................................................72
Отсутствие ограничений уникальности ..................................................72
Отсутствие агрегирования ........................................................................73
Глава 3. Как читать историческую модель ...........................................75
Графы типов фактов .........................................................................................76
Шахматная партия ............................................................................................80
Важные атрибуты ......................................................................................81
Цепочка фактов .........................................................................................81
Исход партии .............................................................................................83
Графы экземпляров фактов .............................................................................85
Бессмертная партия .........................................................................................87
Стр.8
8 Оглавление
Регистрация ходов .....................................................................................88
Блестящая победа ......................................................................................91
Язык фактологического моделирования ........................................................92
Объявление типов фактов ........................................................................92
Запрос модели ...........................................................................................94
Переход по уровням ..................................................................................95
Объединение совпадений .........................................................................95
Экзистенциальные квантификаторы ...............................................96
Текущее значение ......................................................................................98
Правила авторизации ...............................................................................99
Шахматное приложение .................................................................................100
Примеры использования ........................................................................101
Интерфейс пользователя ........................................................................102
Действия ...........................................................................................102
Представления ..................................................................................103
ЧАСТЬ II. ПРИМЕНЕНИЕ ...................................................................105
Глава 4. Независимость от местоположения .....................................106
Моделирование с неизменяемостью ............................................................107
Синхронизация ...............................................................................................107
Изучение соглашений ....................................................................................108
Идентичность .................................................................................................108
Автоинкрементные идентификаторы ...................................................108
Зависимость от среды ......................................................................109
Вставка отношения «родитель–ребенок» .......................................110
Удаленное создание .........................................................................111
URL-адреса ...............................................................................................111
Идентификация, не зависящая от местоположения .............................112
Естественные ключи ........................................................................113
GUID ...................................................................................................114
Временные метки .............................................................................114
Кортежи .............................................................................................114
Хеши ..................................................................................................115
Открытые ключи ..............................................................................116
Случайные числа ..............................................................................116
Причинность ...................................................................................................117
Упорядочивание шагов ...........................................................................117
Транзитивное свойство ...........................................................................119
Параллелизм ............................................................................................120
Частичный порядок .................................................................................121
Теорема CAP ....................................................................................................121
Определение CAP ....................................................................................122
Стр.9
Оглавление 9
Доказательство теоремы CAP .................................................................124
Проверка алгоритма .........................................................................125
Конечная согласованность .............................................................................127
Виды согласованности ............................................................................128
Сильная конечная согласованность в системе ретрансляции..............129
Идемпотентность и коммутативность ...................................................130
Получение сильной конечной согласованности ...................................131
Система управления контактами ...........................................................133
Воспроизведение истории ......................................................................135
Бесконфликтные реплицированные типы данных (CRDT) .........................136
CRDT, основанные на состоянии ............................................................137
Частично упорядоченное состояние ...............................................137
Причинная история ..........................................................................138
Векторные часы .......................................................................................139
История фактов...............................................................................................141
Наборы .....................................................................................................142
Частичная упорядоченность ............................................................142
Обновление .......................................................................................143
Слияние .............................................................................................143
Исторические записи ..............................................................................143
Различение записей .........................................................................144
Удаление записи ...............................................................................145
Изменение записи ............................................................................146
Записи причинно-следственно связаны ........................................146
Преимущества явной причинности ................................................148
Исторические факты ...............................................................................150
Заключение .....................................................................................................150
Глава 5. Анализ ..............................................................................................152
Примеры использования ........................................................................153
От сценария использования к решению ................................................154
От расширения к преемственности .......................................................155
Данные ............................................................................................................158
Идентификаторы .....................................................................................158
Кардинальность .......................................................................................159
Изменение ...............................................................................................162
Представления ................................................................................................164
Поиск точки старта ..................................................................................164
Аннотированные каркасы ......................................................................165
Удаление из списков ...............................................................................166
Сотрудничество ..............................................................................................170
Регионы ....................................................................................................170
Пересечение границ .........................................................................171
Стр.10
10 Оглавление
Разговоры .................................................................................................173
Факты о публикации ........................................................................173
Взаимодействие подсистем .............................................................174
Допустимые упорядочения ............................................................................175
Устранение условий гонки ......................................................................176
Реагирование на различные допустимые заказы .................................177
Последствия ....................................................................................................179
Индексы ...................................................................................................180
Ограничения уникальности ............................................................180
Навигация .........................................................................................181
Поиск .................................................................................................182
Ожидаемое количество результатов ......................................................183
Отсутствие неявного порядка ................................................................184
Агрегаты ............................................................................................185
Итерации ...........................................................................................186
Порядок создания ....................................................................................186
Глава 6. Переходы состояний ..................................................................188
Множество свойств .........................................................................................189
Доставка и выставление счетов ..............................................................190
Внедрение обратных заказов у поставщика..........................................191
Отмены и возвраты .................................................................................191
Параллельные конечные автоматы .......................................................192
Много дочерних элементов ...........................................................................193
Отслеживание проблем в программном обеспечении .........................194
Дочернее состояние.................................................................................195
Составные диаграммы перехода состояний ..........................................195
Декларативная функция состояний .......................................................196
Условная проверка ..........................................................................................197
Допустимость неопределенного состояния ..........................................198
Циклы в изменении состояния ..............................................................199
Сбор данных во время переходов ..........................................................200
Неизменяемые переходы состояний .....................................................201
Вопрос, стоящий за состоянием ....................................................................202
Перевод конечного автомата в историческую модель .........................202
Выполнение заказов ........................................................................202
Отслеживание изменений в программном обеспечении .............205
Причины для вычисления состояния .....................................................207
Обработка следующего действия ....................................................208
Поиск рабочих элементов ................................................................209
Выполнение компенсирующих транзакций ..................................210
Единый источник истины ..............................................................................211
Оркестраторы ..........................................................................................212
Согласованное состояние.................................................................212
Стр.11
Оглавление 11
Центральная проверка .....................................................................212
Сходящиеся истории ...............................................................................213
Определение неизменяемых записей ............................................213
Запрос для следующего действия ...................................................213
Локальное фиксирование действий ................................................214
Определите компенсирующие действия ........................................214
Глава 7. Безопасность ..................................................................................215
Доказательство авторства ..............................................................................215
Ключевые пары ........................................................................................216
Дайджест ..................................................................................................217
Авторизация ...................................................................................................218
Факты принципала ..................................................................................219
Запрос авторизации ................................................................................219
Первоначальная авторизация ................................................................220
Предоставление полномочий ........................................................................222
Ограниченные полномочия ....................................................................223
Неограниченные полномочия ................................................................224
Транзитивная авторизация ....................................................................226
Отмена .....................................................................................................226
Авторизация при получении ..................................................................228
Конфиденциальность .....................................................................................229
Недоверенные узлы .................................................................................229
Асимметричное шифрование .................................................................229
Асимметричное ограничение размера ...........................................230
Шифрование симметричного ключа ..............................................230
Шифрование исторических фактов .......................................................231
Ограничьте распространение конфиденциальных фактов .................232
Правила распространения ...............................................................232
Доказательства .................................................................................233
Атаки и контрмеры .................................................................................234
Секретность .....................................................................................................235
Общий симметричный ключ ..................................................................236
Секретный канал для обсуждения ..................................................236
Создание секретного канала ...........................................................237
Командные правила распространения ...........................................238
Ограничение области применения общего ключа ...............................239
Когорты .............................................................................................239
Периоды ............................................................................................240
Глава 8. Шаблоны .........................................................................................242
Структурные шаблоны ...................................................................................242
Сущность ..................................................................................................243
Стр.12
12 Оглавление
Структура ..........................................................................................243
Пример ..............................................................................................244
Последствия ......................................................................................244
Связанные шаблоны ........................................................................244
Владение ..................................................................................................245
Структура ..........................................................................................245
Пример ..............................................................................................247
Последствия ......................................................................................248
Связанные шаблоны ........................................................................248
Удаление ...................................................................................................248
Структура ..........................................................................................249
Пример ..............................................................................................249
Последствия ......................................................................................250
Связанные шаблоны ........................................................................250
Восстановление .......................................................................................251
Структура ..........................................................................................251
Пример ..............................................................................................252
Последствия ......................................................................................253
Связанные шаблоны ........................................................................253
Членство ...................................................................................................253
Структура ..........................................................................................253
Пример ..............................................................................................254
Последствия ......................................................................................255
Связанные шаблоны ........................................................................256
Изменяемое свойство .............................................................................256
Структура ..........................................................................................256
Пример ..............................................................................................259
Последствия ......................................................................................260
Связанные шаблоны ........................................................................262
Ссылка на сущность.................................................................................262
Структура ..........................................................................................262
Пример ..............................................................................................263
Последствия ......................................................................................264
Связанные шаблоны ........................................................................265
Шаблоны рабочих процессов .........................................................................265
Транзакция ..............................................................................................266
Структура ..........................................................................................266
Пример ..............................................................................................267
Последствия ......................................................................................268
Связанные шаблоны ........................................................................268
Очередь ....................................................................................................268
Структура ..........................................................................................269
Пример ..............................................................................................269
Стр.13
Оглавление 13
Последствия ......................................................................................270
Связанные шаблоны ........................................................................271
Период ......................................................................................................271
Структура ..........................................................................................271
Пример ..............................................................................................272
Последствия ......................................................................................274
Связанные шаблоны ........................................................................274
Исходящие ...............................................................................................274
Структура ..........................................................................................275
Пример ..............................................................................................279
Последствия ......................................................................................280
Связанные шаблоны ........................................................................280
Проектирование на основе ограничений .....................................................281
ЧАСТЬ III. РЕАЛИЗАЦИЯ ..................................................................283
Глава 9. Инверсии запросов .....................................................................284
Механизация проблемы .................................................................................285
Анатомия запроса ..........................................................................................285
Последовательность шагов .....................................................................286
Фильтр по экзистенциальному состоянию............................................287
Затронутое множество ...................................................................................288
Вычисление затронутого набора ............................................................289
Инвертирование длинных запросов ......................................................290
Неудовлетворительные инверсии ..........................................................291
Движение назад ..............................................................................................292
Доказательство полноты .........................................................................293
Новые результаты ...........................................................................................294
Дальнейшая оптимизация ......................................................................295
Экзистенциальные условия ...........................................................................296
Рекурсивная инверсия ............................................................................297
Условия хвоста .........................................................................................298
Удаление результатов..............................................................................299
Когда удаление не является удалением .................................................301
Вложенные подзапросы .................................................................................302
Тавтологические условия ........................................................................304
Продолжение доказательства полноты .................................................306
Потенциальные и фактические изменения .................................................307
Удаление отсутствующих результатов ...................................................308
Кеши есть множества ..............................................................................308
Инверсия запросов на практике .............................................................309
Стр.14
14 Оглавление
Глава 10. Базы данных SQL ......................................................................310
Идентичность .................................................................................................311
Хранение с адресацией по содержанию ................................................311
Преимущества ..................................................................................312
Коллизии хешей................................................................................313
Вероятность коллизии хешей ..........................................................314
Избегайте использования хешей в качестве первичных ключей ......315
Структура таблицы ..................................................................................315
Отношения ......................................................................................................317
Вставка преемников ................................................................................318
Необязательные предшественники .......................................................318
Много предшественников ......................................................................319
Канонический хеш множества ........................................................320
Вставка многих предшественников ................................................321
Запросы ...........................................................................................................322
Соединения ..............................................................................................322
Коррелированные подзапросы ...............................................................323
Производные таблицы ............................................................................324
Выбор результатов...................................................................................325
Оптимизация ..................................................................................................326
Ложные соединения ................................................................................327
Охватывающие индексы .........................................................................328
Where Not Exists .......................................................................................328
Изменяемые свойства ......................................................................329
Удаление ...........................................................................................329
Очереди .............................................................................................330
Интеграция .....................................................................................................332
Интеграция унаследованных приложений ............................................333
Сканеры ............................................................................................333
Триггеры ...........................................................................................334
Захват изменений данных ..............................................................335
Создание отчетов из баз данных ............................................................335
Агностичные к приложениям хранилища ....................................................336
Общая таблица фактов ............................................................................337
Отношения предшественников ..............................................................338
Управление версиями .............................................................................339
Избегайте последовательных номеров версий ..............................340
Структурное версионирование .......................................................341
Глава 11. Коммуникация ...........................................................................343
Гарантии доставки ..........................................................................................343
Лучшие усилия .........................................................................................345
Подтверждение ........................................................................................345
Стр.15
Оглавление 15
Безопасные методы ..........................................................................346
Идемпотентные методы ..................................................................346
Неидемпотентные методы ..............................................................348
Повторная попытка в пределах соединения ..................................349
Долговечные протоколы .........................................................................349
Очереди .............................................................................................349
Темы ..................................................................................................350
Обработка сообщений ....................................................................................350
Большинство протоколов являются асинхронными ............................351
HTTP обычно является синхронным .....................................................351
Синхронизация данных .................................................................................352
В рамках организации ............................................................................353
Опорные точки .................................................................................353
Многие подписчики .........................................................................355
Ответы ...............................................................................................356
Уведомления .....................................................................................357
Между организациями ............................................................................358
Асинхронный через HTTP ...............................................................358
Webhook ............................................................................................359
Эмуляция REST .................................................................................360
Клиенты, подключающиеся время от времени .....................................361
Очередь на стороне клиента ............................................................362
Закладка на стороне клиента ..........................................................363
Выбор подмножества .......................................................................364
Предотвращение избыточных загрузок .........................................367
Глава 12. Генерируемое поведение ......................................................369
Проекции .........................................................................................................370
Определение проекций ...........................................................................370
Конвейеры проекций ..............................................................................372
Заинтересованность .......................................................................................373
Интерес к удаленным сущностям ..........................................................374
Интерес к прошлым периодам ...............................................................376
Совместное использование интересов ..................................................376
Потеря интереса ......................................................................................377
Неизменяемые среды выполнения ...............................................................379
Генерация модели ...................................................................................380
Выполнение запросов .............................................................................380
Тестирование ...........................................................................................381
Взаимодействие с пользователем ..........................................................382
Взаимодействие .......................................................................................383
Неизменяемые организации .........................................................................385
Основа для принятия решений ..............................................................385
Глобально распределенные системы .....................................................386
Стр.16