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

Встречайте: “Масштабирование систем. Основы и проектирование распределенных архитектур”

Масштабирование систем

Книга посвящена проектированию и последующему масштабированию сложных распределенных систем. В качестве конкретных примеров разобраны различные аспекты баз данных, микросервисов, событийно-ориентированных и потоковых систем. Уделено внимание 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

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

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