Опубликовано

Новинка: “Принципы модернизации программных архитектур”

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

Книгу “Принципы модернизации программных архитектур: построение архитектур на основе микросервисов, монолитов и распределенных монолитов” можно купить в нашем интенет-магазине.

Об авторах……………………………………………………………………………………………… 15

О рецензенте………………………………………………………………………………………….. 17

Благодарности……………………………………………………………………………………….. 18

Предисловие…………………………………………………………………………………………… 19

Почему мы написали эту книгу?………………………………………………………………………………………………. 19

Комплект кодов и цветных изображений………………………………………………………………………………… 21

Глава 1. Что не так с монолитами?………………………………………………………… 23

Структура главы………………………………………………………………………………………………………………………… 24

Что такое монолиты?…………………………………………………………………………………………………………………. 25

Большая кодовая база……………………………………………………………………………………………………….. 26

Несколько модулей развертывания………………………………………………………………………………….. 26

Другие особенности монолита…………………………………………………………………………………………. 27

Централизация………………………………………………………………………………………………………….. 27

Неновый…………………………………………………………………………………………………………………….. 28

Имеет ли значение размер?……………………………………………………………………………………………….. 29

Неувязки с монолитами…………………………………………………………………………………………………………….. 31

Шаблоны в разработке программного обеспечения………………………………………………………………. 33

Что такое антипаттерн?…………………………………………………………………………………………………….. 34

Жизнь с монолитами: антипаттерны, побочные эффекты и усилители……………………………….. 34

Антипаттерны монолитов…………………………………………………………………………………………………. 34

Высокая степень связности………………………………………………………………………………………. 35

Неправильные абстракции………………………………………………………………………………………. 36

Отсутствие изоляции………………………………………………………………………………………………… 37

Побочные эффекты монолитов…………………………………………………………………………………………. 38

Сложность развертывания……………………………………………………………………………………….. 38

Недостаточный уровень тестирования…………………………………………………………………… 40

Отсутствие владельца………………………………………………………………………………………………. 40

Медленное внедрение новых технологий………………………………………………………………. 41

Медленный цикл разработки…………………………………………………………………………………… 44

Автоматизация и антипаттерны……………………………………………………………………………………….. 45

Усилители…………………………………………………………………………………………………………………………… 46

Разбитые окна / копирование и вставка………………………………………………………………….. 46

Зависть к микросервисам…………………………………………………………………………………………. 49

Нехватка квалифицированных специалистов……………………………………………………….. 49

Страх перемен…………………………………………………………………………………………………………… 51

Все ли монолиты плохие?…………………………………………………………………………………………………………. 51

Монолиты — это форма архитектуры программного обеспечения……………………………… 52

Преимущества монолитов…………………………………………………………………………………………………………. 53

Влияние рефакторинга и изменений…………………………………………………………………………………. 53

Упрощение некоторых миграций……………………………………………………………………………………… 54

Хорошая отправная точка………………………………………………………………………………………………… 54

Упрощенная инфраструктура…………………………………………………………………………………………… 54

Типы монолитов…………………………………………………………………………………………………………………………. 54

Классические, распределенные и модульные монолиты……………………………………………….. 54

Модульные монолиты: хороший вид монолита……………………………………………………………… 56

Модульные монолиты: Istio………………………………………………………………………………………………. 58

Модульные монолиты: мобильные суперприложения…………………………………………………… 60

Можно ли избежать плохих монолитов?…………………………………………………………………………………. 61

Что нужно запомнить………………………………………………………………………………………………………………… 64

Глава 2. Антипаттерны: отсутствие изоляции………………………………………… 67

Структура главы………………………………………………………………………………………………………………………… 67

Что такое изоляция?…………………………………………………………………………………………………………………… 69

Изоляция в программном обеспечении……………………………………………………………………………………. 70

Соблазны изоляции……………………………………………………………………………………………………………………. 71

Внешнее воздействие…………………………………………………………………………………………………………. 71

Существующий компонент, BFF……………………………………………………………………………… 74

Существующий компонент, изменение существующей конечной точки…………….. 74

Существующий сервис, добавление новой конечной точки…………………………………. 75

Новый сервис, общий доступ к базе данных………………………………………………………….. 75

Что такое бэкенд для фронтенда (BFF)?…………………………………………………………………. 77

Новый сервис, общий доступ к данным………………………………………………………………….. 77

Что такое обработка событий?……………………………………………………………………………….. 77

Обработка событий в программном обеспечении…………………………………………………. 78

CQRS и ее связь с ES…………………………………………………………………………………………………. 80

Новый сервис, общий доступ через API………………………………………………………………….. 80

Централизация……………………………………………………………………………………………………………………. 81

Преимущества централизации инженерных команд…………………………………………….. 81

Проблемы, связанные с чрезмерной централизацией……………………………………………. 82

Проблемы с поставками и инновациями…………………………………………………………………. 82

Централизация в сравнении со стандартизацией для обеспечения наблюдаемости и развертывания          84

Плохие общие библиотеки……………………………………………………………………………………….. 85

Разрушение изоляции………………………………………………………………………………………………………………… 85

Совместное использование баз данных…………………………………………………………………………… 85

Когда можно использовать базы данных совместно?…………………………………………… 88

Базы данных приложений для совместного использования в Big Data……………….. 88

Скрытые контракты и сохранение изоляции………………………………………………………….. 90

Интеграция с устаревшими системами…………………………………………………………………… 91

Общие библиотеки……………………………………………………………………………………………………………… 91

Бинарная связь………………………………………………………………………………………………………….. 92

Отсутствие стабильных контрактов…………………………………………………………………………………. 94

Повышение сложности…………………………………………………………………………………………………….. 100

Детализация и распространение: побочные эффекты………………………………………… 101

Давайте изолируем всё……………………………………………………………………………………………………………. 104

Базы данных…………………………………………………………………………………………………………………….. 104

Общие библиотеки…………………………………………………………………………………………………………… 104

Стабильные контракты……………………………………………………………………………………………………. 104

Насыщенные модули и философия проектирования программного обеспечения…….. 105

Операционные системы и инфраструктура…………………………………………………………………… 106

Расширенная изоляция…………………………………………………………………………………………………….. 107

Сооружение переборок и изоляция сбоев…………………………………………………………….. 107

Резервные варианты……………………………………………………………………………………………….. 110

Изоляция пользовательского опыта: деградация и изыскания…………………………… 111

Как предотвратить проблемы с изоляцией……………………………………………………………………………. 113

Обзор конструкций и оснастки……………………………………………………………………………………….. 113

Что нужно запомнить………………………………………………………………………………………………………………. 114

Глава 3. Антипаттерны: распределенные монолиты…………………………….. 116

Структура главы……………………………………………………………………………………………………………………… 116

Что такое распределенный монолит?……………………………………………………………………………………. 118

Особенности распределенных монолитов…………………………………………………………………….. 118

Как создаются распределенные монолиты?…………………………………………………………………………. 119

Совместное использование баз данных разными сервисами………………………………………. 120

Общие библиотеки доступа к данным……………………………………………………………………………. 122

Общие контракты…………………………………………………………………………………………………………….. 123

Проблемы с распределенными монолитами…………………………………………………………………………. 124

Бинарная связь…………………………………………………………………………………………………………………. 124

Временнáя взаимосвязь……………………………………………………………………………………………………. 125

Повышение сложности…………………………………………………………………………………………… 126

Внедрение асинхронности с архитектурой, управляемой событиями………………. 127

Уязвимости и исправления в системе безопасности……………………………………………………… 130

Тестирование……………………………………………………………………………………………………………………. 130

Проблемы с управлением………………………………………………………………………………………………… 132

Проблемы с логикой………………………………………………………………………………………………………… 133

Усилители…………………………………………………………………………………………………………………………………. 134

Размывание команды……………………………………………………………………………………………………….. 134

Владелец программного обеспечения………………………………………………………………….. 136

Антинаучное мышление………………………………………………………………………………………………….. 137

Новые функции и исправление багов…………………………………………………………………………….. 138

Мины………………………………………………………………………………………………………………………… 141

Плохая среда……………………………………………………………………………………………………………………. 142

Типы распределенных монолитов…………………………………………………………………………………………. 143

Серверная часть……………………………………………………………………………………………………………….. 144

BFF и интерфейс……………………………………………………………………………………………………………….. 144

Бессерверная архитектура……………………………………………………………………………………………… 145

Сложность бессерверных архитектур………………………………………………………………….. 147

Обратный эффект: снова хуже!………………………………………………………………………………………………. 149

Архитекторы как контролеры не масштабируются……………………………………………………… 149

Новые возможности/функции…………………………………………………………………………………………. 150

Новая таблица………………………………………………………………………………………………………………….. 151

Устаревшая технология…………………………………………………………………………………………………… 151

Предотвращение дальнейших повреждений…………………………………………………………………………. 152

Подумайте о возвращении к монолиту………………………………………………………………………….. 152

Советы по команде и процессу……………………………………………………………………………… 152

Советы по технологиям и архитектуре программного обеспечения…………………. 153

Что нужно запомнить………………………………………………………………………………………………………………. 154

Глава 4. Антипаттерны: внутренние общие библиотеки………………………. 157

Структура главы……………………………………………………………………………………………………………………… 157

Что такое библиотека?……………………………………………………………………………………………………………. 159

Типы библиотек……………………………………………………………………………………………………………………….. 160

Библиотеки и фреймворки……………………………………………………………………………………………….. 161

Проблемы с библиотеками……………………………………………………………………………………………………… 162

Постоянные миграции……………………………………………………………………………………………………… 162

Отсутствие стабильных контрактов………………………………………………………………………………. 162

Бинарная связь / сломанная изоляция……………………………………………………………………………. 163

Стимулы для создания библиотек………………………………………………………………………………….. 164

Антипаттерн: фреймворк…………………………………………………………………………………………………. 165

В защиту библиотек………………………………………………………………………………………………………………… 167

Производительность………………………………………………………………………………………………………… 168

Путь к надежности…………………………………………………………………………………………………………… 168

Языковые идиомы…………………………………………………………………………………………………………….. 168

Централизация кода………………………………………………………………………………………………………… 169

Перестаньте заново изобретать велосипед……………………………………………………………………. 169

Подводные камни — неправильные методы, которых следует избегать…………………………… 170

Внутренние общие библиотеки………………………………………………………………………………………. 170

Эффект короткого одеяла………………………………………………………………………………………………… 170

Большие фреймворки……………………………………………………………………………………………………….. 171

Раздутые библиотеки………………………………………………………………………………………………………. 172

Очень популярные библиотеки………………………………………………………………………………………. 172

Библиотеки доставки конфигурации……………………………………………………………………………… 172

Размывание команды в общих библиотеках…………………………………………………………………. 173

Драйверы сервисов…………………………………………………………………………………………………. 174

Утилиты…………………………………………………………………………………………………………………………….. 176

Обёртки……………………………………………………………………………………………………………………………… 177

Расширение……………………………………………………………………………………………………………… 177

Новые абстракции………………………………………………………………………………………………….. 178

Отсутствие управления……………………………………………………………………………………………………. 179

Улучшенные возможности……………………………………………………………………………………………………… 180

Когда нам следует создавать библиотеку?…………………………………………………………………… 180

Когда нам не следует создавать библиотеку?………………………………………………………………. 181

Использование сервисов………………………………………………………………………………………………….. 182

Отсутствие бинарной связи……………………………………………………………………………………. 182

Значительно улучшенная гибкость………………………………………………………………………. 182

Простая миграция или отсутствие миграции……………………………………………………….. 183

Критический уровень надежности………………………………………………………………………… 183

В некоторых случаях производительность………………………………………………………….. 184

Паттерн Sidecar………………………………………………………………………………………………………………… 186

Современный Sidecar………………………………………………………………………………………………. 186

Sidecar и прокси………………………………………………………………………………………………………. 189

Sidecar и Kubernetes………………………………………………………………………………………………… 190

Как можно построить Sidecar? Типы Sidecar………………………………………………………… 193

Сетки сервисов………………………………………………………………………………………………………… 195

Простые альтернативы……………………………………………………………………………………………………. 196

Использовать существующие пакеты SDK и библиотеки…………………………………… 196

Сделать это самостоятельно…………………………………………………………………………………. 196

Скопировать и вставить код…………………………………………………………………………………… 197

Внести свой вклад в работу с открытым исходным кодом…………………………………. 197

Правильная конструкция библиотеки……………………………………………………………………………………. 197

Дублирование против повторного использования……………………………………………………….. 197

Плохое дублирование: бизнес-код………………………………………………………………………… 197

Плохое дублирование: выполнение……………………………………………………………………… 198

Хорошее дублирование: миграция……………………………………………………………………….. 198

Хорошее дублирование: конфигурация и код установки……………………………………. 198

Повторное использование: палка о двух концах…………………………………………………. 199

Грамотное управление зависимостями………………………………………………………………………….. 200

Сливки зависимостей……………………………………………………………………………………………… 201

Избегайте использования родительского POM……………………………………………………. 203

Объявляйте зависимости явно……………………………………………………………………………….. 204

Экономичные библиотеки……………………………………………………………………………………………….. 204

Спектр возможностей………………………………………………………………………………………………………………. 205

Что нужно запомнить………………………………………………………………………………………………………………. 206

Глава 5. Оценка…………………………………………………………………………………… 209

Структура главы……………………………………………………………………………………………………………………… 209

Что такое оценка?……………………………………………………………………………………………………………………. 211

Зачем проводить оценку?……………………………………………………………………………………………………….. 211

Типичные проекты модернизации………………………………………………………………………………….. 212

Успешные проекты модернизации…………………………………………………………………………………. 212

Мотивация……………………………………………………………………………………………………………….. 213

Оценка……………………………………………………………………………………………………………………… 214

Следите за конусом неопределенности………………………………………………………………… 215

Технологические и бизнес-потребности……………………………………………………………….. 216

Стратегия модернизации……………………………………………………………………………………….. 217

Гибкий процесс разработки…………………………………………………………………………………… 217

Решения и компромиссы………………………………………………………………………………………………………….. 218

Создание или покупка……………………………………………………………………………………………………… 218

Обоснование покупки…………………………………………………………………………………………….. 219

Обоснование создания……………………………………………………………………………………………. 219

Переписывание или рефакторинг…………………………………………………………………………………… 221

Сила обратной совместимости………………………………………………………………………………………………. 225

Элементы надлежащей оценки………………………………………………………………………………………………. 227

Масштабный анализ кода………………………………………………………………………………………………. 227

Классификация и принятие решений…………………………………………………………………….. 229

Владелец………………………………………………………………………………………………………………….. 230

Скорость изменения бизнеса………………………………………………………………………………….. 231

Публичные контракты……………………………………………………………………………………………. 232

Нижестоящие зависимости…………………………………………………………………………………….. 233

Вышестоящие зависимости……………………………………………………………………………………. 234

Код ориентирован на пользователя?……………………………………………………………………. 234

Сложность……………………………………………………………………………………………………………….. 234

Уровень прохождения / покрытие тестами…………………………………………………………… 236

Анализ базы данных………………………………………………………………………………………………………… 236

Классификация уровня независимости…………………………………………………………………. 237

Классический монолит…………………………………………………………………………………………… 237

Микросервисы или надлежащие сервисы…………………………………………………………….. 237

Распределенный монолит………………………………………………………………………………………. 238

Различные фреймворки доступа к данным…………………………………………………………… 238

Изолированные схемы……………………………………………………………………………………………. 238

Изолированные таблицы……………………………………………………………………………………….. 239

Сопоставление бизнес-областей…………………………………………………………………………………….. 239

Список всех бизнес областей…………………………………………………………………………………. 241

Помещение системы в карантин……………………………………………………………………………. 242

Результаты оценки…………………………………………………………………………………………………………………… 243

Быстрые результаты………………………………………………………………………………………………………… 243

Определение приоритетов, ожиданий и стратегии……………………………………………………….. 244

Влияние на бизнес в сравнении с затраченными усилиями…………………………………………. 245

Порядок действий…………………………………………………………………………………………………………….. 247

Радикальные изменения…………………………………………………………………………………………………… 248

Что нужно запомнить………………………………………………………………………………………………………………. 249

Глава 6. Принципы надлежащего предоставления сервисов………………… 252

Структура главы……………………………………………………………………………………………………………………… 252

Сервис-ориентированная архитектура…………………………………………………………………………………. 253

Типы сервисов………………………………………………………………………………………………………………….. 254

Когда следует использовать сервисы…………………………………………………………………………….. 255

Когда следует отказаться от сервисов…………………………………………………………………………… 256

Преимущества SOA………………………………………………………………………………………………………….. 256

Сокращение сроков вывода на рынок…………………………………………………………………… 257

Сокращение затрат и упрощение обслуживания………………………………………………… 260

Расширяемость и адаптивность…………………………………………………………………………….. 263

Независимость………………………………………………………………………………………………………… 263

Краткое описание преимуществ SOA……………………………………………………………………. 265

Вначале контракт……………………………………………………………………………………………………………………. 268

Новый сервис……………………………………………………………………………………………………………………. 268

Существующий компонент……………………………………………………………………………………………… 269

Кодирование контракта с помощью OpenAPI………………………………………………………………. 270

Обратная совместимость…………………………………………………………………………………………………. 272

SOA и изоляция………………………………………………………………………………………………………………………… 276

Изоляция хранилищ данных…………………………………………………………………………………………… 277

Изоляция библиотек…………………………………………………………………………………………………………. 279

Противопоставление вкусов и мостов в библиотеках и монолитах…………………… 282

Изоляция публичных контрактов…………………………………………………………………………………… 286

Анализ проекта……………………………………………………………………………………………………….. 289

Автоматизация работоспособности контрактов…………………………………………………. 290

Неочевидные моменты…………………………………………………………………………………………… 291

Обработка ошибок в контрактах…………………………………………………………………………… 293

Доступность сервиса………………………………………………………………………………………………. 294

Что нужно запомнить………………………………………………………………………………………………………………. 296

Глава 7. Надлежащее тестирование сервисов……………………………………….. 301

Структура главы……………………………………………………………………………………………………………………… 301

Зачем нужно тестирование?…………………………………………………………………………………………………… 303

Корректность……………………………………………………………………………………………………………………. 304

Влияние изменений………………………………………………………………………………………………………….. 304

Готовность к эксплуатации…………………………………………………………………………………………….. 304

Особенности тестов программного обеспечения………………………………………………………………….. 305

Типы тестов………………………………………………………………………………………………………………………. 305

Признаки плохих тестов………………………………………………………………………………………………………….. 307

Непоследовательная частота отказов…………………………………………………………………………… 307

Хрупкость при рефакторинге………………………………………………………………………………………….. 308

Зависимость от данных…………………………………………………………………………………………………… 309

Неэффективные циклы тестирования……………………………………………………………………. 309

Постоянная настройка тестов…………………………………………………………………………………………. 310

Независимость тестов……………………………………………………………………………………………………… 310

Характеристики хороших тестов…………………………………………………………………………………………… 311

Постоянная вероятность успеха…………………………………………………………………………………….. 312

Устойчивость к рефакторингу………………………………………………………………………………………… 312

Изоляция зависимости от данных…………………………………………………………………………………… 313

Прямые входные данные………………………………………………………………………………………… 314

Внутренние состояния……………………………………………………………………………………………. 314

Быстрые циклы обратной связи……………………………………………………………………………………… 315

Самостоятельные тесты………………………………………………………………………………………………….. 315

Автономные тесты……………………………………………………………………………………………………………. 315

Манифест тестирования………………………………………………………………………………………………………….. 318

Тестирование на всем протяжении важнее, чем в конце………………………………………………. 318

Предотвращение ошибок важнее, чем их поиск……………………………………………………………. 319

Понимание при тестировании важнее, чем проверка функциональности………………….. 319

Создание наилучшей системы важнее, чем ее разрушение…………………………………………. 320

Ответственность команды за качество важнее, чем ответственность тестировщика… 320

Разнообразие тестирования……………………………………………………………………………………………………. 320

Почему тестирование важно для архитектуры программного обеспечения……………… 320

Лучшие практики тестирования сервисов……………………………………………………………………… 321

Практическое стресс-тестирование……………………………………………………………………………….. 322

Gatling для тестирования производительности……………………………………………………. 323

Пирамида тестирования………………………………………………………………………………………………….. 324

Стратегии для тестирования на продуктиве…………………………………………………………………. 326

Пограничный маршрутизатор……………………………………………………………………………….. 328

Пользователи бета-версии……………………………………………………………………………………… 329

Аудит в реальном времени / сравнение и сброс результатов……………………………… 330

Воспроизведение трафика……………………………………………………………………………………… 332

Хаотическое тестирование……………………………………………………………………………………………… 333

«Обезьянья армия» Netflix………………………………………………………………………………………. 336

Toxiproxy…………………………………………………………………………………………………………………. 337

Матрицы отказоустойчивости………………………………………………………………………………. 338

Внутреннее состояние — продвинутое глубокое погружение…………………………………….. 339

Генерация синтетических данных………………………………………………………………………… 340

Тестирование интерфейсов……………………………………………………………………………………. 341

Настройка тестовых данных…………………………………………………………………………………. 343

Макетирование интерфейсов…………………………………………………………………………………. 344

Что нужно запомнить………………………………………………………………………………………………………………. 345

Глава 8. Внедрение новых технологий…………………………………………………. 348

Структура главы……………………………………………………………………………………………………………………… 348

Применяем новые принципы…………………………………………………………………………………………………… 349

Ресурсы по требованию — облачные вычисления………………………………………………………………. 350

Стабильные контракты……………………………………………………………………………………………………. 352

Надлежащая изоляция…………………………………………………………………………………………………….. 353

Одна учетная запись на сервис………………………………………………………………………………………. 355

Одна учетная запись для каждой бизнес-области………………………………………………………… 358

Одна учетная запись для всего……………………………………………………………………………………….. 359

Организация учетных записей влияет на степень детализации контрактов………………. 359

Внутренние общие библиотеки………………………………………………………………………………………. 360

Бессерверность…………………………………………………………………………………………………………………. 361

Влияние облака на организацию работы команды……………………………………………………… 362

Готовые возможности — облачные сервисы и SaaS……………………………………………………………. 362

Реляционные хранилища данных и хранилища данных NoSQL………………………………… 363

Искусственный интеллект и аналитика…………………………………………………………………………. 365

Изолированные модули развертывания………………………………………………………………………………… 366

Контейнеры и Kubernetes………………………………………………………………………………………………… 366

Облачный спектр……………………………………………………………………………………………………………… 371

Доступ к потоковой передаче данных в режиме реального времени…………………………………. 374

Apache Kafka……………………………………………………………………………………………………………………. 374

Архитектура Kafka………………………………………………………………………………………………………….. 376

Kafka и CQRS/ES……………………………………………………………………………………………………………… 378

База данных ksqlDB…………………………………………………………………………………………………………. 380

Эффективные инженеры………………………………………………………………………………………………………….. 381

Современные языки программирования………………………………………………………………………… 382

Спектр языков программирования…………………………………………………………………………………. 383

Языки программирования JVM………………………………………………………………………………………. 385

Гибкие модели данных……………………………………………………………………………………………………………. 386

Базы данных NoSQL………………………………………………………………………………………………………… 386

Выход за рамки реляционной модели……………………………………………………………………………. 389

Бережливые коммуникации — бинарные API и GraphQL……………………………………………………. 391

Взаимодействие между сервисами: REST, gRPC и GraphQL……………………………………….. 391

Что в REST получилось правильным……………………………………………………………………………… 392

Совместимость в сравнении с производительностью…………………………………………………… 394

GraphQL…………………………………………………………………………………………………………………………….. 394

Фреймворк gRPC………………………………………………………………………………………………………………. 397

Что нужно запомнить………………………………………………………………………………………………………………. 399

Глава 9. Миграция кода……………………………………………………………………….. 403

Структура главы……………………………………………………………………………………………………………………… 403

Почему миграция кода имеет такое значение?……………………………………………………………………… 404

Инвентаризация, варианты использования и POC………………………………………………………… 406

Красная миграция в сравнении с зеленой……………………………………………………………………………… 408

Элементы надлежащей миграции кода…………………………………………………………………………………. 409

Цель миграции………………………………………………………………………………………………………………….. 409

Сложность………………………………………………………………………………………………………………………… 412

Влияние на клиентов — онлайн и офлайн…………………………………………………………………….. 416

Онлайн-режим миграции………………………………………………………………………………………… 417

Офлайн-режим миграции……………………………………………………………………………………….. 417

Команда сервисов по сравнению с командой платформы…………………………………………… 419

Шаблоны миграции кода………………………………………………………………………………………………………… 421

Обратная совместимость…………………………………………………………………………………………………. 421

Отложенная миграция……………………………………………………………………………………………………… 421

Strangler Fig……………………………………………………………………………………………………………………….. 424

Преобразование классического монолита в надлежащий SOA…………………………. 425

Преобразование классического монолита в модульный монолит…………………….. 428

Преобразование распределенного монолита в надлежащий SOA…………………….. 429

Двусторонние двери Amazon………………………………………………………………………………………….. 433

Препятствия при миграции……………………………………………………………………………………………………… 433

Препятствие — остаточные явления………………………………………………………………………………. 433

Удвоение усилий по инвентаризации и проверке концепций……………………………… 434

Распределенные миграции и зависимость от команды……………………………………….. 434

Повторение, повторение, повторение……………………………………………………………………. 434

Препятствия — трения и энтропия…………………………………………………………………………………. 434

Препятствия — высокие WIP-лимиты, давление бизнеса, соблюдение требований и другие ловушки     435

Пост-миграционный период……………………………………………………………………………………………………. 436

Стратегии отката……………………………………………………………………………………………………………… 436

Что нужно запомнить………………………………………………………………………………………………………………. 437

Глава 10. Миграция данных………………………………………………………………… 440

Структура главы……………………………………………………………………………………………………………………… 440

Риски миграции данных………………………………………………………………………………………………………….. 441

Подготовка миграции данных………………………………………………………………………………………………… 442

Инвентаризация и анализ………………………………………………………………………………………………… 442

Планирование и определение быстрых выигрышей…………………………………………………….. 446

Шаблоны миграции данных…………………………………………………………………………………………………… 448

Повторный просмотр отложенных миграций……………………………………………………………….. 448

Экспорт и импорт…………………………………………………………………………………………………………….. 450

Репликация базы данных………………………………………………………………………………………………… 452

Сравнение таблиц……………………………………………………………………………………………………………. 454

Триггеры……………………………………………………………………………………………………………………………. 455

Захват изменения данных……………………………………………………………………………………………….. 456

Двойная запись…………………………………………………………………………………………………………………. 458

Незавершенные данные…………………………………………………………………………………………. 459

Сбой при выполнении одной операции записи……………………………………………………. 459

Задержка и сложность транзакций……………………………………………………………………….. 460

Стратегии миграции данных………………………………………………………………………………………………….. 460

Онлайн или офлайн………………………………………………………………………………………………………….. 461

Вначале схема или несколько миграций……………………………………………………………………….. 461

Пересмотр: Strangler Fig…………………………………………………………………………………………………… 462

Классические монолиты, Strangler Fig и миграция данных…………………………………. 463

Выполнение миграции…………………………………………………………………………………………………………….. 465

Тестирование……………………………………………………………………………………………………………………. 466

Проверка работоспособности перед миграцией…………………………………………………………… 466

Тестирование производительности………………………………………………………………………………… 468

Практическое тестирование производительности базы данных
с помощью NDBench………………………………………………………………………………………………………… 469

Проверка работоспособности: структура и данные после миграции………………………… 470

Наблюдаемость……………………………………………………………………………………………………………….. 470

После миграции данных………………………………………………………………………………………………………….. 474

Охота на призраков…………………………………………………………………………………………………………. 474

Очистка и вывод из эксплуатации………………………………………………………………………………….. 476

Что нужно запомнить………………………………………………………………………………………………………………. 476

Глава 11. Эпилог………………………………………………………………………………….. 481

Структура главы……………………………………………………………………………………………………………………… 481

На бис!………………………………………………………………………………………………………………………………………. 481

Принципы важнее всего…………………………………………………………………………………………………………… 483

Образование…………………………………………………………………………………………………………………………….. 484

Городское планирование………………………………………………………………………………………………………… 485

Концепция………………………………………………………………………………………………………………………………… 487

Далее…………………………………………………………………………………………………………………………………………. 488

Предметный указатель…………………………………………………………………………. 489

Добавить комментарий