
Книга посвящена проектированию и последующему масштабированию сложных распределенных систем. В качестве конкретных примеров разобраны различные аспекты баз данных, микросервисов, событийно-ориентированных и потоковых систем. Уделено внимание NoSQL-подходу к проектированию баз данных, бессерверным вычислениям. Затронуты приемы обеспечения согласованности и репликации данных, в том числе при конкурентной обработке. Описываемые приемы рассчитаны, прежде всего, на быстрый рост объемов данных и на постепенное увеличение вычислительных мощностей и пропускной способности всей системы.
Для архитекторов и разработчиков программного обеспечения и баз данных
Создавать масштабируемые распределенные системы по определению сложно. А эта книга ощутимо упрощает их разработку.
Марк Ричардс, программный архитектор, основатель сайта DeveloperToArchitect.com
Основы и проектирование распределённых архитектур
Ключевые темы книги:
- Организация масштабируемых систем: архитектурные принципы, обеспечивающие стабильный рост систем, наращивание мощностей, распределение мощностей и хранилищ данных, конкурентная обработка данных. Предложены компромиссные архитектурные решения
- Проектирование масштабируемых сервисов: подробно об устройстве сервисов, кэшировании, асинхронном обмене сообщениями, бессерверной обработке, микросервисах
- Проектирование масштабируемых баз данных: основополагающие вопросы инженерии данных, работа с парадигмой NoSQL, согласованность в конечном счете и строгая согласованность
- Проектирование масштабируемых потоковых систем: исследование потоковой и событийно-ориентированной обработки данных
Книгу “Масштабирование систем. Основы и проектирование распределенных архитектур” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Благодарности. 11
Предисловие. 13
Почему именно масштабируемость?. 13
Для кого эта книга. 13
Чему вы научитесь. 14
Примечание для преподавателей. 15
Условные обозначения, используемые в этой книге. 15
Использование примеров программного кода. 15
Онлайн-обучение O’Reilly. 16
Как с нами связаться. 16
Благодарности от автора. 17
Часть I. Основы. 19
ГЛАВА 1. Введение в масштабируемые системы.. 21
Что такое масштабируемость?. 21
Примеры системного масштаба в начале 2000-х годов. 24
Краткая история роста систем. 25
Основные принципы проектирования с учетом масштабируемости. 28
Масштабируемость и затраты. 29
Компромисс между масштабируемостью и архитектурой. 32
Производительность. 32
Доступность. 33
Безопасность. 34
Управляемость. 35
Итоги и дополнительные материалы. 36
ГЛАВА 2. Архитектуры распределенных систем: введение. 37
Базовая архитектура системы. 37
Уменьшение масштаба. 39
Масштабирование базы данных с помощью кеширования. 41
Распределенная база данных. 43
Несколько уровней обработки. 45
Повышение скорости отклика. 47
Масштабируемость систем и оборудования. 49
Итоги и дополнительные материалы. 51
ГЛАВА 3. Основные сведения о распределенных системах. 53
Основы компьютерной сети. 53
Коммуникационное оборудование. 54
Коммуникационное программное обеспечение. 57
Вызов удаленного метода. 61
Частичные отказы. 67
Консенсус в распределенных системах. 72
Время в распределенных системах. 74
Итоги и дополнительные материалы. 76
ГЛАВА 4. Обзор конкурентных систем.. 78
В чем суть конкурентности?. 79
Потоки. 81
Порядок выполнения потока. 84
Проблемы с потоками. 86
Условия гонки. 86
Взаимоблокировки. 90
Состояния потока. 95
Координация потоков. 96
Пулы потоков. 99
Барьерная синхронизация. 102
Потокобезопасные коллекции. 104
Итоги и дополнительные материалы. 105
Часть II. Масштабируемые системы.. 107
ГЛАВА 5. Службы приложений. 109
Проектирование служб. 109
Интерфейс прикладного программирования (API) 109
Проектирование служб. 113
Управление службами. 116
Серверы приложений. 118
Горизонтальное масштабирование. 121
Балансировка нагрузки. 123
Политики распределения нагрузки. 125
Мониторинг рабочего состояния. 125
Эластичность. 126
Привязка сессий. 127
Итоги и дополнительные материалы. 129
ГЛАВА 6. Распределенное кеширование. 131
Кеширование приложений. 131
Веб-кеширование. 136
Заголовок Cache-Control 138
Заголовки Expires и Last-Modified. 138
Директива Etag. 139
Итоги и дополнительные материалы. 141
ГЛАВА 7. Асинхронный обмен сообщениями. 143
Введение в обмен сообщениями. 144
Примитивы обмена сообщениями. 144
Сохранение сообщения. 146
Публикация-подписка. 146
Репликация сообщений. 148
Брокер сообщений RabbitMQ.. 149
Сообщения, обмены и очереди. 149
Распространение и конкурентность. 151
Компромиссы безопасности данных и производительности. 155
Компромиссы доступности и производительности. 156
Шаблоны обмена сообщениями. 157
Конкурирующие потребители. 157
Однократная обработка. 158
Вредоносные сообщения. 159
Итоги и дополнительные материалы. 160
ГЛАВА 8. Бессерверные системы обработки. 162
Привлекательность бессерверности. 162
Google App Engine. 164
Общие сведения. 164
Стандартная среда GAE. 165
Автомасштабирование. 166
AWS Lambda. 167
Жизненный цикл лямбда-функции. 168
Соображения по выполнению.. 169
Масштабируемость. 170
Практический пример: баланс производительности и затрат. 173
Выбор значений параметров. 173
Исследование параметров автоматического масштабирования GAE. 174
Результаты. 175
Итоги и дополнительные материалы. 176
ГЛАВА 9. Микросервисы.. 178
Переход к микросервисам. 179
Монолитные приложения. 179
Разрушая монолит. 181
Развертывание микросервисов. 183
Принципы работы микросервисов. 185
Устойчивость микросервисов. 187
Каскадные сбои. 188
Шаблон переборки. 194
Итоги и дополнительные материалы. 196
Часть III. Масштабируемые распределенные базы данных. 199
ГЛАВА 10. Главное о масштабируемых базах данных. 201
Распределенные базы данных. 201
Масштабирование реляционных баз данных. 202
Вертикальное масштабирование. 203
Горизонтальное масштабирование: реплики чтения. 204
Горизонтальное масштабирование: секционирование данных. 205
Пример: Oracle RAC. 207
Переход на NoSQL. 209
Модели данных NoSQL. 212
Языки запросов. 214
Распределение данных. 215
Теорема CAP. 219
Итоги и дополнительные материалы. 220
ГЛАВА 11. Согласованность в конечном счете. 222
Что такое согласованность в конечном счете?. 222
Окно несогласованности. 223
Чтение своих собственных записей. 224
Настраиваемая согласованность. 225
Кворум чтения и записи. 227
Восстановление реплики. 230
Активное восстановление. 230
Пассивное восстановление. 231
Разрешение конфликтов. 232
Побеждает последний записывающий. 232
Векторы версий. 234
Итоги и дополнительные материалы. 238
ГЛАВА 12. Высокая согласованность. 239
Высокая согласованность: введение. 240
Модели согласованности. 242
Распределенные транзакции. 243
Двухфазная фиксация. 244
Режимы сбоя 2PC. 246
Распределенный консенсусный алгоритм. 248
Алгоритм Raft 250
Выборы ведущего. 252
Высокая согласованность на практике. 254
VoltDB. 254
Google Cloud Spanner 257
Итоги и дополнительные материалы. 260
ГЛАВА 13. Имплементации распределенных баз данных. 262
Redis 263
Модель данных и API 263
Распределение и репликация. 265
Сильные и слабые стороны. 267
MongoDB. 268
Модель данных и API 269
Распределение и репликация. 271
Сильные и слабые стороны. 275
Amazon DynamoDB. 276
Модель данных и API 278
Распределение и репликация. 280
Сильные и слабые стороны. 282
Итоги и дополнительные материалы. 284
Часть IV. Обработка событий и потоков. 287
ГЛАВА 14. Масштабируемая обработка, управляемая событиями. 289
Событийно управляемые архитектуры. 289
Apache Kafka. 292
Топики. 293
Производители и потребители. 294
Масштабируемость. 297
Доступность. 301
Итоги и дополнительные материалы. 302
ГЛАВА 15. Системы потоковой обработки. 304
Введение в потоковую обработку. 305
Платформы потоковой обработки. 308
Пример: Apache Flink. 310
API DataStream.. 311
Масштабируемость. 313
Безопасность данных. 316
Итоги и дополнительные материалы. 317
ГЛАВА 16. Еще несколько полезных советов. 319
Автоматизация. 320
Наблюдаемость. 321
Платформы развертывания. 322
“Озера” данных. 323
Итоги и дополнительные материалы. 324
Об авторе. 325
Об изображении на обложке. 326
Предметный указатель. 327

Иэн Гортон (Ian Gorton) на протяжении более 30 лет занимается программной архитектурой. Со времен аспирантуры его научные интересы касаются, прежде всего, распределенных вычислительных систем в банковском секторе, телекоммуникациях, государственном управлении, здравоохранении, научном моделировании. Автор книг «Essential Software Architecture» (Springer) и Data-Intensive Computing (Cambridge University Press), а также более 200 научных и отраслевых статей по программной архитектуре и программной инженерии.
