Брендан Бернс - Распределенные системы. Паттерны проектирования (2019)
Современный мир попросту немыслим без использования распределенных систем. Даже у простейшего мобильного приложения есть 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
Название: Распределенные системы. Паттерны проектирования Автор: Брендан Бернс Год: 2019 Жанр: программирование Серия: Бестселлеры O`Reilly Издательство: Питер Язык: Русский
Формат: pdf Качество: eBook Страниц: 224 Размер: 4 MB
Скачать Брендан Бернс - Распределенные системы. Паттерны проектирования (2019)