Программирование инфраструктуры
معرفی کتاب «Программирование инфраструктуры» نوشتهٔ Киф Моррис، منتشرشده توسط نشر БХВ-Петербург در سال 2024. این کتاب در فرمت pdf، زبان انگلیسی ارائه شده است. «Программирование инфраструктуры» در دستهٔ بدون دستهبندی قرار دارد.
Оглавление Предисловие Зачем я написал эту книгу Что нового и особенного во втором издании Что дальше Чего ожидать и чего не стоит ожидать от этой книги Исторический контекст программирования инфраструктуры Для кого эта книга Принципы, практики, паттерны Примеры с ShopSpinner Соглашения, используемые в книге Благодарности Часть I. Основы Глава 1. Что такое программирование инфраструктуры Из железного века в облачный Программирование инфраструктуры Достоинства программирования инфраструктуры Программирование инфраструктуры как оптимизация в расчете на изменения Возражение: «мы не так часто вносим изменения, поэтому их автоматизация не столь нужна» Возражение: «сначала систему нужно построить, а уже потом автоматизировать» Возражение: «приходится выбирать между скоростью и качеством» Четыре ключевые метрики Три ключевые практики для программирования инфраструктуры Ключевая практика: все определяется как код Ключевая практика: вся текущая работа непрерывно тестируется и сдается Ключевая практика: создаются небольшие простые фрагменты, которые поддаются изменениям независимо друг от друга Заключение Глава 2. Инфраструктурные принципы для облачного века Принцип: исходим из того, что системы ненадежны Принцип: все нужно делать воспроизводимым Западня: системы-снежинки Принцип: создавайте такие компоненты, которые легко пустить в расход История об исчезающем файловом сервере Принцип: минимизируем вариативность Конфигурационная энтропия Спираль страха перед автоматизацией Принцип: убедитесь, что любой процесс сможете повторить Заключение Глава 3. Инфраструктурные платформы Из каких частей состоит инфраструктурная система Инфраструктурные платформы Мультиоблако Инфраструктурные ресурсы Вычислительные ресурсы Бессерверная парадигма — это не только код Ресурсы для хранения данных Сетевые ресурсы Модель нулевого доверия в программно-конфигурируемых сетях Заключение Глава 4. Ключевая практика: все определяется как код Зачем следует определять инфраструктуру так, чтобы ее можно было программировать Что можно определить как код Выбирайте инструменты, конфигурация которых вынесена наружу Управление вашим кодом в системе контроля версий Языки для программирования инфраструктуры Смешивание декларативного и императивного кода Скрипты для обслуживания инфраструктуры Декларативные инфраструктурные языки Является ли декларативный код полноценным кодом? Идемпотентность Программируемые императивные инфраструктурные языки Сравнение декларативных и императивных языков в контексте инфраструктуры Предметно-ориентированные инфраструктурные языки Языки общего назначения в сравнении с инфраструктурными DSL Принципы реализации при определении инфраструктуры, которую планируется программировать Разделяем декларативный и императивный код Обращайтесь с инфраструктурным кодом точно как с «настоящим» Код как документация Заключение Часть II. Работа с инфраструктурными стеками Глава 5. Программирование инфраструктурных стеков Что такое инфраструктурный стек Код стека Инстанс стека Конфигурирование серверов в стеке Низкоуровневые инфраструктурные языки Высокоуровневые инфраструктурные языки Паттерны и антипаттерны структурирования стеков Антипаттерн: монолитный стек Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Мой стек — монолитный? Паттерн: стек группы приложений Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: сервисный стек Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: микростек Зачем это нужно Последствия Внедрение Смежные паттерны Заключение Глава 6. Создание окружений с помощью стеков Зачем вообще нужны окружения Окружения для доставки Множество продакшен-окружений Окружения, согласованность и конфигурация Паттерны построения окружений Антипаттерн: один стек на несколько окружений Зачем это нужно Последствия Смежные паттерны Антипаттерн: копирование и вставка окружения Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: переиспользуемый стек Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Построение окружений с использованием множества стеков Заключение Глава 7. Конфигурирование инстансов стеков Использование параметров стека для создания уникальных идентификаторов Пример параметров стека Паттерны конфигурирования стеков Антипаттерн: установка параметров стека вручную Зачем это нужно Последствия Внедрение Смежные паттерны Паттерн: переменные окружения стека Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: скрипты для ввода параметров Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: конфигурационные файлы стека Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: стек-обертка Зачем это нужно Последствия Внедрение Смежные паттерны Паттерн: конвейеризация параметров стека Зачем это нужно Применимость Последствия Серверы непрерывной интеграции, конвейеры и секреты Внедрение Смежные паттерны Паттерн: реестр параметров стека Конфигурационные реестры и реестры параметров стека Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Конфигурационный реестр Внедрение конфигурационного реестра Реестры инструмента, предназначенного для автоматизации инфраструктуры Продукты, которые могут послужить конфигурационным реестром общего назначения Сервисы реестра, предоставляемые на платформе Конфигурационные реестры «сделай сам» Один или множество конфигурационных реестров Обращение с секретами как с параметрами Шифрование секретов Несекретная авторизация Инъекция секретов во время выполнения Одноразовые секреты Заключение Глава 8. Ключевая практика: непрерывное тестирование и доставка Зачем непрерывно тестировать инфраструктурный код Что такое непрерывное тестирование Оперативное тестирование и окончательное тестирование Что следует тестировать на уровне инфраструктуры Сложности с тестированием инфраструктурного кода Проблема: тесты для декларативного кода обычно не слишком ценны Тестирование изменчивого декларативного кода Тестирование сочетаний декларативного кода Проблема: тестирование инфраструктурного кода идет медленно Проблема: зависимости усложняют тестовую инфраструктуру Прогрессивное тестирование Тестовая пирамида Модель тестирования по принципу швейцарского сыра Конвейеры доставки для работы с инфраструктурой Этапы работы конвейера Масштаб компонентов, тестируемых на этапе Масштаб зависимостей, используемых на этапе конвейера Включайте в тестирование только такие этапы, которые привносят дополнительную ценность в проект Платформенные элементы, требуемые на этапе конвейера Программы и сервисы для организации конвейера доставки Тестирование в продакшене Что невозможно воспроизвести вне продакшена Зачем тестировать где-либо, кроме как в продакшене? Управление рисками тестирования в продакшене Мониторинг как тестирование Заключение Глава 9. Тестирование инфраструктурных стеков Пример инфраструктуры Пример стека Пример стека и конвейер для него Офлайновые этапы тестирования стеков Проверка синтаксиса Офлайновый статический анализ кода Статический анализ кода с применением API Тестирование с применением имитационного API Онлайновые этапы тестирования стеков Предпросмотр: проверяем, какие изменения могут быть внесены Верификация: выдвижение гипотез об инфраструктурных ресурсах Результаты: убеждаемся, что инфраструктура работает корректно Использование тестовых контекстов для обращения с зависимостями Тестовые двойники для восходящих зависимостей Тестовые контексты для нисходящих зависимостей Проводим рефакторинг компонентов так, чтобы их легко было изолировать Паттерны жизненного цикла для тестовых инстансов стеков Паттерн: персистентный тестовый стек Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: эфемерный тестовый стек Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Антипаттерн: сдвоенные этапы с персистентными и эфемерными стеками Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: периодическая пересборка стека Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: серийный сброс стека Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Оркестрация тестов Поддержка локального тестирования Избегайте плотного связывания с инструментами конвейера Инструменты оркестрации тестов Заключение Часть III. Работа с серверами и другими платформами исполнения приложений Глава 10. Среды выполнения приложений Исходно облачная инфраструктура под потребности приложений Цели для сред исполнения приложений Развертываемые части приложения Пакеты для развертывания Развертывание приложений на серверах Упаковка приложений в контейнерах Развертывание приложений в серверных кластерах Развертывание приложений в кластерах приложений Пакеты для развертывания приложений в кластерах Развертывание серверного приложения по модели FaaS Данные приложений Структуры и схемы данных Исходно облачная инфраструктура для хранения приложений Соединяемость приложений Обнаружение сервисов Заключение Глава 11. Сборка серверов в коде Что на сервере Откуда что берется Код для конфигурации сервера Модули кода для конфигурации сервера Проектирование модулей для конфигурации серверного кода Версионирование и продвижение серверного кода Серверные роли Тестирование серверного кода Прогрессивное тестирование серверного кода Что тестировать в серверном коде Как тестировать серверный код Создание нового серверного инстанса Сборка нового серверного инстанса вручную Создаем сервер с помощью скрипта Создание сервера с помощью инструмента управления стеком Конфигурирование платформы для автоматического создания серверов Как собрать сервер с помощью сетевого инструмента предоставления ресурсов Заблаговременная сборка серверов Горячее клонирование сервера Использование серверного снимка Создание чистого серверного образа Конфигурирование нового серверного инстанса Зажаривание серверного инстанса Выпекание серверных образов Комбинируем выпекание и зажаривание Применение серверной конфигурации при создании сервера Заключение Глава 12. Управление изменениями, поступающими на серверы Паттерны управления изменениями: когда применять изменения Антипаттерн: применять по факту изменений Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: непрерывная синхронизация конфигурации Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: неизменяемый сервер Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Пропатчивание серверов Как применять код конфигурации сервера Паттерн: конфигурация сервера методом push Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: конфигурация сервера методом pull Зачем это нужно Применимость Внедрение Смежные паттерны Децентрализованная конфигурация Другие события серверного жизненного цикла Останов и перезапуск серверного инстанса Замена серверного инстанса Восстановление отказавшего сервера Заключение Глава 13. Образы серверов как код Сборка серверного образа Зачем собирать серверный образ Как собрать серверный образ Инструменты для сборки серверных образов Процесс онлайновой сборки образа Инфраструктура для сборочного инстанса Конфигурирование сборочного инстанса Сборка серверного образа с помощью простых скриптов Процесс офлайновой сборки образа Исходное содержимое для серверного образа Сборка на основе стандартного серверного образа Сборка серверного образа с нуля Происхождение серверного образа и его содержимое Изменение серверного образа Разогреть или испечь свежий? Версионирование серверного образа Обновление серверных инстансов при изменении образа Предоставление серверного образа для совместного использования несколькими командами Как работать с крупными изменениями, вносимыми в образ Использование конвейера для тестирования и доставки серверного образа Стадия сборки серверного образа Стадия тестирования серверного образа Стадии доставки серверного образа Использование множества серверных образов Серверные образы для разных инфраструктурных платформ Серверные образы для разных операционных систем Серверные образы для разных аппаратных архитектур Серверные образы для разных ролей Многослойное расположение серверных образов Управление и серверные образы Совместное использование кода в разных серверных образах Заключение Глава 14. Сборка кластеров в коде Решения с кластерами приложений Кластер как услуга Управляемые кластеры Kubernetes — это не облачный уровень абстрагирования Распространение кластеров в упакованном виде Топологии стеков для кластеров приложений Монолитный стек, использующий кластер как услугу Монолитный стек для упакованного кластерного решения Конвейер для стека, в котором реализован монолитный кластер приложений Пример: множество стеков в одном кластере Стратегии совместного использования кластеров приложений Один большой кластер на все случаи жизни Отдельные кластеры для стадий доставки Кластеры для управления Кластеры для команд Сервисная сеть Инфраструктура для бессерверных FaaS-сервисов Заключение Часть IV.Проектирование инфраструктуры Глава 15. Ключевая практика: небольшие простые фрагменты Модульное проектирование Характеристики хорошо спроектированных компонентов Правила проектирования компонентов Избегайте дублирования Продуманное дублирование Правило композиции Принцип единственной ответственности Проектируйте компоненты на основе концепций предметной области, а не на основе технических концепций Закон Деметры Поставщики и потребители Никаких циклических зависимостей Используйте тестирование для принятия проектных решений Модульная инфраструктура Компоненты стека по сравнению со стеками в качестве компонентов Использование сервера в стеке Инфраструктура без общего доступа Проведение границ между компонентами Устанавливайте границы по паттернам естественных изменений Устанавливайте границы по жизненным циклам компонентов Устанавливайте границы по организационным структурам Устаревшие хранилища создают разрозненную инфраструктуру Создавайте границы, поддерживающие устойчивость Создавайте границы, поддерживающие масштабирование Отдавайте предпочтение вертикальной, а не горизонтальной группировке Устанавливайте границы по проблемам безопасности и управления Границы сети не являются границами стека инфраструктуры Заключение Глава 16. Построение стеков из компонентов Языки инфраструктуры для компонентов стека Повторное использование декларативного кода с модулями Динамическое создание элементов стека с применением библиотек Паттерны для компонентов стека Паттерн: фасадный модуль Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Антипаттерн: модуль обфускации Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Антипаттерн: неразделяемый модуль Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: модуль бандла Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Антипаттерн: спагетти-модуль Зачем это нужно Последствия Внедрение Смежные паттерны Паттерн: сущность домена инфраструктуры Зачем это нужно Применимость Внедрение Смежные паттерны Построение уровня абстрагирования Заключение Глава 17. Использование стеков в качестве компонентов Обнаружение зависимостей между стеками Паттерн: сопоставление ресурсов Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: поиск данных в стеке Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: поиск по реестру интеграции Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Внедрение зависимости Проблемы со смешиванием зависимости и кода определения Отделение зависимостей от их обнаружения Истоки внедрения зависимостей Заключение Часть V. Доставка инфраструктуры Глава 18. Организация кода инфраструктуры Организация проектов и репозиториев Один репозиторий или много? Один репозиторий для всего Монорепозиторий — один репозиторий, одна сборка Один репозиторий, несколько сборок Отдельный репозиторий для каждого проекта (микрорепозиторий) Несколько репозиториев с несколькими проектами Организация различных типов кода Файлы поддержки проекта Межпроектные тесты Хранение интеграционных тестов в проекте Отдельные проекты интеграционных тестов Организация кода по концепции предметной области Организация файлов конфигурационных значений Управление инфраструктурным кодом и кодом приложения Доставка инфраструктуры и приложений Тестирование приложений с инфраструктурой Тестирование инфраструктуры перед интеграцией Использование инфраструктурного кода для развертывания приложений Заключение Глава 19. Доставка инфраструктурного кода Доставка инфраструктурного кода Сборка инфраструктурного проекта Инфраструктурный код упаковки как артефакт Использование репозитория для доставки инфраструктурного кода Специализированный репозиторий артефактов Репозиторий инструмента Общий репозиторий для хранения файлов Доставка кода из репозитория исходного кода Интеграция проектов Паттерн: интеграция проекта во время сборки Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Это монорепозиторий или интеграция проекта во время сборки? Паттерн: интеграция проекта во время доставки Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Паттерн: интеграция проекта во время применения Зачем это нужно Применимость Последствия Внедрение Смежные паттерны Использование скриптов для обертывания инструментов инфраструктуры Сборка значений конфигурации Упрощение скриптов-оболочек Заключение Глава 20. Командные рабочие процессы Люди Кто пишет инфраструктурный код? Использование картирования потока создания ценности для улучшения рабочих процессов Применение кода к инфраструктуре Применение кода с вашей локальной рабочей станции Применение кода из централизованной службы Инструменты и службы, которые запускают ваш инструмент инфраструктуры Персональные инфраструктурные инстансы Централизованно управляемые личные инстансы Ветви исходного кода в рабочих процессах Слияние — это не интеграция Предотвращение конфигурационной энтропии Сведите к минимуму задержку автоматизации Избегайте непродуманного применения изменений Применяйте код непрерывно Неизменяемая инфраструктура СйОрэ Управление в конвейерно-ориентированном потоке задач Перетасовка обязанностей Сдвиг влево Пример процесса для инфраструктуры как кода с управлением Нормализуйте процесс аварийного исправления Заключение Глава 21. Безопасное изменение инфраструктуры Уменьшите объем изменений Небольшие изменения Пример рефакторинга Возведение системы с чистого листа Отправка неполных изменений в продакшен Параллельные инстансы Зачем вообще извлекать старое контейнерное решение? Обратно совместимые преобразования Переключатели функций Советы по переключению функций Изменение действующей инфраструктуры Инфраструктурная хирургия Расширение и сжатие Изменения нулевого времени простоя Сине-зеленые изменения Преемственность Преемственность за счет предотвращения ошибок Непрерывность за счет быстрого восстановления Непрерывное аварийное восстановление Хаос-инжиниринг Планирование неудач Инкрементное улучшение непрерывности Непрерывность данных в меняющейся системе Блокировка Разделение Репликация Перезагрузка Смешение подходов к обеспечению непрерывности данных Заключение Предметный указатель Об авторе Just five years ago, infrastructure as code was a new concept. Today, even banks, governments, and other highly regulated organizations are moving to the cloud, leading teams everywhere to build up large, complex infrastructure codebases. With this practical book, Kief Morris of ThoughtWorks shows you how to effectively use principles, practices, and patterns pioneered by infrastructure and development teams to manage cloud age infrastructure. Ideal for system administrators, infrastructure engineers, software developers, team leads, and architects, this insightful second edition demonstrates the tools you need for implementing infrastructure as code. You'll learn about the platforms and tooling involved in creating and configuring infrastructure elements, patterns for using these tools, and practices for making infrastructure as code work in your environment. In four parts, this book covers: Foundations: Understand how to use Infrastructure as Code to drive continuous change and raise the bar of operational quality. These chapters lay out a framework for the various tools and technologies involved in building platforms to run software in the cloud. Working with infrastructure stacks: These chapters introduce practical patterns and approaches for defining, provisioning, testing, and continuously delivering changes to infrastructure resources. This includes managing and configuring environments and sharing infrastructure code. Working With Servers And Other Application Runtime Platforms: Discover patterns for provisioning and configuring servers and clusters for deploying applications. Working With Larger Systems and Teams: When you have multiple teams building and using cloud infrastructure, you need to consider workflows and governance, as well as architectural patterns for creating and managing many different infrastructure elements Six years ago, Infrastructure as Code was a new concept. Today, as even banks and other conservative organizations plan moves to the cloud, development teams for companies worldwide are attempting to build large infrastructure codebases. With this practical book, Kief Morris of ThoughtWorks shows you how to effectively use principles, practices, and patterns pioneered by DevOps teams to manage cloud-age infrastructure.Ideal for system administrators, infrastructure engineers, software developers, team leads, and architects, this updated edition demonstrates how you can exploit cloud and automation technology to make changes easily, safely, quickly, and responsibly. You'll learn how to define everything as code and apply software design and engineering practices to build your system from small, loosely coupled pieces.This book covers:Foundations: Use Infrastructure as Code to drive continuous change and raise the bar of operational quality, using tools and technologies to build cloud-based platformsWorking with infrastructure stacks: Learn how to define, provision, test, and continuously deliver changes to infrastructure resourcesWorking with servers and other platforms: Use patterns to design provisioning and configuration of servers and clustersWorking with large systems and teams: Learn workflows, governance, and architectural patterns to create and manage infrastructure elements
دانلود کتاب Программирование инфраструктуры