Современный мир попросту немыслим без использования распределенных систем. Даже у простейшего мобильного приложения есть API, через который оно подключается к облачному хранилищу. Однако, проектирование распределенных систем до сих пор остается искусством, а не точной наукой. Необходимость подвести под нее серьезный базис назрела давно, и, если вы хотите обрести уверенность в создании, поддержке и эксплуатации распределенных систем - начните с этой книги!
Брендан Бёрнс, авторитетнейший специалист по облачным технологиям и Kubernetes, излагает в этой небольшой работе абсолютный минимум, необходимый для правильного проектирования распределенных систем. Эта книга описывает неустаревающие паттерны проектирования распределенных систем. Она поможет вам не только создавать такие системы с нуля, но и эффективно переоборудовать уже имеющиеся.
Предисловие ..................................................................................12
Кому стоит прочесть эту книгу .....................................................12
Зачем я написал эту книгу ...........................................................12
Современный мир распределенных систем ..................................13
Как ориентироваться в книге .......................................................14
Условные обозначения ................................................................15
Онлайн-ресурсы ..........................................................................16
Использование примеров кода ....................................................16
Благодарности .............................................................................17
Глава 1. Введение .........................................................................18
Краткая история разработки систем ............................................19
Краткая история паттернов проектирования в разработке ПО .....21
Формализация алгоритмического программирования ........21
Паттерныв объектно-ориентированном
программировании ........................................................22
Расцвет программного обеспечения с открытым
исходным кодом ................................................................23
Ценность паттернов, практик и компонентов ...............................24
Стоя на плечах гигантов ...................................................24
Общий язык обсуждения подходов к разработке ...............25
Общие повторно используемые компоненты .....................26
Резюме ........................................................................................27
Часть I. Одноузловые паттерны проектирования
Мотивация ...................................................................................30
Резюме ........................................................................................32
Глава 2. Паттерн Sidecar ...............................................................34
Пример реализации паттерна Sidecar. Добавление
возможности HTTPS-соединения к унаследованному сервису ......35
Динамическая конфигурация с помощью паттерна Sidecar ..........36
Модульные контейнеры приложений ...........................................39
Практикум. Развертывание контейнера topz ......................40
Создание простейшего PaaS-сервиса на основе
паттерна Sidecar ................................................................42
Разработка модульных и повторно используемых
реализаций паттерна Sidecar .......................................................43
Параметризованные контейнеры .......................................44
Определение API всех контейнеров ..................................45
Документирование контейнеров........................................47
Резюме ........................................................................................49
Глава 3. Паттерн Ambassador ........................................................50
Использование паттерна Ambassador
для шардирования сервиса ...................................................51
Практикум. Шардируем Redis-хранилище ..........................54
Использование паттерна Ambassador для реализации
сервиса-посредника.....................................................................57
Использование паттерна Ambassador для проведения
экспериментов и разделения запросов ........................................59
Практикум. Реализация 10%-ных экспериментов ..............60
Глава 4. Адаптеры .........................................................................64
Мониторинг .................................................................................66
Практикум. Мониторинг с помощью Prometheus ................67
Ведение журналов .......................................................................69
Практикум. Нормализация форматов журналов
с помощью fluentd .............................................................70
Мониторинг работоспособности сервисов ....................................72
Практикум. Комплексный мониторинг
работоспособности MySQL ................................................73
Часть II. Паттерны проектирования
обслуживающих систем
Введение в микросервисы ...........................................................78
Глава 5. Реплицированные сервисы с распределением нагрузки ...82
Сервисы без внутреннего состояния ............................................82
Датчики готовности для балансировщика нагрузки ...........84
Практикум. Создание реплицированного сервиса
с помощью Kubernetes .......................................................85
Сервисы с закреплением сессий ..................................................87
Сервисы с репликацией на уровне приложения ...........................89
Добавляем кэширующую прослойку ............................................89
Развертывание кэширующего сервера ..............................90
Практикум. Развертывание кэширующей прослойки ..........92
Расширение возможностей кэширующей прослойки ....................95
Ограничение частоты запросов и защита от атак типа
«отказ в обслуживании» (DoS) ..........................................95
SSL-мост ............................................................................96
Практикум. Развертывание nginx и SSL-моста ....................98
Резюме ......................................................................................101
Глава 6. Шардированные сервисы ...............................................102
Шардирование кэша ..................................................................103
Зачем вам нужен шардированный кэш ............................104
Роль кэша в производительности системы ......................105
Реплицированный и шардированный кэш ........................107
Практикум. Развертывание реализации паттерна
Ambassador и сервиса memcache
для организации шардированного кэша .....................108
Шардирующие функции ............................................................114
Выбор ключа ...................................................................115
Консистентные хеш-функции ..........................................117
Практикум. Построение консистентного
шардированного прокси-сервера ....................................118
Шардирование реплицированных сервисов ...............................119
Системы с «горячим» шардированием .......................................120
Глава 7. Паттерн Scatter/Gather ...................................................122
Scatter/Gather с распределением нагрузки
корневым узлом ........................................................................123
Практикум. Распределенный поиск в документах ............125
Scatter/Gather с шардированием терминальных узлов ...............126
Практикум. Шардированный поиск в документах ............128
Выбор подходящего количества терминальных узлов .....129
Масштабирование Scatter/Gather-систем с учетом
надежности и производительности ............................................132
Глава 8. Функции и событийно-ориентированная обработка .......134
Как определить, когда полезен подход FaaS ..............................135
Преимущества FaaS .........................................................136
Проблемы разработки FaaS-систем ..................................136
Потребность в фоновой обработке ..................................138
Необходимость хранения данных в памяти .....................138
Стоимость постоянного использования
запросно-ориентированных вычислений .........................139
Паттерны FaaS ...........................................................................140
Паттерн Decorator. Преобразование запроса
или ответа ......................................................................140
Практикум. Подстановка значений по умолчанию
до обработки запроса .....................................................142
Обработка событий .........................................................144
Практикум. Реализация двухфакторной
аутентификации ..............................................................145
Событийные конвейеры ..................................................147
Практикум. Реализация конвейера для регистрации
нового пользователя .......................................................148
Глава 9. Выбор владельца ...........................................................151
Как определить, нужен ли выбор владельца .............................152
Основы процесса выбора владельца ..........................................155
Практикум. Развертывание etcd ......................................157
Реализация блокировок ..................................................159
Практикум. Реализация блокировок в etcd ......................163
Реализация владения ......................................................164
Практикум. Реализация аренды в etcd .............................166
Параллельный доступ к данным ................................................167
Часть III. Паттерны проектирования систем
пакетных вычислений
Глава 10. Системы на основе очередей задач .............................173
Система на основе обобщенной очереди задач .........................173
Интерфейс контейнера-источника ...................................174
Интерфейс контейнера-исполнителя ...............................177
Общая инфраструктура очередей задач ..........................179
Практикум. Реализация генератора миниатюр
видеофайлов .............................................................................182
Динамическое масштабирование исполнителей .........................184
Паттерн Multi-Worker .................................................................187
Глава 11. Событийно-ориентированная пакетная обработка .......189
Паттерны событийно-ориентированной обработки ....................191
Паттерн Copier ................................................................191
Паттерн Filter ..................................................................192
Паттерн Splitter ...............................................................193
Паттерн Sharder ..............................................................194
Паттерн Merger ...............................................................196
Практикум. Создание событийно-ориентированного
потока задач для регистрации нового пользователя ................198
Инфраструктура publish/subscribe ..............................................201
Практикум. Развертывание Kafka ...............................................202
Глава 12. Координированная пакетная обработка .......................205
Паттерн Join (барьерная синхронизация) ...................................206
Паттерн Reduce .........................................................................207
Практикум. Подсчет ........................................................209
Суммирование .................................................................210
Гистограмма ....................................................................211
Практикум. Конвейерная разметка
и обработка изображений .....................................................212
Глава 13. Заключение — новое начало? .....................................217
Об авторе .......................................................................................220
Об иллюстрации на обложке ..........................................................221
Кому стоит прочесть эту книгу .....................................................12
Зачем я написал эту книгу ...........................................................12
Современный мир распределенных систем ..................................13
Как ориентироваться в книге .......................................................14
Условные обозначения ................................................................15
Онлайн-ресурсы ..........................................................................16
Использование примеров кода ....................................................16
Благодарности .............................................................................17
Глава 1. Введение .........................................................................18
Краткая история разработки систем ............................................19
Краткая история паттернов проектирования в разработке ПО .....21
Формализация алгоритмического программирования ........21
Паттерныв объектно-ориентированном
программировании ........................................................22
Расцвет программного обеспечения с открытым
исходным кодом ................................................................23
Ценность паттернов, практик и компонентов ...............................24
Стоя на плечах гигантов ...................................................24
Общий язык обсуждения подходов к разработке ...............25
Общие повторно используемые компоненты .....................26
Резюме ........................................................................................27
Часть I. Одноузловые паттерны проектирования
Мотивация ...................................................................................30
Резюме ........................................................................................32
Глава 2. Паттерн Sidecar ...............................................................34
Пример реализации паттерна Sidecar. Добавление
возможности HTTPS-соединения к унаследованному сервису ......35
Динамическая конфигурация с помощью паттерна Sidecar ..........36
Модульные контейнеры приложений ...........................................39
Практикум. Развертывание контейнера topz ......................40
Создание простейшего PaaS-сервиса на основе
паттерна Sidecar ................................................................42
Разработка модульных и повторно используемых
реализаций паттерна Sidecar .......................................................43
Параметризованные контейнеры .......................................44
Определение API всех контейнеров ..................................45
Документирование контейнеров........................................47
Резюме ........................................................................................49
Глава 3. Паттерн Ambassador ........................................................50
Использование паттерна Ambassador
для шардирования сервиса ...................................................51
Практикум. Шардируем Redis-хранилище ..........................54
Использование паттерна Ambassador для реализации
сервиса-посредника.....................................................................57
Использование паттерна Ambassador для проведения
экспериментов и разделения запросов ........................................59
Практикум. Реализация 10%-ных экспериментов ..............60
Глава 4. Адаптеры .........................................................................64
Мониторинг .................................................................................66
Практикум. Мониторинг с помощью Prometheus ................67
Ведение журналов .......................................................................69
Практикум. Нормализация форматов журналов
с помощью fluentd .............................................................70
Мониторинг работоспособности сервисов ....................................72
Практикум. Комплексный мониторинг
работоспособности MySQL ................................................73
Часть II. Паттерны проектирования
обслуживающих систем
Введение в микросервисы ...........................................................78
Глава 5. Реплицированные сервисы с распределением нагрузки ...82
Сервисы без внутреннего состояния ............................................82
Датчики готовности для балансировщика нагрузки ...........84
Практикум. Создание реплицированного сервиса
с помощью Kubernetes .......................................................85
Сервисы с закреплением сессий ..................................................87
Сервисы с репликацией на уровне приложения ...........................89
Добавляем кэширующую прослойку ............................................89
Развертывание кэширующего сервера ..............................90
Практикум. Развертывание кэширующей прослойки ..........92
Расширение возможностей кэширующей прослойки ....................95
Ограничение частоты запросов и защита от атак типа
«отказ в обслуживании» (DoS) ..........................................95
SSL-мост ............................................................................96
Практикум. Развертывание nginx и SSL-моста ....................98
Резюме ......................................................................................101
Глава 6. Шардированные сервисы ...............................................102
Шардирование кэша ..................................................................103
Зачем вам нужен шардированный кэш ............................104
Роль кэша в производительности системы ......................105
Реплицированный и шардированный кэш ........................107
Практикум. Развертывание реализации паттерна
Ambassador и сервиса memcache
для организации шардированного кэша .....................108
Шардирующие функции ............................................................114
Выбор ключа ...................................................................115
Консистентные хеш-функции ..........................................117
Практикум. Построение консистентного
шардированного прокси-сервера ....................................118
Шардирование реплицированных сервисов ...............................119
Системы с «горячим» шардированием .......................................120
Глава 7. Паттерн Scatter/Gather ...................................................122
Scatter/Gather с распределением нагрузки
корневым узлом ........................................................................123
Практикум. Распределенный поиск в документах ............125
Scatter/Gather с шардированием терминальных узлов ...............126
Практикум. Шардированный поиск в документах ............128
Выбор подходящего количества терминальных узлов .....129
Масштабирование Scatter/Gather-систем с учетом
надежности и производительности ............................................132
Глава 8. Функции и событийно-ориентированная обработка .......134
Как определить, когда полезен подход FaaS ..............................135
Преимущества FaaS .........................................................136
Проблемы разработки FaaS-систем ..................................136
Потребность в фоновой обработке ..................................138
Необходимость хранения данных в памяти .....................138
Стоимость постоянного использования
запросно-ориентированных вычислений .........................139
Паттерны FaaS ...........................................................................140
Паттерн Decorator. Преобразование запроса
или ответа ......................................................................140
Практикум. Подстановка значений по умолчанию
до обработки запроса .....................................................142
Обработка событий .........................................................144
Практикум. Реализация двухфакторной
аутентификации ..............................................................145
Событийные конвейеры ..................................................147
Практикум. Реализация конвейера для регистрации
нового пользователя .......................................................148
Глава 9. Выбор владельца ...........................................................151
Как определить, нужен ли выбор владельца .............................152
Основы процесса выбора владельца ..........................................155
Практикум. Развертывание etcd ......................................157
Реализация блокировок ..................................................159
Практикум. Реализация блокировок в etcd ......................163
Реализация владения ......................................................164
Практикум. Реализация аренды в etcd .............................166
Параллельный доступ к данным ................................................167
Часть III. Паттерны проектирования систем
пакетных вычислений
Глава 10. Системы на основе очередей задач .............................173
Система на основе обобщенной очереди задач .........................173
Интерфейс контейнера-источника ...................................174
Интерфейс контейнера-исполнителя ...............................177
Общая инфраструктура очередей задач ..........................179
Практикум. Реализация генератора миниатюр
видеофайлов .............................................................................182
Динамическое масштабирование исполнителей .........................184
Паттерн Multi-Worker .................................................................187
Глава 11. Событийно-ориентированная пакетная обработка .......189
Паттерны событийно-ориентированной обработки ....................191
Паттерн Copier ................................................................191
Паттерн Filter ..................................................................192
Паттерн Splitter ...............................................................193
Паттерн Sharder ..............................................................194
Паттерн Merger ...............................................................196
Практикум. Создание событийно-ориентированного
потока задач для регистрации нового пользователя ................198
Инфраструктура publish/subscribe ..............................................201
Практикум. Развертывание Kafka ...............................................202
Глава 12. Координированная пакетная обработка .......................205
Паттерн Join (барьерная синхронизация) ...................................206
Паттерн Reduce .........................................................................207
Практикум. Подсчет ........................................................209
Суммирование .................................................................210
Гистограмма ....................................................................211
Практикум. Конвейерная разметка
и обработка изображений .....................................................212
Глава 13. Заключение — новое начало? .....................................217
Об авторе .......................................................................................220
Об иллюстрации на обложке ..........................................................221
Название: Распределенные системы. Паттерны проектирования
Автор: Брендан Бернс
Год: 2019
Жанр: программирование
Серия: Бестселлеры O`Reilly
Издательство: Питер
Язык: Русский
Формат: pdf
Качество: eBook
Страниц: 224
Размер: 4 MB
Скачать Брендан Бернс - Распределенные системы. Паттерны проектирования (2019)