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

Новинка: “Архитектура cложных веб-приложений: c примерами на Laravel”

Архитектура cложных веб-приложений: c примерами на Laravel

Книга посвящена практическим аспектам проектирования архитектуры сложных веб-приложений с примерами на Laravel. Рассматриваются типовые проблемы, возникающие при масштабировании проектов, и подходы к их решению, включая выстраивание слоев приложения, организацию бизнес-логики, разделение ответственности и работу с инфраструктурным кодом. Анализируются распространенные архитектурные ошибки, связанные с чрезмерной зависимостью от фреймворков, и предлагаются альтернативные решения на основе проверенных практик. Описаны обработка ошибок и валидация, реализация доменного слоя, использование архитектурных паттернов CQRS и Event Sourcing. Особое внимание уделено unit-тестированию, управлению зависимостями, событийно-ориентированному подходу и внедрению паттернов, устойчивых к росту сложности.

Для разработчиков, архитекторов ПО и технических руководителей

Идеальная архитектура для сложных проектов

Современные веб-приложения быстро выходят за рамки простых CRUD-интерфейсов. Стандарты MVC, удобные инструменты быстрой разработки и популярные фреймворки, такие как Laravel, на первых этапах помогают, но со временем становятся источником проблем, поскольку рост проекта требует продуманной архитектуры.

Эта книга — практическое руководство по проектированию и развитию сложных веб-приложений. Автор на примерах показывает, как типовые подходы приводят к архитектурной деградации и какие решения позволяют обеспечить развитие проекта: от первых контроллеров с тысячами строк до осмысленного распределения задач между слоями. Вы узнаете:

  • Почему принцип «один контроллер правит всеми» — путь к хаосу
  • Как выстраивать слои приложения: от запроса к бизнес-логике
  • Зачем нужны сервисные классы, value objects и событийно-ориентированный подход
  • Как правильно тестировать приложение и не утонуть в абстракциях
  • Где проходит граница между удобством и чрезмерной магией фреймворков

Автор рассматривает типовые ошибки роста — перегрузку контроллеров, слепую веру в REST, злоупотребление Active Record и удобством фреймворков. Через призму реального опыта описываются внедрение зависимостей, работа с исключениями, разделение валидации, построение слоя приложений, подходы к unit-тестированию, реализация доменного слоя и архитектурные паттерны вроде CQRS (Command Query Responsibility Segregation) и Event Sourcing.

Разработчикам, архитекторам и руководителям проектов эта книга даст набор проверенных практик, поможет избежать архитектурных ловушек и найти баланс между скоростью разработки и устойчивостью проекта в долгосрочной перспективе.

  • Проблемы роста проекта и их решение
  • Внедрение зависимостей
  • Безболезненный рефакторинг
  • Выстраивание слоев приложения
  • Обработка ошибок и валидация
  • Событийно-ориентированный подход
  • Проведение unit-тестирования
  • Реализация доменного слоя
  • Использование архитектурных паттернов CQRS и Event Sourcing

Книгу “Архитектура cложных веб-приложений: c примерами на Laravel” можно купить в нашем интенет-магазине.

Предисловие…………………………………………………………………………………………….. 6

Глава 1. Плохие привычки………………………………………………………………………. 8

Проблемы роста…………………………………………………………………………………………………………………………… 8

Выделение логики……………………………………………………………………………………………………………………… 10

Соблазнительная «простота» REST…………………………………………………………………………………………. 13

Поклонение темной магии PHP…………………………………………………………………………………………………. 15

«Быстрая» разработка приложений (RAD)……………………………………………………………………………… 17

Преждевременная оптимизация……………………………………………………………………………………………….. 19

Экономия строк кода…………………………………………………………………………………………………………………. 20

Прочие источники боли…………………………………………………………………………………………………………….. 21

Глава 2. Внедрение зависимостей…………………………………………………………… 22

Принцип единственной ответственности…………………………………………………………………………………. 22

Dependency Injection………………………………………………………………………………………………………………….. 25

Наследование…………………………………………………………………………………………………………………………….. 32

Пример с загрузкой картинок……………………………………………………………………………………………………. 35

Начальный рефакторинг…………………………………………………………………………………………………… 37

ООП-путь……………………………………………………………………………………………………………………. 41

Путь конфигурации (Configuration way)…………………………………………………………………. 44

Расширение интерфейсов………………………………………………………………………………………………………….. 45

Трейты………………………………………………………………………………………………………………………………………… 49

Трейты, расширяющие интерфейсы…………………………………………………………………………………. 50

Трейты как части класса…………………………………………………………………………………………………… 51

Трейты как поведение………………………………………………………………………………………………………… 52

Бесполезные трейты…………………………………………………………………………………………………………… 54

Статические методы………………………………………………………………………………………………………………….. 56

Пара слов в конце главы……………………………………………………………………………………………………………. 57

Глава 3. Безболезненный рефакторинг…………………………………………………… 58

«Статическая» типизация………………………………………………………………………………………………………….. 58

Шаблоны…………………………………………………………………………………………………………………………………….. 60

Поля моделей……………………………………………………………………………………………………………………………… 61

Плагин Laravel Idea…………………………………………………………………………………………………………………… 63

Глава 4. Слой приложения…………………………………………………………………….. 65

Передача данных запроса………………………………………………………………………………………………………… 67

Работа с базой данных……………………………………………………………………………………………………………… 71

Сервисные классы или классы команд?………………………………………………………………………………….. 75

Пара слов в конце главы……………………………………………………………………………………………………………. 76

Глава 5. Обработка ошибок…………………………………………………………………… 77

Исключения (Exceptions)…………………………………………………………………………………………………………… 80

Базовый класс исключения……………………………………………………………………………………………………….. 83

Глобальный обработчик…………………………………………………………………………………………………………… 84

Проверяемые и непроверяемые исключения…………………………………………………………………………… 86

Пара слов в конце главы……………………………………………………………………………………………………………. 90

Глава 6. Валидация………………………………………………………………………………… 92

Валидация, связанная с базой данных…………………………………………………………………………………….. 92

Два уровня валидации………………………………………………………………………………………………………………. 95

Валидация аннотациями…………………………………………………………………………………………………………… 96

Проблема данных HTTP-запроса…………………………………………………………………………………….. 97

Проблема сложных структур данных……………………………………………………………………………… 98

Объект-значение (Value objects)……………………………………………………………………………………………….. 98

Объект-значение как композиция других значений……………………………………………………………… 100

Объекты-значения и валидация……………………………………………………………………………………………… 101

Пара слов в конце главы…………………………………………………………………………………………………………. 103

Глава 7. События…………………………………………………………………………………. 104

Транзакции базы данных (Database transactions)…………………………………………………………………. 105

Очереди…………………………………………………………………………………………………………………………………….. 107

Механизм событий………………………………………………………………………………………………………………….. 108

Использование событий Eloquent…………………………………………………………………………………………… 109

Сущности как поля классов-событий…………………………………………………………………………………….. 111

Пара слов в конце главы…………………………………………………………………………………………………………. 113

Глава 8. Unit-тестирование…………………………………………………………………… 114

Первые шаги…………………………………………………………………………………………………………………………….. 114

Тестирование классов с состоянием………………………………………………………………………………………. 118

Тестирование классов с зависимостями………………………………………………………………………………… 120

Зависимости на реальные классы………………………………………………………………………………….. 120

Стабы и фейки………………………………………………………………………………………………………………….. 122

Моки………………………………………………………………………………………………………………………………….. 123

Типы тестов ПО………………………………………………………………………………………………………………………… 124

Тестирование в Laravel……………………………………………………………………………………………………………. 125

Инструменты Laravel для функционального тестирования…………………………………………. 125

Моки Laravel-фасадов……………………………………………………………………………………………………… 129

Unit-тестирование слоя приложения……………………………………………………………………………………… 131

Отсоединяем код от Laravel-фасадов…………………………………………………………………………….. 131

Отсоединяем от базы данных…………………………………………………………………………………………. 133

Стратегия тестирования приложения……………………………………………………………………………………. 136

Глава 9. Доменный слой………………………………………………………………………. 138

Когда и зачем?…………………………………………………………………………………………………………………………. 138

Unit-тестирование…………………………………………………………………………………………………………….. 139

Простота поддержки кода………………………………………………………………………………………………. 141

Шаблоны Active record и Data mapper…………………………………………………………………………… 141

Высокая связность бизнес-логики…………………………………………………………………………………… 141

Сдвиг фокуса с базы данных к предметной области……………………………………………………. 142

Инварианты сущностей…………………………………………………………………………………………………… 143

Реализация доменного слоя……………………………………………………………………………………………………. 143

Пример домена…………………………………………………………………………………………………………………. 143

Доменные события…………………………………………………………………………………………………………… 149

Генерация идентификатора…………………………………………………………………………………………….. 151

Маппинг модели в базу данных……………………………………………………………………………………… 154

Миграции………………………………………………………………………………………………………………………….. 157

Обработка ошибок в доменном слое……………………………………………………………………………………… 161

Пара слов в конце главы…………………………………………………………………………………………………………. 163

Глава 10. Шаблон CQRS………………………………………………………………………. 164

Чтение и запись — это разные ответственности?…………………………………………………………………. 164

Хранимые процедуры и представления…………………………………………………………………………. 164

Репликация master-slave………………………………………………………………………………………………….. 166

Типичный сервисный класс…………………………………………………………………………………………….. 167

Отчеты………………………………………………………………………………………………………………………………. 169

Разделение ответственности за командный запрос……………………………………………………………… 169

Пара слов в конце главы…………………………………………………………………………………………………………. 172

Глава 11. Шаблон Event Sourcing…………………………………………………………. 173

Игра королей……………………………………………………………………………………………………………………………. 173

Unit-тестирование сущностей…………………………………………………………………………………………………. 177

Мир без магии………………………………………………………………………………………………………………………….. 178

Реализация ES………………………………………………………………………………………………………………………….. 179

Уникальные данные в ES-системах……………………………………………………………………………………….. 188

Пара слов в конце главы…………………………………………………………………………………………………………. 189

Заключение………………………………………………………………………………………….. 190

Предметный указатель…………………………………………………………………………. 191

 

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

Новинка: “Архитектура бэкенда. API для надежных корпоративных приложений”

Архитектура бэкенда. API для надежных корпоративных приложений

Книга посвящена полному циклу бэкенд-разработки, начиная от сбора требований и заканчивая мониторингом приложения. Основные темы книги касаются  масштабирования приложений, балансировки нагрузки, создания и доработки REST API, подбора инструментов для анализа данных, технологии SQL и NoSQL, обеспечения безопасности приложений, архитектурных стилей, применяемых при проектировании бэкенда. Также рассмотрены вопросы тестирования и развёртывания приложений, обмен данными в синхронном и асинхронном режиме, разница между связанностью и связностью. Без жесткой привязки к конкретным технологиям раскрыты основные особенности и сложности, возникающие в процессе создания новых сервисов, а также даны рекомендации по улучшению имеющихся сервисов и микросервисов. Структура книги подразумевает сквозное изучение материала, раскрывает принципы построения бэкенд-решений в рамках реальных проектов, где требуется одновременно учитывать технологическую составляющую, меняющиеся бизнес-требования и человеческий фактор.

Для разработчиков и архитекторов сложных программных систем

В настоящее время акцент при проектировании и поддержке программной архитектуры все сильнее смещается на серверную часть (бэкенд).

На бэкенде развиваются микросервисы, API баз данных, интеграция приложения со сторонними сервисами, обеспечивается масштабирование приложений, отказоустойчивость и балансировка нагрузки.

Правильно организованный бэкенд – залог внедрения продвинутых возможностей и функций, таких, как машинное обучение, анализ временных рядов, наблюдаемость  и обеспечение надежности сайтов (SRE). Ландшафт задач и проблем, с которыми приходится иметь дело на бэкенде, кажется необъятным, но при этом требует четкого и детализированного управления и понимания.

Если у вас возникла необходимость создать или доработать качественный бэкенд, подобрать для него стек и максимально исключить потенциальные осложнения при дальнейшей работе, то приступайте к изучению этой книги.

Ключевые темы:

 

  • Методики сбора требований к программной системе перед началом ее разработки
  • Рассмотрение основных паттернов коммуникации между сервисами, включая синхронные и асинхронные взаимодействия
  • Управление операционными данными проекта, изучение реляционных и нереляционных (SQL и NoSQL) подходов к моделированию данных
  • Управление сложной логикой приложения, архитектурные стили, связанность и связность
  • Безопасность приложения, защита от хакерских атак, безопасное хранение данных
  • Мониторинг приложения, анализ инцидентов
  • Доставка изменений, использование тестов, автоматическое тестирование

Книгу “Архитектура бэкенда. API для надежных корпоративных приложений” можно купить в нашем интенет-магазине.

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

Встречайте бестселлер: “Разработка мультитенантных SaaS-архитектур: принципы, модели, практика”

Разработка мультитенантных SaaS-архитектур: принципы, модели, практика

Книга посвящена практическим аспектам проектирования и реализации мультитенантных SaaS-архитектур. Рассматриваются ключевые принципы и модели разработки решений в модели Software as a Service (SaaS), включая стратегии изоляции арендаторов, управление идентификацией, разделение данных, построение микросервисов и подходы к DevOps в условиях мультитенантности. Подробно разобраны архитектурные шаблоны, компромиссы и организационные решения, влияющие на разработку масштабируемых и надежных SaaS-продуктов. Особое внимание уделено практическим рекомендациям для разработчиков.

Книгу “Разработка мультитенантных SaaS-архитектур: принципы, модели, практика” можно купить в нашем интенет-магазине.

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

Вышла книга “Основы инженерии данных: как создавать надёжные системы обработки данных”

Основы инженерии данных: как создавать надёжные системы обработки данных

Базовая книга по инженерии данных. Рассмотрены все аспекты проектирования и эксплуатации различных архитектур данных, а также полный жизненный цикл работы с данными: подготовка, поглощение, преобразование, очистка, сочетание, оркестрация, конвейеризация. Особое внимание уделено облачным технологиям, распределению нагрузки и безопасному хранению данных. Разобраны приёмы формирования запросов, работы с базами данных и отслеживания потоков данных. Книга даёт исчерпывающее представление о проектировании систем для обработки разнородных данных, поддержании этих систем в упорядоченном и доступном виде и о тенденциях развития современной индустрии данных.

Последнее десятилетие инженерия данных бурно развивается, поэтому среди программистов, исследователей и аналитиков данных растёт запрос на комплексное рассмотрение инженерии данных как цельной парадигмы.

Из книги вы узнаете, как проектировать и создавать enterprise-системы для обработкпи данных. Книга помогает оценить разнообразные технологии, доступные в рамках инженерии данных, понять жизненный цикл данных как продукта.

Авторы демонстрируют все тонкости инженерии данных в динамике, рассказывают, как объединять и сочетать различные облачные технологии обработки данных для максимального удовлетворения интересов пользователя. Показано, как организовать генерацию, поглощение, оркестрацию, преобразование, хранение и конвейеризацию данных и управление ими в любой среде, независимо от того, на основе какой базовой технологии она построена.

В этой книге:

  • Краткий обзор технологического ландшафта современной инженерии данных
  • Решение задач по инженерии данных с применением наилучших практик
  • Подбор технологий, выстраивание архитектуры данных, налаживание бизнес-процессов
  • Внедрение практик управления данными и обеспечения безопасности процессов в рамках всего жизненного цикла инженерии данных

Сегодня мир данных активно развивается. Сначала их проектировали, затем укладывали в базах данных. Затем ими занялись шефы. Потом появились архитекторы данных. Эта книга открывает новый этап на пути к зрелости всей индустрии данных. Абсолютно необходимый материал для всех, кто всерьёз желает делать карьеру в области работы с данными.

Билл Инмон, основоположник технологии хранилищ данных

Эта книга — отличное введение в темы передачи, обработки и преобразования данных. Исключительно рекомендую её всем, кто желает быстрее развиваться в инженерии или анализе данных, а также практикующим специалистам, которым требуется заполнить пробелы в знаниях.

Джордан Тигани, основатель и генеральный директор сайта MotherDuck, основатель
и соавтор проекта BigQuery

Книгу “Основы инженерии данных: как создавать надёжные системы обработки данных можно купить со скидкой в интернет-магазине издательства “БХВ“.

Отзывы о книге……………………………………………………………………………………… 17

Предисловие…………………………………………………………………………………………… 20

О чем не расскажет эта книга…………………………………………………………………………………………………… 20

О чем расскажет эта книга………………………………………………………………………………………………………… 20

Для кого предназначена эта книга…………………………………………………………………………………………… 21

Предварительные требования………………………………………………………………………………………………….. 22

Что вы узнаете и как улучшите свои способности…………………………………………………………………. 22

Структура книги………………………………………………………………………………………………………………………… 23

Условные обозначения……………………………………………………………………………………………………………… 24

Благодарности…………………………………………………………………………………………………………………………… 24

Часть I. Основы и компоненты………………………………………………… 27

Глава 1. Понятие инженерии данных…………………………………………………….. 29

Что такое инженерия данных?………………………………………………………………………………………………….. 29

Определение понятия «инженерия данных»………………………………………………………………… 30

Жизненный цикл инженерии данных……………………………………………………………………………. 31

Эволюция инженерии данных……………………………………………………………………………………….. 32

Ранние годы: 1980–2000гг., от хранилищ данных до Интернета……………………… 32

Начало 2000-х годов: Рождение современной инженерии данных…………………… 32

2000–2010-е годы: Инженерия больших данных………………………………………………… 34

2020-е годы: Инженерия жизненного цикла данных…………………………………………… 36

Инженерия данных и наука о данных………………………………………………………………………….. 37

Навыки и деятельность в области инженерии данных…………………………………………………………… 39

Зрелость данных и инженер данных…………………………………………………………………………….. 40

Этап 1. Начало работы с данными………………………………………………………………………. 41

Этап 2. Масштабирование на основе данных…………………………………………………….. 42

Этап 3. Управление на основе данных………………………………………………………………… 43

Подготовка и навыки инженера данных………………………………………………………………………. 44

Деловые обязанности…………………………………………………………………………………………………….. 45

Технические обязанности………………………………………………………………………………………………. 46

Континуум ролей инженеров данных от A до B………………………………………………………….. 49

Инженеры данных в организации…………………………………………………………………………………………….. 50

Инженеры данных, ориентированные на внутренних и внешних потребителей……… 50

Инженеры данных и другие технические специалисты……………………………………………… 51

Заинтересованные стороны выше по потоку обработки……………………………………. 52

Заинтересованные стороны ниже по потоку обработки……………………………………. 53

Инженеры данных и руководство компании……………………………………………………………….. 56

Данные в высшем руководстве……………………………………………………………………………… 56

Инженеры данных и менеджеры проектов…………………………………………………………… 58

Инженеры данных и менеджеры продуктов………………………………………………………… 59

Инженеры данных и другие руководящие должности……………………………………….. 59

Заключение………………………………………………………………………………………………………………………………… 59

Дополнительные ресурсы…………………………………………………………………………………………………………. 60

Глава 2. Жизненный цикл инженерии данных………………………………………. 62

Что такое жизненный цикл инженерии данных?…………………………………………………………………….. 62

Жизненный цикл данных в сравнении с жизненным циклом инженерии данных…….. 63

Генерация: исходные системы………………………………………………………………………………………. 64

Оценка исходных систем: ключевые технические особенности……………………….. 65

Хранение…………………………………………………………………………………………………………………………. 66

Оценка систем хранения данных: ключевые технические особенности…………… 67

О частоте доступа к данным…………………………………………………………………………………. 68

Выбор системы хранения данных………………………………………………………………………… 68

Поглощение…………………………………………………………………………………………………………………….. 69

Ключевые инженерные особенности для фазы поглощения……………………………… 69

Пакетная передача в сравнении с потоковой………………………………………………………. 70

Ключевые особенности пакетного и потокового поглощения данных…………….. 70

Модели Push и Pull………………………………………………………………………………………………….. 71

Преобразование……………………………………………………………………………………………………………… 72

Ключевые особенности этапа трансформации…………………………………………………… 72

Предоставление данных………………………………………………………………………………………………… 74

Аналитика……………………………………………………………………………………………………………….. 74

Машинное обучение………………………………………………………………………………………………. 76

Обратный ETL………………………………………………………………………………………………………… 77

Основные фоновые процессы жизненного цикла инженерии данных………………………………….. 78

Безопасность…………………………………………………………………………………………………………………… 79

Управление данными……………………………………………………………………………………………………… 80

Руководство данными……………………………………………………………………………………………. 81

Качество данных……………………………………………………………………………………………………. 86

Моделирование и проектирование данных…………………………………………………………. 87

Происхождение данных………………………………………………………………………………………… 88

Интеграция данных и совместимость…………………………………………………………………… 88

Управление жизненным циклом данных……………………………………………………………… 89

Этика и конфиденциальность……………………………………………………………………………….. 90

DataOps……………………………………………………………………………………………………………………………. 90

Автоматизация……………………………………………………………………………………………………….. 92

Наблюдаемость и мониторинг……………………………………………………………………………… 93

Реакция на инциденты……………………………………………………………………………………………. 94

Резюмируем DataOps……………………………………………………………………………………………… 95

Архитектура данных……………………………………………………………………………………………………… 95

Оркестровка…………………………………………………………………………………………………………………….. 96

Программная инженерия……………………………………………………………………………………………….. 97

Основной код обработки данных…………………………………………………………………………. 98

Разработка фреймворков с открытым исходным кодом…………………………………….. 98

Потоковая передача данных…………………………………………………………………………………. 99

Инфраструктура как код……………………………………………………………………………………….. 99

Конвейеры как код…………………………………………………………………………………………………. 99

Решение задач общего назначения…………………………………………………………………….. 100

Заключение………………………………………………………………………………………………………………………………. 100

Дополнительные ресурсы……………………………………………………………………………………………………….. 101

Глава 3. Проектирование качественной архитектуры данных…………….. 102

Что такое архитектура данных?…………………………………………………………………………………………….. 102

Определение архитектуры предприятия……………………………………………………………………. 102

Определение из TOGAF……………………………………………………………………………………….. 103

Определение от Gartner……………………………………………………………………………………….. 103

Определение из EABOK……………………………………………………………………………………….. 104

Наше определение……………………………………………………………………………………………….. 104

Определение архитектуры данных…………………………………………………………………………….. 106

Определение из TOGAF……………………………………………………………………………………….. 106

Определение из DAMA………………………………………………………………………………………… 106

Наше определение……………………………………………………………………………………………….. 106

«Качественная» архитектура данных………………………………………………………………………… 107

Принципы качественной архитектуры данных…………………………………………………………………….. 108

Принцип 1: Грамотный выбор общих компонентов………………………………………………….. 109

Принцип 2: Планирование на случай неудачи………………………………………………………….. 110

Принцип 3: Архитектура для обеспечения масштабируемости………………………………. 111

Принцип 4: Архитектура лидерства…………………………………………………………………………… 111

Принцип 5: Всегда заниматься архитектурой…………………………………………………………… 112

Принцип 6: Построение слабосвязанных систем………………………………………………………. 113

Принцип 7: Принимать обратимые решения……………………………………………………………… 114

Принцип 8: Приоритет отдается безопасности…………………………………………………………. 115

Модели безопасности с усиленным периметром и нулевым доверием…………… 115

Модель разделения ответственности…………………………………………………………………. 116

Инженеры данных как инженеры по безопасности………………………………………….. 116

Принцип 9: Освоение FinOps……………………………………………………………………………………….. 117

Основные понятия архитектуры…………………………………………………………………………………………….. 119

Домены и сервисы………………………………………………………………………………………………………… 119

Распределенные системы, масштабируемость и проектирование
с учетом отказов…………………………………………………………………………………………………………… 120

Слабая связанность в сравнении с сильной: уровни, монолиты и микросервисы….. 122

Уровни архитектуры……………………………………………………………………………………………. 122

Монолиты……………………………………………………………………………………………………………… 124

Микросервисы………………………………………………………………………………………………………. 125

Особенности архитектуры данных…………………………………………………………………….. 126

Доступ пользователей: отдельный и мультиарендный подходы…………………………….. 127

Событийно-ориентированная архитектура………………………………………………………………. 127

Сравнение проектов типа Brownfield и Greenfield……………………………………………………… 128

Проекты Brownfield………………………………………………………………………………………………. 128

Проекты Greenfield……………………………………………………………………………………………….. 129

Примеры и типы архитектуры данных………………………………………………………………………………….. 130

Хранилище данных………………………………………………………………………………………………………. 130

Облачное хранилище данных…………………………………………………………………………….. 133

Витрины данных………………………………………………………………………………………………….. 133

Озеро данных………………………………………………………………………………………………………………… 134

Совмещение, озера данных нового поколения и платформы данных…………………….. 135

Современный стек обработки данных……………………………………………………………………….. 136

Лямбда-архитектура……………………………………………………………………………………………………. 137

Каппа-архитектура………………………………………………………………………………………………………. 138

Модель потока данных и унифицированные пакетная и потоковая обработка……. 139

Архитектура для IoT……………………………………………………………………………………………………. 140

Устройства……………………………………………………………………………………………………………. 140

Взаимодействие с устройствами………………………………………………………………………… 141

Поверхностное рассмотрение IoT………………………………………………………………………. 142

Сеть данных………………………………………………………………………………………………………………….. 143

Другие примеры архитектур данных…………………………………………………………………………. 143

Кто участвует в проектировании архитектуры данных?…………………………………………………….. 144

Заключение………………………………………………………………………………………………………………………………. 145

Дополнительные ресурсы……………………………………………………………………………………………………….. 145

Глава 4. Выбор технологий в рамках жизненного цикла
инженерии данных………………………………………………………………………………. 150

Размер и возможности команды……………………………………………………………………………………………… 151

Скорость выхода на рынок…………………………………………………………………………………………………….. 152

Совместимость…………………………………………………………………………………………………………………………. 152

Оптимизация затрат и ценность для бизнеса………………………………………………………………………… 153

Совокупная стоимость владения………………………………………………………………………………… 153

Совокупные альтернативные издержки владения…………………………………………………….. 154

FinOps…………………………………………………………………………………………………………………………….. 155

Сегодняшний день и будущее: неизменяемые и временные технологии……………………………. 156

Наши рекомендации…………………………………………………………………………………………………….. 158

Местоположение……………………………………………………………………………………………………………………… 158

Локально……………………………………………………………………………………………………………………….. 159

В облаке………………………………………………………………………………………………………………………… 159

Гибридное облако………………………………………………………………………………………………………… 163

Мультиоблако………………………………………………………………………………………………………………. 164

Децентрализация: блокчейн и периферия………………………………………………………………….. 165

Наши рекомендации…………………………………………………………………………………………………….. 165

Выбирайте технологии для настоящего, но смотрите в будущее……………………. 166

Аргументы в пользу облачной репатриации……………………………………………………………… 167

Вы — не Dropbox и не Cloudflare………………………………………………………………………… 167

Создание или покупка…………………………………………………………………………………………………………….. 169

Программное обеспечение с открытым исходным кодом………………………………………… 170

OSS под управлением сообщества разработчиков…………………………………………… 171

Коммерческие OSS……………………………………………………………………………………………….. 172

Запатентованные «огороженные сады»…………………………………………………………………….. 174

Независимые предложения…………………………………………………………………………………. 174

Запатентованные сервисные предложения для облачных платформ…………….. 175

Наши рекомендации…………………………………………………………………………………………………….. 175

Монолит или модульная система…………………………………………………………………………………………… 176

Монолит………………………………………………………………………………………………………………………… 176

Модульная система……………………………………………………………………………………………………… 177

Модель распределенного монолита…………………………………………………………………………… 179

Наши рекомендации…………………………………………………………………………………………………….. 179

Серверы или бессерверные вычисления………………………………………………………………………………… 180

Бессерверный подход…………………………………………………………………………………………………… 180

Контейнеры…………………………………………………………………………………………………………………… 181

Как оценивать серверные и бессерверные решения………………………………………………….. 182

Наши рекомендации…………………………………………………………………………………………………….. 183

Оптимизация, производительность и войны бенчмарков…………………………………………………….. 184

Большие данные… для 1990-х годов…………………………………………………………………………… 185

Бессмысленные сравнения затрат………………………………………………………………………………. 185

Асимметричная оптимизация………………………………………………………………………………………. 186

Caveat Emptor, или Будьте бдительны!……………………………………………………………………… 186

Фоновые процессы и их влияние на выбор технологий……………………………………………………….. 186

Управление данными…………………………………………………………………………………………………… 186

DataOps………………………………………………………………………………………………………………………….. 187

Архитектура данных……………………………………………………………………………………………………. 187

Пример оркестровки: Airflow……………………………………………………………………………………….. 187

Программная инженерия……………………………………………………………………………………………… 188

Заключение………………………………………………………………………………………………………………………………. 189

Дополнительные ресурсы……………………………………………………………………………………………………….. 189

Часть II. Жизненный цикл инженерии данных в деталях 191

Глава 5. Генерация данных в исходных системах………………………………… 193

Источники данных: как формируются данные?……………………………………………………………………. 194

Исходные системы: основные идеи……………………………………………………………………………………….. 194

Файлы и неструктурированные данные…………………………………………………………………….. 194

API………………………………………………………………………………………………………………………………….. 195

Базы данных приложений (OLTP-системы)……………………………………………………………….. 195

ACID-транзакции…………………………………………………………………………………………………. 196

Атомарные транзакции……………………………………………………………………………………….. 196

OLTP и аналитика………………………………………………………………………………………………… 197

Системы интерактивной аналитической обработки…………………………………………………. 197

Захват изменения данных……………………………………………………………………………………………. 198

Журналы……………………………………………………………………………………………………………………….. 198

Кодирование журнала…………………………………………………………………………………………. 199

Разрешение журнала……………………………………………………………………………………………. 199

Задержка записи в журнал: пакетный режим
или режим реального времени…………………………………………………………………………….. 199

Журналы базы данных………………………………………………………………………………………………… 199

CRUD……………………………………………………………………………………………………………………………… 200

Только вставка……………………………………………………………………………………………………………… 201

Сообщения и потоки…………………………………………………………………………………………………….. 201

Типы времени………………………………………………………………………………………………………………… 203

Исходные системы: практические сведения………………………………………………………………………….. 203

Базы данных…………………………………………………………………………………………………………………. 204

Основные соображения для понимания технологий баз данных……………………. 204

Реляционные базы данных………………………………………………………………………………….. 205

Нереляционные базы данных: NoSQL……………………………………………………………….. 206

API………………………………………………………………………………………………………………………………….. 213

REST………………………………………………………………………………………………………………………. 213

GraphQL………………………………………………………………………………………………………………… 214

Веб-хуки………………………………………………………………………………………………………………… 214

RPC и gRPC…………………………………………………………………………………………………………… 215

Совместное использование данных……………………………………………………………………………. 215

Сторонние источники данных…………………………………………………………………………………….. 216

Очереди сообщений и платформы потоковой передачи событий…………………………… 217

Очереди сообщений……………………………………………………………………………………………… 217

Платформы потоковой передачи событий………………………………………………………… 219

С кем вам предстоит работать……………………………………………………………………………………………….. 221

Фоновые процессы и их влияние на исходные системы………………………………………………………. 222

Безопасность…………………………………………………………………………………………………………………. 223

Управление данными…………………………………………………………………………………………………… 223

DataOps………………………………………………………………………………………………………………………….. 224

Архитектура данных……………………………………………………………………………………………………. 225

Оркестровка………………………………………………………………………………………………………………….. 226

Программная инженерия……………………………………………………………………………………………… 226

Заключение………………………………………………………………………………………………………………………………. 227

Дополнительные ресурсы……………………………………………………………………………………………………….. 227

Глава 6. Хранение………………………………………………………………………………… 229

Базовые компоненты для хранения данных………………………………………………………………………….. 231

Накопитель на жестких магнитных дисках (HDD)……………………………………………………. 231

Твердотельный накопитель…………………………………………………………………………………………. 233

Оперативная память и оперативное запоминающее устройство (ОЗУ)………………….. 234

Сети и центральный процессор…………………………………………………………………………………… 235

Сериализация……………………………………………………………………………………………………………….. 236

Сжатие…………………………………………………………………………………………………………………………… 237

Кеширование………………………………………………………………………………………………………………… 237

Системы хранения данных……………………………………………………………………………………………………… 238

Хранилище на одной машине в сравнении с распределенным хранилищем…………. 238

Согласованность в конечном счете в сравнении с сильной согласованностью…….. 239

Файловое хранилище…………………………………………………………………………………………………… 240

Локальное дисковое хранилище…………………………………………………………………………. 241

Сетевое хранилище……………………………………………………………………………………………… 242

Сервисы облачных файловых систем………………………………………………………………… 242

Блочное хранилище……………………………………………………………………………………………………… 243

Приложения блочного хранения данных…………………………………………………………… 243

RAID………………………………………………………………………………………………………………………. 243

Сеть хранения данных…………………………………………………………………………………………. 244

Облачное виртуализированное блочное хранилище……………………………………….. 244

Локальные экземпляры томов…………………………………………………………………………….. 245

Объектное хранилище………………………………………………………………………………………………….. 246

Объектные хранилища для приложений инженерии данных………………………….. 248

Поиск объектов…………………………………………………………………………………………………….. 249

Согласованность и версии объектов………………………………………………………………….. 250

Классы и уровни хранения данных……………………………………………………………………. 251

Файловые системы с хранилищем объектов……………………………………………………… 252

Системы хранения данных на основе памяти и кеша……………………………………………….. 253

Пример: Memcached и легкое кеширование объектов……………………………………… 253

Пример: Redis, кеширование памяти с дополнительной персистентностью….. 253

Распределенная файловая система Hadoop (HDFS)…………………………………………………. 253

Hadoop мертв. Да здравствует Hadoop!…………………………………………………………….. 254

Потоковое хранилище………………………………………………………………………………………………….. 254

Индексы, разбиение и кластеризация…………………………………………………………………………. 255

Эволюция от строк к столбцам…………………………………………………………………………… 255

От индексов к разделам и кластеризации………………………………………………………….. 256

Пример: Микроразбиение Snowflake…………………………………………………………………. 256

Абстракции хранения в инженерии данных………………………………………………………………………….. 257

Хранилище данных………………………………………………………………………………………………………. 258

Озеро данных………………………………………………………………………………………………………………… 258

Хранилище Data Lakehouse………………………………………………………………………………………… 259

Платформы данных……………………………………………………………………………………………………… 259

Архитектура потоково-пакетного хранения данных………………………………………………… 260

Выдающиеся идеи и тенденции в области хранения данных……………………………………………… 260

Каталог данных……………………………………………………………………………………………………………. 261

Интеграция приложения и каталога…………………………………………………………………… 261

Автоматизированное сканирование…………………………………………………………………… 261

Портал данных и социальный уровень……………………………………………………………… 261

Варианты использования каталога данных……………………………………………………… 261

Совместное использование данных……………………………………………………………………………. 262

Схема…………………………………………………………………………………………………………………………….. 262

Разделение вычислений и хранения……………………………………………………………………………. 263

Колокация вычислительных систем и хранения данных…………………………………. 263

Разделение вычислений и хранения данных……………………………………………………… 263

Гибридный подход к разделению и колокации…………………………………………………. 264

Клонирование с нулевым копированием…………………………………………………………… 266

Жизненный цикл хранения данных и их сохранность……………………………………………… 267

Горячие, теплые и холодные данные…………………………………………………………………. 267

Сохранность данных…………………………………………………………………………………………… 269

Одноарендные и мультиарендные системы хранения данных………………………………… 270

С кем вам предстоит работать……………………………………………………………………………………………….. 272

Фоновые процессы…………………………………………………………………………………………………………………… 272

Безопасность…………………………………………………………………………………………………………………. 272

Управление данными…………………………………………………………………………………………………… 273

Каталоги данных и управление метаданными…………………………………………………. 273

Версии данных в объектном хранилище……………………………………………………………. 273

Конфиденциальность…………………………………………………………………………………………… 273

DataOps………………………………………………………………………………………………………………………….. 274

Мониторинг систем……………………………………………………………………………………………… 274

Наблюдаемость и мониторинг данных……………………………………………………………… 274

Архитектура данных……………………………………………………………………………………………………. 274

Оркестровка………………………………………………………………………………………………………………….. 275

Программная инженерия……………………………………………………………………………………………… 275

Заключение………………………………………………………………………………………………………………………………. 275

Дополнительные ресурсы……………………………………………………………………………………………………….. 275

Глава 7. Поглощение данных………………………………………………………………. 277

Что такое поглощение данных?……………………………………………………………………………………………… 277

Ключевые инженерные особенности фазы поглощения………………………………………………………. 279

Ограниченность и неограниченность данных…………………………………………………………… 279

Частота………………………………………………………………………………………………………………………….. 280

Синхронное и асинхронное поглощение……………………………………………………………………. 282

Сериализация и десериализация………………………………………………………………………………… 283

Пропускная способность и масштабируемость………………………………………………………… 283

Надежность и устойчивость………………………………………………………………………………………… 284

Полезная нагрузка………………………………………………………………………………………………………… 285

Род…………………………………………………………………………………………………………………………. 285

Форма……………………………………………………………………………………………………………………. 285

Размер……………………………………………………………………………………………………………………. 286

Схема и типы данных………………………………………………………………………………………….. 286

Метаданные………………………………………………………………………………………………………….. 287

Модели Push, Pull и Poll………………………………………………………………………………………………… 288

Особенности пакетного поглощения данных……………………………………………………………………….. 289

Мгновенные снимки или дифференциальное извлечение…………………………………………. 290

Экспорт и поглощение данных на основе файлов…………………………………………………….. 290

ETL в сравнении с ELT…………………………………………………………………………………………………. 290

Вставки, обновления и размер пакета………………………………………………………………………… 291

Миграция данных…………………………………………………………………………………………………………. 291

Особенности поглощения сообщений и потоков………………………………………………………………….. 292

Эволюция схем……………………………………………………………………………………………………………… 292

Данные, поступающие с задержкой……………………………………………………………………………. 292

Порядок и многократная доставка……………………………………………………………………………… 293

Воспроизведение………………………………………………………………………………………………………….. 293

Время жизни………………………………………………………………………………………………………………….. 293

Размер сообщения………………………………………………………………………………………………………… 294

Обработка ошибок и очереди недоставленных сообщений…………………………………….. 294

Pull и Push для потребителей……………………………………………………………………………………….. 294

Местоположение………………………………………………………………………………………………………….. 295

Способы поглощения данных………………………………………………………………………………………………… 295

Прямое подключение к базе данных…………………………………………………………………………… 295

Захват изменения данных……………………………………………………………………………………………. 297

Пакетно-ориентированный CDC………………………………………………………………………… 297

Непрерывный CDC………………………………………………………………………………………………. 297

CDC и репликация баз данных……………………………………………………………………………. 298

Особенности CDC………………………………………………………………………………………………… 298

API………………………………………………………………………………………………………………………………….. 299

Очереди сообщений и платформы потоковой передачи событий…………………………… 300

Управляемые коннекторы данных……………………………………………………………………………… 301

Перемещение данных с помощью объектного хранилища………………………………………. 302

EDI…………………………………………………………………………………………………………………………………. 302

Базы данных и экспорт файлов…………………………………………………………………………………… 302

Практические вопросы, связанные с распространенными форматами файлов……… 303

Оболочка……………………………………………………………………………………………………………………….. 304

SSH…………………………………………………………………………………………………………………………………. 304

SFTP и SCP…………………………………………………………………………………………………………………….. 305

Веб-хуки………………………………………………………………………………………………………………………… 305

Веб-интерфейс………………………………………………………………………………………………………………. 306

Веб-скрейпинг……………………………………………………………………………………………………………….. 306

Устройства переноса для миграции данных……………………………………………………………… 307

Совместное использование данных……………………………………………………………………………. 308

С кем вам предстоит работать……………………………………………………………………………………………….. 308

Заинтересованные стороны выше по потоку обработки………………………………………….. 308

Заинтересованные стороны ниже по потоку обработки………………………………………….. 309

Фоновые процессы…………………………………………………………………………………………………………………… 309

Безопасность…………………………………………………………………………………………………………………. 310

Управление данными…………………………………………………………………………………………………… 310

Изменения схемы………………………………………………………………………………………………….. 310

Этика работы с данными, конфиденциальность и соответствие
нормативным требованиям…………………………………………………………………………………. 311

DataOps………………………………………………………………………………………………………………………….. 312

Проверка качества данных…………………………………………………………………………………. 313

Оркестровка………………………………………………………………………………………………………………….. 314

Программная инженерия……………………………………………………………………………………………… 315

Заключение………………………………………………………………………………………………………………………………. 315

Дополнительные ресурсы……………………………………………………………………………………………………….. 316

Глава 8. Запросы, моделирование и преобразование……………………………. 317

Запросы…………………………………………………………………………………………………………………………………….. 318

Что такое запрос?…………………………………………………………………………………………………………. 318

DDL. Язык описания данных………………………………………………………………………………. 319

DML. Язык манипулирования данными…………………………………………………………….. 319

DCL. Язык управления данными………………………………………………………………………… 319

TCL. Язык управления транзакциями………………………………………………………………… 320

Жизненный цикл запроса…………………………………………………………………………………………….. 320

Оптимизатор запросов…………………………………………………………………………………………………. 321

Повышение производительности запросов………………………………………………………………… 321

Оптимизируйте стратегию и схему соединения………………………………………………… 321

Планируйте выполнение и разберитесь в производительности запроса………… 323

Избегайте полного сканирования таблиц………………………………………………………….. 323

Изучите, как ваша база данных обрабатывает фиксации……………………………….. 324

Очистите базу данных от «мертвых» записей…………………………………………………… 326

Кешируйте результаты запросов……………………………………………………………………….. 327

Запросы к потоковым данным…………………………………………………………………………………….. 327

Основные шаблоны запросов к потокам……………………………………………………………. 328

Окна, триггеры, выдаваемая статистика и данные,
поступающие с задержкой………………………………………………………………………………….. 329

Объединение потоков с другими данными………………………………………………………… 332

Моделирование данных………………………………………………………………………………………………………….. 334

Что такое модель данных?…………………………………………………………………………………………… 335

Концептуальная, логическая и физическая модели данных…………………………………….. 336

Нормализация………………………………………………………………………………………………………………. 337

Методы моделирования пакетных аналитических данных…………………………………….. 341

Подход Инмона…………………………………………………………………………………………………….. 341

Подход Кимбалла………………………………………………………………………………………………… 344

Модель Data Vault……………………………………………………………………………………………….. 348

Широкие денормализованные таблицы…………………………………………………………….. 352

Моделирование потоковых данных…………………………………………………………………………… 354

Преобразования……………………………………………………………………………………………………………………….. 356

Пакетные преобразования…………………………………………………………………………………………… 357

Распределенные соединения……………………………………………………………………………….. 357

ETL, ELT и конвейеры обработки данных…………………………………………………………. 359

Средства преобразования на основе SQL и кода……………………………………………… 360

Шаблоны обновлений………………………………………………………………………………………….. 363

Изменения схемы………………………………………………………………………………………………….. 366

Выпас данных………………………………………………………………………………………………………. 367

Пример: Преобразование данных в Spark…………………………………………………………. 368

Бизнес-логика и производные данные……………………………………………………………….. 368

Модель MapReduce……………………………………………………………………………………………… 370

После MapReduce………………………………………………………………………………………………… 371

Материализованные представления, федерация и виртуализация запросов…………. 372

Представления……………………………………………………………………………………………………… 372

Материализованные представления………………………………………………………………….. 372

Составные материализованные представления……………………………………………….. 373

Федеративные запросы……………………………………………………………………………………….. 373

Виртуализация данных……………………………………………………………………………………….. 374

Потоковые преобразования и обработка…………………………………………………………………… 375

Основы…………………………………………………………………………………………………………………… 375

Преобразования и запросы представляют собой континуум………………………….. 376

Потоковые DAG……………………………………………………………………………………………………. 376

Микропакетный и истинно потоковый подходы………………………………………………. 377

С кем вам предстоит работать……………………………………………………………………………………………….. 378

Заинтересованные стороны выше по потоку обработки………………………………………….. 378

Заинтересованные стороны ниже по потоку обработки………………………………………….. 379

Фоновые процессы…………………………………………………………………………………………………………………… 379

Безопасность…………………………………………………………………………………………………………………. 379

Управление данными…………………………………………………………………………………………………… 380

DataOps………………………………………………………………………………………………………………………….. 381

Архитектура данных……………………………………………………………………………………………………. 381

Оркестровка………………………………………………………………………………………………………………….. 382

Программная инженерия……………………………………………………………………………………………… 382

Заключение………………………………………………………………………………………………………………………………. 383

Дополнительные ресурсы……………………………………………………………………………………………………….. 384

Глава 9. Предоставление данных для аналитики, машинного обучения и обратного ETL         386

Общие рекомендации по предоставлению данных………………………………………………………………. 387

Доверие………………………………………………………………………………………………………………………….. 387

Каков сценарий использования и кто будет пользователем?…………………………………… 388

Информационные продукты………………………………………………………………………………………… 389

Самостоятельная работа или нет?……………………………………………………………………………… 390

Описание данных и логика………………………………………………………………………………………….. 392

Сеть данных………………………………………………………………………………………………………………….. 393

Аналитика………………………………………………………………………………………………………………………………… 393

Бизнес-аналитика…………………………………………………………………………………………………………. 394

Операционная аналитика……………………………………………………………………………………………. 396

Встроенная аналитика…………………………………………………………………………………………………. 398

Машинное обучение……………………………………………………………………………………………………………….. 399

Что должен знать инженер данных о машинном обучении…………………………………………………. 400

Способы предоставления данных для аналитики и машинного обучения………………………… 401

Обмен файлами…………………………………………………………………………………………………………….. 402

Базы данных…………………………………………………………………………………………………………………. 403

Потоковые системы………………………………………………………………………………………………………. 404

Федеративные запросы………………………………………………………………………………………………… 404

Совместное использование данных……………………………………………………………………………. 405

Семантические и метрические слои……………………………………………………………………………. 406

Предоставление данных в блокнотах………………………………………………………………………… 407

Обратный ETL………………………………………………………………………………………………………………………….. 409

С кем вам предстоит работать……………………………………………………………………………………………….. 411

Фоновые процессы…………………………………………………………………………………………………………………… 412

Безопасность…………………………………………………………………………………………………………………. 412

Управление данными…………………………………………………………………………………………………… 413

DataOps………………………………………………………………………………………………………………………….. 414

Архитектура данных……………………………………………………………………………………………………. 415

Оркестровка………………………………………………………………………………………………………………….. 415

Программная инженерия……………………………………………………………………………………………… 416

Заключение………………………………………………………………………………………………………………………………. 416

Дополнительные ресурсы……………………………………………………………………………………………………….. 417

Часть III. Безопасность, конфиденциальность
и будущее инженерии данных……………………………………………….. 419

Глава 10. Безопасность и конфиденциальность……………………………………. 421

Люди…………………………………………………………………………………………………………………………………………. 422

Сила негативного мышления………………………………………………………………………………………. 422

Всегда будьте параноиками………………………………………………………………………………………… 423

Процессы………………………………………………………………………………………………………………………………….. 423

Театр безопасности или привычки соблюдения безопасности……………………………….. 423

Активная безопасность………………………………………………………………………………………………… 424

Принцип наименьших привилегий………………………………………………………………………………. 424

Разделение ответственности в облаке………………………………………………………………………… 425

Всегда создавайте резервные копии данных…………………………………………………………….. 425

Пример политики безопасности………………………………………………………………………………….. 425

Технологии……………………………………………………………………………………………………………………………….. 427

Системы исправлений и обновлений………………………………………………………………………….. 427

Шифрование………………………………………………………………………………………………………………….. 427

Шифрование в состоянии покоя………………………………………………………………………….. 427

Шифрование при передаче по сети…………………………………………………………………….. 427

Ведение журнала, мониторинг и оповещение……………………………………………………………. 428

Доступ к сети………………………………………………………………………………………………………………… 429

Безопасность при низкоуровневой инженерии данных……………………………………………. 430

Исследование вопросов внутренней безопасности…………………………………………… 430

Заключение………………………………………………………………………………………………………………………………. 431

Дополнительные ресурсы……………………………………………………………………………………………………….. 431

Глава 11. Будущее инженерии данных…………………………………………………. 432

Жизненный цикл инженерии данных никуда не денется……………………………………………………… 432

Снижение сложности и подъем простых в использовании инструментов обработки данных 433

Облачная ОС данных и улучшение взаимодействия……………………………………………………………. 434

«Корпоративная» инженерия данных……………………………………………………………………………………. 436

Названия и обязанности будут меняться………………………………………………………………………………. 437

Переход от современного стека данных к потоковому………………………………………………………… 438

Потоковый стек данных……………………………………………………………………………………………….. 439

Потоковые конвейеры и аналитические базы данных реального времени…………….. 439

Объединение данных и приложений…………………………………………………………………………… 441

Сильная обратная связь между приложениями и машинным обучением……………….. 441

Темная материя в сфере данных и восход… электронных таблиц?!………………………… 442

Заключение………………………………………………………………………………………………………………………………. 442

Приложение А. Технические детали сериализации и сжатия……………….. 444

Форматы сериализации…………………………………………………………………………………………………………… 444

Сериализация на основе строк……………………………………………………………………………………. 444

CSV: Нестандартный стандарт………………………………………………………………………….. 444

XML……………………………………………………………………………………………………………………….. 445

JSON и JSONL……………………………………………………………………………………………………….. 445

Avro……………………………………………………………………………………………………………………….. 445

Сериализация столбцов……………………………………………………………………………………………….. 445

Parquet…………………………………………………………………………………………………………………… 446

ORC……………………………………………………………………………………………………………………….. 447

Apache Arrow или сериализация в памяти…………………………………………………………. 447

Гибридная сериализация…………………………………………………………………………………………….. 448

Hudi……………………………………………………………………………………………………………………….. 448

Iceberg……………………………………………………………………………………………………………………. 449

Подсистема хранения базы данных………………………………………………………………………………………. 449

Сжатие: gzip, bzip2, Snappy и т. д…………………………………………………………………………………………… 449

Приложение Б. Облачные сети…………………………………………………………….. 451

Топология облачных сетей…………………………………………………………………………………………………….. 451

Плата за извлечение данных……………………………………………………………………………………….. 451

Зоны доступности………………………………………………………………………………………………………… 451

Регионы………………………………………………………………………………………………………………………….. 452

Специфические для GCP сети и мультирегиональное резервирование…………………… 453

Прямые сетевые подключения к облачным сервисам……………………………………………….. 454

CDN…………………………………………………………………………………………………………………………………………… 454

Будущее платы за извлечение данных………………………………………………………………………………….. 454

Предметный указатель…………………………………………………………………………. 456

Об авторах……………………………………………………………………………………………. 462

Об изображении на обложке………………………………………………………………… 463

Джо Рис

Джо Рис (Joe Reis) — специалист по инженерии и архитектуре данных для enterprise-задач

 

 

Мэтт Хоусли

Мэтт Хоусли (Matt Housley) — консультант по инженерии данных и облачным технологиям

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

Машинное обучение с использованием Python. Сборник рецептов: практические решения от предобработки до глубокого обучения, 2 изд.

Машинное обучение с использованием Python. Сборник рецептов.

Книга содержит около 200 задач машинного обучения, таких как загрузка и обработка текстовых или числовых данных, отбор модели и многие другие. Рассмотрена работа с языком Python, библиотеками pandas и scikit-learn. Коды примеров можно вставлять, объединять и адаптировать, создавая собственное приложение. Приведены рецепты решений с использованием: векторов, матриц и массивов; данных из CSV, JSON, SQL, баз данных, облачных хранилищ и других источников; обработки данных, текста, изображений, дат и времени; умень-шения размерности и методов выделения или отбора признаков; оценивания и отбора моделей; линейной и логистической регрессии, деревьев, лесов и k ближайших соседей; опорно-векторных машин (SVM), наивных байесовых классификаторов, кластеризации и нейронных сетей; сохранения и загрузки натренированных моделей.
Во втором издании все примеры обновлены, рассмотрены задачи и фреймворки глубокого обучения, расширены разделы с тензорами, нейронными сетями и библиотекой глубокого обучения PyTorch.

Для разработчиков систем машинного обучения

В книге Вы найдете рецепты для:

  • векторов, матриц и массивов;
  • работы с данными из CSV, JSON, SQL, базами данных, облачными хранилищами и другими источниками;
  • обработки числовых и категориальных данных, текста, изображений, дат и времени;
  • уменьшения размерности с использованием методов выделения или отбора признаков;
  • оценивания и отбора моделей;
  • сохранения и загрузки натренированных моделей.

Научитесь решать задачи с использованием:

  • линейной и логистической регрессии, деревьев, лесов и k ближайших соседей;
  • опорно-векторных машин (SVM), наивных байесовых классификаторов, кластеризации и нейронных сетей.

Крис успешно воспользовался форматом книги рецептов. В ней есть простые и понятные учебные задачи для начинающих специалистов, ценная информация для самоподготовки перед собеседованием на должность аналитика данных, полезные для опытных профессиона-лов ссылки и многое другое. Книгу также удобно использовать как краткий, но всесторонний справочник.Джастин Бозонье

Листать

Для кого предназначена книга

Данная книга не является введением в машинное (само)обучение. Если вы не чувствуете себя уверенно в области основных понятий машинного обучения либо никогда не проводили время за изучением машинного обучения, то не покупайте эту книгу. Она предназначена для практикующих специалистов машинного обучения, которые, чувствуя себя комфортно с теорией и понятиями машинного обучения, извлекут пользу из краткого справочника, содержащего программный код для решения задач, с которыми они сталкиваются, работая ежедневно с машинным обучением.

Для кого не предназначена книга

Данная книга не должна быть вашим первым изданием по этой теме. Если вы незнакомы с такими понятиями, как перекрестная проверка, случайный лес и градиентный спуск, то вы, вероятно, не извлечете из этой книги такой же пользы, которую можно получить от одного из многих высококачественных текстов, специально предназначенных для ознакомления с этой темой. Я рекомендую прочитать одну из таких книг, а затем вернуться к этой книге, чтобы узнать рабочие, практические решения для задач машинного обучения.

Книгу “Машинное обучение с использованием Python. Сборник рецептов: практические решения от предобработки до глубокого обучения, 2 изд. можно купить со скидкой в интернет-магазине издательства “БХВ“.

Кайл Галлатин

Кайл Галлатин (Kyle Gallatin) — инженер-программист команды разработчиков ПО для крупнейшей торговой площадки Etsy с многолетним опытом работы в качестве аналитика данных, специалиста по данным и инженера по машинному обучению.

 

 

Chris Albon

Крис Элбон (Chris Albon) — аналитик данных и политолог с десятилетним опытом применения статистического обучения, искусственного интеллекта и разработки программного обеспечения для политических, социальных и гуманитарных проектов — от мониторинга выборов до оказания помощи в случае стихийных бедствий. В настоящее время является ведущим аналитиком данных в компании BRCK, продвигающей интернет-технологии на африканский рынок.

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

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

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

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

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

3-е издание: “Внутреннее устройство Linux”

Внутреннее устройство Linux, 3 изд.

Эта книга — введение во внутреннее устройство ОС Linux. Рассмотрены основные подсистемы ядра и их сущности, механизмы контроля доступа и привилегии, принципы и механизмы контейнеризации. Уделено внимание компонентам, подсистемам Linux и их функционированию как единой системы. Подробно описано пользовательское окружение, интерфейс командной строки CLI, язык командного интерпретатора и его использование для автоматизации актуальных задач. Все положения наглядно проиллюстрированы  примерами,  разработанными автором и проверенными им на практике.

В 3-м издании описаны механизмы принудительного разграничения доступа и контроля целостности, уникальные для российского защищенного дистрибутива Astra Linux и операционных систем в целом.  Учтены последние изменения в компонентах ОС и обновлены листинги примеров. Расширена глава про сетевую подсистему, добавлена глава по современным средствам трассировки, измерения нагрузки и мониторинга производительности.

 Для студентов, пользователей, программистов и системных администраторов Linux

Книга, которую вы держите в руках, адресована студентам, начинающим пользователям, программистам и системным администраторам операционной системы Linux. Она представляет собой введение во внутреннее устройство Linux — от ядра до сетевых служб и от утилит командной строки до графического интерфейса.
Все части операционной системы рассматриваются в контексте типичных задач, решаемых на практике, и поясняются при помощи соответствующего инструментария пользователя, администратора и разработчика.
Все положения наглядно проиллюстрированы примерами, разработанными и проверенными автором с целью привить читателю навыки самостоятельного исследования постоянно эволюционирующей операционной системы Linux.

Совет для начинающих

И напоследок, самый важный совет для начинающих — начните!
Цитата из книги

  • Импортозамещение и российский Linux: все, что вы хотели знать
  • Пользовательское окружение и интерфейс командной строки CLI
  • Файлы, каталоги и файловые системы
  • Процессы и нити, каналы, сокеты и разделяемая память
  • Дискреционное и мандатное разграничение доступа, мандатный контроль целостности и привилегии процессов
  • Сетевая подсистема и службы
  • Графический интерфейс GUI: оконные системы X Window и Wayland
  • Программирование на языке командного интерпретатора
  • Контейнеры и виртуализация
  • От отдельных компонент — к системе: Linux своими руками
  • Нагрузка, производительность, мониторинг и трассировка

Книгу “Внутреннее устройство Linux, 3 изд.” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие. 9

Импортозамещение и российский Linux: все, что вы хотели знать,
но боялись спросить. 9

Сертифицированные операционные системы.. 10

Другие операционные системы.. 11

Введение. 12

О чем эта книга?. 12

Кому адресована книга. 13

Принятые соглашения и обозначения. 14

Методические рекомендации.. 15

Что должен знать читатель. 16

Совет для начинающих. 19

Глава 1. Архитектура ОС Linux. 20

1.1. Обзор внутреннего устройства. 20

1.2. Внеядерные компоненты: программы и библиотеки.. 22

1.3. Ядерные компоненты: подсистемы управления процессами, памятью, вводом-выводом, файлами   22

1.4. Трассировка системных и библиотечных вызовов. 23

1.5. Интерфейсы прикладного программирования. 25

1.6. В заключение. 26

Глава 2. Пользовательское окружение ОС Linux. 27

2.1. Командный интерфейс. 27

2.2. Виртуальные терминалы.. 29

2.2.1. Псевдотерминалы.. 31

2.3. Управляющие символы.. 33

2.4. Управляющие последовательности.. 40

2.5. Основной синтаксис командной строки.. 43

2.5.1. Опции командной строки.. 45

2.6. Справочные системы.. 46

2.6.1. Система страниц руководства. 46

2.6.2. Справочная система GNU.. 50

2.6.3. Встроенная справка командного интерпретатора. 50

2.7. Пользователи и группы.. 51

2.7.1. Передача полномочий.. 53

2.7.2. Хранилища учетных записей.. 54

2.8. Переменные окружения и конфигурационные dot-файлы.. 55

2.9. В заключение. 62

Глава 3. Подсистема управления файлами и вводом-выводом.. 63

3.1. Файлы и дерево каталогов. 63

3.1.1. Путевые имена файлов. 64

3.2. Типы файлов. 65

3.2.1. Обычные файлы.. 66

3.2.2. Каталоги.. 67

3.2.3. Имена, данные, метаданные и индексные дескрипторы.. 68

3.2.4. Ссылки.. 69

3.2.5. Специальные файлы устройств. 73

3.2.6. Именованные каналы и файловые сокеты.. 76

3.3. Файловые дескрипторы.. 77

3.4. Файловые системы.. 80

3.4.1. Файловые системы и процедура монтирования. 80

3.4.2. Дисковые файловые системы.. 82

3.4.3. Сетевые файловые системы.. 83

3.4.4. Специальные файловые системы.. 85

3.4.5. Внеядерные файловые системы.. 86

3.5. Дискреционное разграничение доступа. 90

3.5.1. Владельцы и режим доступа к файлам.. 91

3.5.2. Базовые права доступа и дополнительные атрибуты.. 92

Режим доступа новых файлов. 94

Семантика режима доступа разных типов файлов. 95

Дополнительные атрибуты.. 97

3.5.3. Списки контроля доступа POSIX. 101

Групповая маска. 103

Права по умолчанию.. 104

3.6. Мандатное (принудительное) разграничение доступа. 105

3.6.1. Модуль принудительного разграничения доступа AppArmor. 107

3.6.2. Модуль принудительного разграничения доступа SELinux. 109

3.6.3. Модуль принудительного разграничения доступа Astra Linux. 114

3.7. Дополнительные свойства файлов. 125

3.7.1. Расширенные атрибуты файлов. 125

3.7.2. Флаги файлов. 127

3.8. В заключение. 128

Глава 4. Управление процессами и памятью.. 129

4.1. Программы и библиотеки.. 129

4.1.1. Ядро Linux. 132

4.2. Процессы и нити.. 135

4.3. Порождение процессов и нитей, запуск программ.. 139

4.3.1. Параллельные многопроцессные программы.. 143

4.3.2. Параллельные многонитевые программы.. 144

4.3.3. Двойственность процессов и нитей Linux. 148

4.4. Дерево процессов. 150

4.5. Атрибуты процесса. 152

4.5.1. Маркеры доступа. 153

4.5.2. Привилегии.. 156

4.5.3. Другие атрибуты.. 160

4.6. Классы и приоритеты процессов. 160

4.6.1. Распределение процессора между процессами.. 160

4.6.2. Распределение устройств ввода-вывода между процессами.. 167

4.7. Память процесса. 176

4.7.1. Виртуальная память. 177

4.7.2. Отображение файлов в память. 179

4.7.3. Потребление памяти.. 183

4.8. Механизм сигналов. 187

4.8.1. Сеансы и группы процессов: управление заданиями.. 192

4.9. Межпроцессное взаимодействие. 195

4.9.1. Неименованные каналы.. 196

4.9.2. Именованные каналы.. 197

4.9.3. Неименованные локальные сокеты.. 198

4.9.4. Именованные локальные сокеты.. 200

4.9.5. Разделяемая память, семафоры и очереди сообщений.. 202

Разделяемая память. 202

Семафоры и очереди сообщений.. 206

4.10. В заключение. 207

Глава 5. Программирование на языке командного интерпретатора. 209

5.1. Интерпретаторы и их сценарии.. 209

5.2. Встроенные и внешние команды.. 211

5.3. Перенаправление потоков ввода-вывода. 212

5.4. Подстановки командного интерпретатора. 218

5.4.1. Подстановки имен файлов. 218

5.4.2. Подстановки параметров. 220

Переменные — именованные параметры.. 220

Позиционные параметры.. 223

Специальные параметры.. 224

5.4.3. Подстановки вывода команд. 225

5.4.4. Подстановки арифметических выражений.. 227

5.5. Экранирование. 230

5.6. Списки команд. 233

5.6.1. Условные списки.. 234

5.6.2. Составные списки: ветвление. 236

5.6.3. Составные списки: циклы.. 241

5.6.4. Функции.. 246

5.7. Сценарии на языке командного интерпретатора. 249

5.8. Инструментальные средства обработки текста. 252

5.8.1. Фильтр строк grep. 253

5.8.2. Фильтр символов и полей cut 255

5.8.3. Процессор текстовых таблиц awk. 256

5.8.4. Потоковый редактор текста sed. 257

5.9. В заключение. 261

Глава 6. Сетевая подсистема. 262

6.1. Сетевые интерфейсы, протоколы и сетевые сокеты.. 262

6.2. Конфигурирование сетевых интерфейсов и протоколов. 266

6.2.1. Ручное конфигурирование. 266

6.2.2. Автоматическое конфигурирование. 268

6.3. Служба имен и DNS/mDNS-резолверы.. 276

6.4. Сетевые службы.. 281

6.4.1. Служба SSH.. 281

6.4.2. Почтовые службы SMTP, POP/IMAP. 289

6.4.3. Служба WWW… 292

6.4.4. Служба FTP. 294

6.4.5. Служба NFS. 296

NFS-клиент. 296

NFS-сервер. 297

6.4.6. Служба SMB/CIFS. 298

Имена NetBIOS. 299

CIFS-клиенты.. 300

6.4.7. Служба каталогов LDAP. 302

Служба имен и пользовательские учетные записи.. 306

6.5. Средства сетевой диагностики.. 307

6.5.1. Анализаторы пакетов tcpdump и tshark. 307

6.5.2. Сетевой сканер nmap. 310

6.5.3. Мониторинг сетевых соединений процессов. 311

6.6. В заключение. 313

Глава 7. Графическая система X Window System… 315

7.1. X-сервер. 315

7.2. X-клиенты и X-протокол. 317

7.3. Оконные менеджеры.. 322

7.3.1. Декорирование на клиентской стороне. 325

7.4. Настольные пользовательские окружения. 327

7.5. Библиотеки интерфейсных элементов. 329

7.6. Расширения Х-протокола. 332

7.6.1. Расширение Composite и композитный менеджер. 334

7.6.2. GLX, DRI и 3D-графика. 336

7.7. Запуск X Window System… 338

7.7.1. Локальный запуск X-клиентов. 338

7.7.2. Дистанционный запуск X-клиентов. 338

7.7.3. Управление X-дисплеями: XDMCP-менеджер и протокол. 341

7.8. Программный интерфейс X Window System… 342

7.8.1. Трассировка X-библиотек и X-протокола. 342

7.8.2. 3D-графика и инфраструктура прямого рендеринга DRI 348

7.9. В заключение. 354

Глава 8. Графическая система Wayland. 356

8.1. Wayland-композитор. 358

8.2. Wayland-клиенты и Wayland-протокол. 359

8.3. Запуск графической среды на основе Wayland. 365

8.4. В заключение. 366

Глава 9. Контейнеры и виртуальные машины.. 367

9.1. Чрутизация. 368

9.2. Пространства имен.. 372

9.3. Контейнеризация: runc и docker. 377

9.4. Группы управления (cgroups). 381

9.5. В заключение. 385

Глава 10. От отдельных компонент — к системе. 386

10.1. Как Linux загружается. 386

10.2. Как обнаруживаются драйверы устройств. 390

10.3. Как запускаются системные службы.. 393

10.4. Linux своими руками.. 402

10.5. В заключение. 411

Глава 11. Нагрузка, производительность, мониторинг и трассировка. 412

11.1. Метрики и инструменты измерения нагрузки и производительности.. 412

11.1.1. Центральный процессор и память. 412

11.1.2. Устройства ввода-вывода. 420

11.2. Мониторинг и трассировка. 424

11.2.1. Трассировка и отладка программ.. 426

11.3. В заключение. 439

Заключение. 440

Список литературы.. 442

Для удовольствия. 442

Начинающим.. 442

Программистам.. 442

Бесстрашным.. 443

Предметный указатель. 444

Кетов Дмитрий Владимирович, ведущий преподаватель в области операционных систем и сетевых технологий Санкт-Петербургского политехнического университета (СПбПУ) с многолетним стажем, начальник отдела разработки программного обеспечения Санкт-Петербургского филиала АО “Концерн радиостроения «Вега»”. Профессионально занимается теорией построения и практикой разработки операционных систем и системного программного обеспечения.

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

Суперхит: “Изучаем DDD – предметно-ориентированное проектирование”

Изучаем DDD – предметно-ориентированное проектирование

Книга посвящена методологии DDD (предметно-ориентированному проектированию), что особенно актуально в условиях дробления предметных областей и усложнения бизнес-взаимодействий. Рассказано, как оценить масштаб и сложность предметной области, измерить темпы её развития, учесть необходимые зависимости, применять событийно-ориентированную архитектуру и структурировать создаваемое ПО, эффективно вписывая его в сеть данных (Data Mesh). Материал будет особенно интересен при развитии стартапа и разработке наукоёмких отраслевых систем.

 Для архитекторов ПО, бизнес-аналитиков и разработчиков корпоративного программного обеспечения  

Сегодня создавать  программное обеспечение стало сложно как никогда. Приходится не только учитывать постоянно меняющиеся технологические тренды, но и понимать ту предметную область (бизнес), для которой оно создаётся.

В этой практичной книге приведён ключевой набор паттернов, принципов и практик для анализа предметной области, понимания стратегий бизнеса и, что самое важное, соотнесение процесса разработки с меняющимися потребностями заказчика.

Автор показывает, как при помощи этих практик надёжно реализовать бизнес-логику, а также обеспечить прочность программной архитектуры на годы вперёд. Вы исследуете, как предметно-ориентированное проектирование (DDD – domain-driven design) соотносится с другими методологиями, и гарантируете, что принимаемые архитектурные решения соответствуют предъявляемым бизнес-требованиям. В книге подробно разобрано внедрение DDD в рамках стартапа.

Вы узнаете, как

  • Проанализировать предметную область, в которой работает компания, и определить, как создаваемая система вписывается в эту область и обеспечивает конкурентное преимущество
  • Пользоваться стратегическими и тактическими средствами DDD для выстраивания эффективных программных решений, удовлетворяющих потребности заказчика
  • Приходить к общему пониманию любой предметной области, с которой приходится иметь дело
  • Разбивать систему на ограниченные контексты
  • Координировать работу сразу нескольких команд
  • Постепенно вводить DDD в реорганизуемые проекты

Владик Хононов – уникальный мыслитель, много лет занимающийся внедрением DDD для решения задач в самых разных предметных областях. Его идеи – постоянный источник вдохновения, подпитывающий всё сообщество DDD, а эта книга станет незаменимым ресурсом для всех, кто только начинает практиковать DDD.
 Ник Тьюн, технологический консультант в компании Empathy Software, автор книги «Modernizing Architecture»

Книгу “Изучаем DDD – предметно-ориентированное проектирование” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие редакторской группы……………………………………………………….. 15

Предисловие…………………………………………………………………………………………… 19

Введение………………………………………………………………………………………………… 21

Зачем я написал эту книгу………………………………………………………………………………………………………… 22

Кому следует прочитать эту книгу………………………………………………………………………………………….. 22

Навигация по книге……………………………………………………………………………………………………………………. 23

Пример предметной области: WolfDesk………………………………………………………………………………….. 24

Соглашения, используемые в этой книге…………………………………………………………………………………. 25

Порядок использования примеров кода…………………………………………………………………………………… 26

Благодарности…………………………………………………………………………………………………………………………… 27

Вступление…………………………………………………………………………………………….. 29

Часть I. Стратегическое проектирование……………………………. 31

Глава 1. Анализ предметной области……………………………………………………… 33

Так что же такое предметная область?……………………………………………………………………………………. 33

Что такое поддомен (subdomain)?……………………………………………………………………………………………. 34

Типы поддоменов……………………………………………………………………………………………………………. 34

Основные поддомены (core subdomains)………………………………………………………………. 34

Универсальные поддомены (generic subdomains)………………………………………………… 36

Вспомогательные поддомены (supporting subdomains)………………………………………. 36

Сравнение поддоменов………………………………………………………………………………………………….. 37

Конкурентное преимущество………………………………………………………………………………… 37

Сложность………………………………………………………………………………………………………………. 38

Изменчивость………………………………………………………………………………………………………….. 39

Стратегия решения (solution)…………………………………………………………………………………. 40

Определение границ поддоменов………………………………………………………………………………….. 41

Выделение поддоменов (Distilling subdomains)……………………………………………………. 42

Поддомены с позиции согласующихся сценариев использования……………………. 42

Сосредоточьтесь на главном………………………………………………………………………………… 44

Примеры анализа предметной области…………………………………………………………………………………… 44

Gigmaster………………………………………………………………………………………………………………………….. 44

Предметная область (домен) и поддомены………………………………………………………….. 45

Архитектурные решения……………………………………………………………………………………….. 45

BusVNext…………………………………………………………………………………………………………………………. 46

Предметная область (домен) и поддомены………………………………………………………….. 46

Архитектурные решения……………………………………………………………………………………….. 47

Кто такие специалисты в предметной области?…………………………………………………………………….. 47

Выводы……………………………………………………………………………………………………………………………………….. 48

Упражнения………………………………………………………………………………………………………………………………… 49

Глава 2. Экспертные знания о предметной области……………………………….. 50

Задачи бизнеса (business problems)………………………………………………………………………………………….. 50

Выявление экспертных знаний…………………………………………………………………………………………………. 51

Общение……………………………………………………………………………………………………………………………………… 51

Что такое единый язык?…………………………………………………………………………………………………………….. 53

Язык бизнеса………………………………………………………………………………………………………………………………. 54

Сценарии…………………………………………………………………………………………………………………………. 54

Согласованность…………………………………………………………………………………………………………….. 55

Неоднозначные понятия………………………………………………………………………………………… 55

Понятия-синонимы…………………………………………………………………………………………………. 55

Модель предметной области……………………………………………………………………………………………………. 56

Что такое модель?…………………………………………………………………………………………………………… 56

Эффективное моделирование………………………………………………………………………………………… 56

Моделирование предметной области…………………………………………………………………………… 57

Непрерывная работа……………………………………………………………………………………………………… 57

Инструменты…………………………………………………………………………………………………………………… 58

Сложности………………………………………………………………………………………………………………………. 59

Вывод………………………………………………………………………………………………………………………………………….. 60

Упражнения………………………………………………………………………………………………………………………………… 61

Глава 3. Как осмыслить сложность предметной области……………………….. 62

Противоречивые модели…………………………………………………………………………………………………………… 62

Что такое ограниченный контекст?………………………………………………………………………………………….. 64

Границы модели……………………………………………………………………………………………………………… 65

Уточнение термина «единый язык»………………………………………………………………………………. 65

Область применения ограниченного контекста…………………………………………………………… 66

Сравнение ограниченных контекстов и поддоменов……………………………………………………………… 67

Поддомены………………………………………………………………………………………………………………………. 67

Ограниченные контексты………………………………………………………………………………………………. 68

Взаимодействие поддоменов и ограниченных контекстов…………………………………………. 68

Границы……………………………………………………………………………………………………………………………………… 70

Физические границы………………………………………………………………………………………………………. 70

Границы владения………………………………………………………………………………………………………….. 70

Ограниченные контексты в реальной жизни…………………………………………………………………………… 71

Семантические области…………………………………………………………………………………………………. 71

Наука……………………………………………………………………………………………………………………………….. 72

Покупка холодильника………………………………………………………………………………………………….. 73

Вывод………………………………………………………………………………………………………………………………………….. 75

Упражнения………………………………………………………………………………………………………………………………… 75

Глава 4. Интеграция ограниченных контекстов…………………………………….. 77

Сотрудничество (Cooperation)………………………………………………………………………………………………….. 77

Партнерство (Partnership)………………………………………………………………………………………………. 78

Общее ядро (shared kernel)……………………………………………………………………………………………… 78

Общие рамки (Shared scope)………………………………………………………………………………….. 79

Реализация………………………………………………………………………………………………………………. 79

Когда следует воспользоваться общим ядром…………………………………………………….. 80

Потребитель-Поставщик (Customer-supplier)…………………………………………………………………………… 81

Конформист (Conformist)……………………………………………………………………………………………….. 81

Предохранительный слой (Anticorruption layer)………………………………………………………….. 82

Сервис с открытым протоколом (Open-Host Service)…………………………………………………… 83

Разные пути (Separate Ways)…………………………………………………………………………………………………….. 84

Проблемы общения………………………………………………………………………………………………………… 84

Универсальный поддомен (Generic Subdomain)…………………………………………………………… 84

Различия в моделях………………………………………………………………………………………………………… 85

Карта контекстов (Context Map)………………………………………………………………………………………………. 85

Поддержка в актуальном состоянии…………………………………………………………………………….. 86

Ограничения……………………………………………………………………………………………………………………. 86

Вывод………………………………………………………………………………………………………………………………………….. 87

Упражнения………………………………………………………………………………………………………………………………… 87

Часть II. Тактический замысел………………………………………………… 89

Глава 5. Реализация простой бизнес-логики………………………………………….. 90

Транзакционный сценарий……………………………………………………………………………………………………….. 90

Реализация………………………………………………………………………………………………………………………. 91

Это не так-то просто!……………………………………………………………………………………………………… 91

Отсутствие транзакционного поведения……………………………………………………………… 91

Распределенные транзакции…………………………………………………………………………………. 93

Неявные распределенные транзакции…………………………………………………………………. 94

Когда следует применять транзакционный сценарий………………………………………………… 96

Активная запись…………………………………………………………………………………………………………………………. 97

Реализация………………………………………………………………………………………………………………………. 97

Когда следует применять активную запись…………………………………………………………………. 98

Придерживайтесь прагматичного подхода…………………………………………………………………………….. 99

Вывод………………………………………………………………………………………………………………………………………….. 99

Упражнения……………………………………………………………………………………………………………………………… 100

Глава 6. Проработка сложной бизнес-логики……………………………………….. 102

Предыстория…………………………………………………………………………………………………………………………….. 102

Модель предметной области (доменная модель)…………………………………………………………………. 102

Реализация…………………………………………………………………………………………………………………….. 103

Сложность…………………………………………………………………………………………………………….. 104

Единый язык………………………………………………………………………………………………………….. 104

Строительные блоки…………………………………………………………………………………………………….. 104

Объект-значение…………………………………………………………………………………………………… 104

Сущности………………………………………………………………………………………………………………. 110

Агрегаты……………………………………………………………………………………………………………….. 111

Доменные сервисы (domain service)……………………………………………………………………. 119

Управление сложностью……………………………………………………………………………………………… 121

Вывод………………………………………………………………………………………………………………………………………… 122

Упражнения……………………………………………………………………………………………………………………………… 123

Глава 7. Моделирование фактора времени…………………………………………… 125

События как источник данных (Event Sourcing)……………………………………………………………………. 125

Поиск……………………………………………………………………………………………………………………………… 130

Анализ……………………………………………………………………………………………………………………………. 132

Источник истины………………………………………………………………………………………………………….. 133

Хранилище событий…………………………………………………………………………………………………….. 133

Модель предметной области, основанная на событиях………………………………………………………. 134

Преимущества………………………………………………………………………………………………………………. 137

Недостатки……………………………………………………………………………………………………………………. 138

Часто задаваемые вопросы…………………………………………………………………………………………………….. 139

Производительность…………………………………………………………………………………………………….. 139

Удаление данных…………………………………………………………………………………………………………. 141

А почему просто нельзя ………………………………………………………………………………………………. 141

Вывод………………………………………………………………………………………………………………………………………… 142

Упражнения……………………………………………………………………………………………………………………………… 142

Глава 8. Архитектурные паттерны……………………………………………………….. 144

Сопоставление бизнес-логики и архитектурных паттернов……………………………………………….. 144

Слоеная архитектура (Layered Architecture)…………………………………………………………………………. 145

Слой представления (Presentation layer)…………………………………………………………………….. 145

Слой бизнес-логики (Business logic layer)……………………………………………………………………. 146

Слой доступа к данным (Data access layer)………………………………………………………………… 146

Связь между слоями……………………………………………………………………………………………………… 147

Вариация……………………………………………………………………………………………………………………….. 148

Сервисный слой (Service layer)……………………………………………………………………………. 148

Терминология……………………………………………………………………………………………………….. 151

Когда предпочтительнее использовать слоеную архитектуру……………………………….. 151

Дополнительно: сравнение слоев и уровней……………………………………………………… 152

Порты и адаптеры (Ports and adapters)………………………………………………………………………………….. 152

Терминология……………………………………………………………………………………………………………….. 152

Принцип инверсии зависимостей (Dependency inversion principle)…………………………… 153

Интеграция инфраструктурных компонентов……………………………………………………………. 154

Варианты………………………………………………………………………………………………………………………. 155

Когда предпочтительнее использовать порты и адаптеры……………………………………… 155

Разделение ответственности команд и запросов (Command-Query Responsibility Segregation) 155

Мультипарадигменное моделирование (Polyglot modelling)…………………………………….. 156

Реализация…………………………………………………………………………………………………………………….. 156

Модель выполнения команд……………………………………………………………………………….. 157

Модели чтения (проекции)………………………………………………………………………………….. 157

Проецирование моделей чтения………………………………………………………………………………….. 157

Синхронные проекции…………………………………………………………………………………………. 158

Асинхронные проекции……………………………………………………………………………………….. 159

Сложности…………………………………………………………………………………………………………………….. 160

Разделение моделей……………………………………………………………………………………………………… 160

Когда предпочтительнее использовать CQRS…………………………………………………………… 160

Область применения………………………………………………………………………………………………………………… 161

Вывод………………………………………………………………………………………………………………………………………… 162

Упражнения……………………………………………………………………………………………………………………………… 163

Глава 9. Паттерны взаимодействия……………………………………………………… 164

Преобразование моделей………………………………………………………………………………………………………… 164

Преобразование моделей без сохранения состояния……………………………………………….. 165

Синхронный режим……………………………………………………………………………………………… 165

Асинхронный режим……………………………………………………………………………………………. 167

Преобразование моделей с отслеживанием состояния…………………………………………….. 168

Агрегирование входящих данных………………………………………………………………………. 168

Объединение нескольких источников………………………………………………………………… 169

Интеграция агрегатов……………………………………………………………………………………………………………… 170

Паттерн исходящих сообщений (Outbox)…………………………………………………………………… 172

Извлечение неопубликованных событий…………………………………………………………… 173

Сага……………………………………………………………………………………………………………………………….. 174

Согласованность………………………………………………………………………………………………….. 177

Диспетчер процессов……………………………………………………………………………………………………. 177

Вывод………………………………………………………………………………………………………………………………………… 180

Упражнения……………………………………………………………………………………………………………………………… 181

Часть III. Применение предметно-ориентированного проектирования на практике………………………………………………………………………………………….. 183

Глава 10. Эвристика проектирования………………………………………………….. 184

Эвристика…………………………………………………………………………………………………………………………………. 184

Ограниченные контексты………………………………………………………………………………………………………… 184

Паттерны реализации бизнес-логики…………………………………………………………………………………….. 186

Архитектурные паттерны……………………………………………………………………………………………………….. 188

Стратегия тестирования………………………………………………………………………………………………………….. 189

Пирамида тестирования………………………………………………………………………………………………. 190

Ромб тестирования……………………………………………………………………………………………………….. 190

Перевернутая пирамида тестирования………………………………………………………………………. 190

Дерево тактических проектных решений………………………………………………………………………………. 191

Вывод………………………………………………………………………………………………………………………………………… 192

Упражнения……………………………………………………………………………………………………………………………… 192

Глава 11. Эволюция проектных решений…………………………………………….. 194

Изменения в предметных областях………………………………………………………………………………………… 194

Из основного в универсальный……………………………………………………………………………………. 195

Из универсального в основной……………………………………………………………………………………. 195

Из вспомогательного в универсальный………………………………………………………………………. 196

Из вспомогательного в основной………………………………………………………………………………… 196

Из основного во вспомогательный……………………………………………………………………………… 196

Из универсального во вспомогательный……………………………………………………………………. 196

Стратегические аспекты проектирования…………………………………………………………………………….. 197

Тактические аспекты проектирования…………………………………………………………………………………… 198

Преобразование транзакционного сценария в активную запись…………………………….. 198

Преобразование активной записи в модель предметной области…………………………… 199

Преобразование модели предметной области в модель предметной области, основанную на событиях           200

Генерация прошлых переходов состояния………………………………………………………………… 201

Моделирование событий миграции……………………………………………………………………………. 202

Организационные изменения………………………………………………………………………………………………….. 202

Переход от партнерства к отношениям потребитель-поставщик……………………………. 203

Переход от отношений потребитель-поставщик к модели разных путей……………….. 204

Знания предметной области…………………………………………………………………………………………………… 204

Рост проекта…………………………………………………………………………………………………………………………….. 205

Поддомены……………………………………………………………………………………………………………………. 205

Ограниченные контексты…………………………………………………………………………………………….. 206

Агрегаты………………………………………………………………………………………………………………………… 207

Вывод………………………………………………………………………………………………………………………………………… 207

Упражнения……………………………………………………………………………………………………………………………… 208

Глава 12. EventStorming……………………………………………………………………….. 210

Что такое EventStorming?………………………………………………………………………………………………………… 210

Кто принимает участие в EventStorming?……………………………………………………………………………… 210

Что нужно для проведения EventStorming?…………………………………………………………………………… 211

Процесс проведения EventStorming……………………………………………………………………………………….. 212

Этап 1: Проведение неструктурированного исследования……………………………………… 212

Этап 2: Выстраивание в хронологическом порядке…………………………………………………. 213

Этап 3: Проблемные места (pain points)…………………………………………………………………….. 213

Этап 4: Выявление ключевых событий (pivotal events)…………………………………………….. 214

Этап 5: Выявление команд (commands)…………………………………………………………………….. 215

Этап 6: Выявление правил (policies)……………………………………………………………………………. 216

Этап 7: Выявление моделей чтения (read model)………………………………………………………. 217

Этап 8: Выявление внешних систем (external systems)……………………………………………… 217

Этап 9: Выявление агрегатов………………………………………………………………………………………. 218

Этап 10: Выявление ограниченных контекстов………………………………………………………… 218

Варианты………………………………………………………………………………………………………………………………….. 219

Когда следует проводить EventStorming……………………………………………………………………………….. 220

Советы по проведению……………………………………………………………………………………………………………. 221

Отслеживание динамики проведения семинара………………………………………………………… 221

Проведение EventStorming с удаленными участниками…………………………………………… 222

Вывод………………………………………………………………………………………………………………………………………… 222

Упражнения……………………………………………………………………………………………………………………………… 222

Глава 13. Предметно-ориентированное проектирование на практике….. 224

Стратегический анализ…………………………………………………………………………………………………………… 225

Осмысление предметной области……………………………………………………………………………….. 225

Основные поддомены (core subdomains)……………………………………………………………. 225

Универсальные поддомены…………………………………………………………………………………. 226

Вспомогательные поддомены (supporting subdomains)…………………………………….. 226

Изучение текущего проекта…………………………………………………………………………………………. 226

Оценка тактического замысла…………………………………………………………………………….. 227

Оценка стратегического замысла……………………………………………………………………….. 227

Определение стратегии модернизации………………………………………………………………………………….. 228

Стратегическая модернизация……………………………………………………………………………………. 228

Тактическая модернизация………………………………………………………………………………………….. 230

Развитие единого языка……………………………………………………………………………………………….. 230

Паттерн «Душитель» (Strangler)………………………………………………………………………….. 231

Рефакторинг тактических проектных решений…………………………………………………. 233

Прагматичное предметно-ориентированное проектирование……………………………………………. 234

Как «продать» предметно-ориентированное проектирование?………………………………………….. 234

Законспирированное предметно-ориентированное проектирование……………………… 235

Единый язык………………………………………………………………………………………………………….. 235

Ограниченные контексты…………………………………………………………………………………….. 236

Тактические проектные решения………………………………………………………………………… 236

Модель предметной области, основанная на событиях…………………………………… 237

Вывод………………………………………………………………………………………………………………………………………… 237

Упражнения……………………………………………………………………………………………………………………………… 238

Часть IV. Взаимоотношения с другими методологиями и паттернами     239

Глава 14. Микросервисы……………………………………………………………………… 240

Что такое сервис?…………………………………………………………………………………………………………………….. 240

Что такое микросервис?………………………………………………………………………………………………………….. 241

Метод как Сервис (Method as a Service): путь к созданию идеальных микросервисов? 242

Цель проектирования…………………………………………………………………………………………………… 243

Сложность системы……………………………………………………………………………………………………… 244

Микросервисы как «глубокие» сервисы (deep services)…………………………………………….. 245

Микросервисы как глубокие модули………………………………………………………………………….. 246

Предметно-ориентированное проектирование и границы микросервисов………………………… 248

Ограниченные контексты…………………………………………………………………………………………….. 248

Агрегаты……………………………………………………………………………………………………………….. 250

Поддомены……………………………………………………………………………………………………………………. 251

Сокращение публичных интерфейсов микросервисов…………………………………………………………. 252

Сервис с открытым протоколом………………………………………………………………………………….. 252

Предохранительный слой (anticorruption layer, ACL)……………………………………………….. 253

Вывод………………………………………………………………………………………………………………………………………… 254

Упражнения……………………………………………………………………………………………………………………………… 254

Глава 15. Событийно-ориентированная архитектура…………………………… 256

Событийно-ориентированная архитектура………………………………………………………………………….. 256

События……………………………………………………………………………………………………………………………………. 257

События, команды и сообщения…………………………………………………………………………………. 257

Структура……………………………………………………………………………………………………………………… 258

Типы событий……………………………………………………………………………………………………………….. 258

Уведомление…………………………………………………………………………………………………………. 258

Передача состояния с помощью события………………………………………………………….. 260

События предметной области (domain event)…………………………………………………… 262

Сравнение событий предметной области и уведомлений………………………………… 262

Сравнение событий предметной области с ECST-сообщениями…………………….. 262

Типы событий: Пример………………………………………………………………………………………… 263

Проектирование событийно-ориентированной интеграции……………………………………………….. 264

Распределенный большой ком грязи…………………………………………………………………………… 264

Временнáя связанность (связанность по времени)…………………………………………………….. 265

Функциональная связанность……………………………………………………………………………………… 266

Связанность на уровне реализации……………………………………………………………………………. 266

Реорганизация событийно-ориентированной интеграции……………………………………….. 266

Творческий подход к событийно-ориентированному проектированию…………………. 267

Предполагайте худшее………………………………………………………………………………………… 267

Используйте публичный интерфейс и приватные события……………………………… 268

Оценивайте требования к согласованности………………………………………………………. 268

Вывод………………………………………………………………………………………………………………………………………… 269

Упражнения……………………………………………………………………………………………………………………………… 269

Глава 16. Сеть данных (Data Mesh)………………………………………………………. 271

Сравнение аналитической модели данных (OLAP) с моделью транзакционных данных (OLTP)        271

Таблица фактов…………………………………………………………………………………………………………….. 272

Таблица измерений………………………………………………………………………………………………………. 274

Аналитические модели………………………………………………………………………………………………… 274

Платформы управления аналитическими данными…………………………………………………………….. 276

Хранилище данных — Data Warehouse……………………………………………………………………… 276

Озеро данных — Data Lake…………………………………………………………………………………………. 279

Проблемы архитектур хранилища данных и озера данных……………………………………. 280

Сеть данных (Data mesh)………………………………………………………………………………………………………… 281

Разбиение данных по предметным областям…………………………………………………………….. 281

Данные как продукт……………………………………………………………………………………………………… 283

Обеспечение автономии………………………………………………………………………………………………. 284

Построение экосистемы……………………………………………………………………………………………….. 284

Совмещение сети данных (data mesh) и предметно-ориентированного проектирования          285

Вывод………………………………………………………………………………………………………………………………………… 287

Упражнения……………………………………………………………………………………………………………………………… 287

Заключение………………………………………………………………………………………….. 289

Задача………………………………………………………………………………………………………………………………………. 289

Решение…………………………………………………………………………………………………………………………………….. 290

Реализация……………………………………………………………………………………………………………………………….. 291

Рекомендуемая литература…………………………………………………………………………………………………….. 291

Дополнительные сведения о предметно-ориентированном проектировании………… 291

Архитектурные и интеграционные шаблоны…………………………………………………………….. 292

Модернизация устаревших систем…………………………………………………………………………….. 292

EventStorming………………………………………………………………………………………………………………… 293

Вывод………………………………………………………………………………………………………………………………………… 294

Приложение 1. Применение DDD: пример из практики………………………… 295

Пять ограниченных контекстов………………………………………………………………………………………………. 295

Предметная область…………………………………………………………………………………………………….. 295

Ограниченный контекст № 1: Маркетинг…………………………………………………………………… 297

Своеобразная магия…………………………………………………………………………………………….. 297

Наши ранние взгляды на предметно-ориентированное проектирование………. 297

Ограниченный контекст № 2: CRM…………………………………………………………………………….. 297

Еще больше «агрегатов»!…………………………………………………………………………………….. 298

Разработка решения: Дубль два…………………………………………………………………………. 299

Вавилонская башня 2.0……………………………………………………………………………………….. 299

Более широкий взгляд на предметно-ориентированное проектирование………. 300

Ограниченный контекст № 3: Обработчики событий……………………………………………….. 301

Ограниченный контекст № 4: Бонусы………………………………………………………………………… 302

Проектирование: Дубль два………………………………………………………………………………… 303

Единый язык………………………………………………………………………………………………………….. 303

Классическое понимание предметно-ориентированного проектирования……. 303

Ограниченный контекст № 5: Центр маркетинга………………………………………………………. 304

Микро — что?………………………………………………………………………………………………………. 304

Реальная проблема………………………………………………………………………………………………. 305

Обсуждение………………………………………………………………………………………………………………………………. 305

Единый язык………………………………………………………………………………………………………………….. 305

Поддомены……………………………………………………………………………………………………………………. 306

Сопоставление проектных решений с поддоменами………………………………………… 307

Не игнорируйте боль……………………………………………………………………………………………. 308

Границы ограниченных контекстов……………………………………………………………………………. 308

Вывод………………………………………………………………………………………………………………………………………… 309

Приложение 2. Ответы на вопросы упражнений………………………………….. 310

Глава 1……………………………………………………………………………………………………………………………………… 310

Глава 2……………………………………………………………………………………………………………………………………… 311

Глава 3……………………………………………………………………………………………………………………………………… 311

Глава 4……………………………………………………………………………………………………………………………………… 312

Глава 5……………………………………………………………………………………………………………………………………… 312

Глава 6……………………………………………………………………………………………………………………………………… 313

Глава 7……………………………………………………………………………………………………………………………………… 313

Глава 8……………………………………………………………………………………………………………………………………… 313

Глава 9……………………………………………………………………………………………………………………………………… 314

Глава 10……………………………………………………………………………………………………………………………………. 314

Глава 11……………………………………………………………………………………………………………………………………. 314

Глава 12……………………………………………………………………………………………………………………………………. 315

Глава 13……………………………………………………………………………………………………………………………………. 315

Глава 14……………………………………………………………………………………………………………………………………. 315

Глава 15……………………………………………………………………………………………………………………………………. 315

Глава 16……………………………………………………………………………………………………………………………………. 316

Предметный указатель…………………………………………………………………………. 317

Об авторе       320

Влад Хононов

Влад Хононов — инженер-программист, более 20 лет занимающийся промышленной разработкой. Успел поработать во множестве больших и малых компаний на разных позициях – от вебмастера до главного архитектора. Активно выступает на конференциях, пишет статьи в блоге, консультирует по темам, связанным с предметно-ориентированным проектированием, микросервисами, а также с программной архитектурой и унаследованным кодом.

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

Долгожданная книга: “Современная архитектура и устройство компьютеров. 2-е издание”

Современная архитектура и устройство компьютеров

Книга посвящена архитектуре и принципам работы современных цифровых устройств: компьютеров, смартфонов, облачных серверов. Подробно рассмотрены архитектуры процессоров и наборы инструкций x86, x64, ARM и RISC-V. Описано внутреннее устройство процессора, логические вентили, триггеры, регистры, конвейеры, показаны режимы адресации, обработка прерываний, представлены основы машинной логики, методы повышения вычислительной производительности процессоров. Приведен пример разработки процессора RISC-V на базе недорогой платы FPGA (ПЛИС). Описаны принципы виртуализации и технологии, лежащие в основе виртуальных машин, рассмотрены архитектурные решения для обеспечения кибербезопасности и конфиденциальности вычислений. Уделено внимание специализированным компьютерным архитектурам: облачным серверам, мобильным устройствам, процессорам для нейронных сетей и машинного обучения, блокчейна и майнинга, беспилотного транспорта. На практическом примере показаны квантовые вычисления, рассмотрены другие перспективные направления в вычислительных архитектурах.

 

Вы — разработчик программного обеспечения, системный архитектор или студент, изучающий устройство компьютеров?

Вы ищете издание, которое подробно познакомит вас с внутренней архитектурой и принципами работы цифровых устройств?

В этом пошаговом руководстве на практических примерах вы узнаете, как работают современные компьютерные системы, виртуальные машины, смартфоны и облачные серверы. Вы получите представление о внутреннем устройстве процессоров и поймете, как они выполняют код, написанный на языках высокого уровня.

Из этой книги вы

  • узнаете об основах современных компьютерных систем;
  • подробно изучите устройство процессоров, включая логические вентили, триггеры, регистры, последовательную логику, обработку прерываний и конвейеры управления;
  • исследуете процессорные архитектуры и наборы инструкций, включая x86, x64, ARM и RISC-V;
  • узнаете, как реализовать процессор RISC-V на недорогой плате FPGA (ПЛИС);
  • напишете  программу для квантовых вычислений и запустите ее на реальном квантовом компьютере.

Второе издание включает в себя описание архитектуры и принципов проектирования, лежащих в основе таких важных областей, как кибербезопасность, блокчейн и майнинг криптовалют, а также управление беспилотными автомобилями. Прочитав эту книгу, вы получите глубокое представление о современных процессорах и архитектуре компьютеров, а также о будущих направлениях развития этих технологий.

Книгу “Современная архитектура и устройство компьютеров. 2-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие.. 17

Составители.. 21

Об авторе. 21

О рецензентах. 21

Вступление.. 23

Для кого эта книга. 24

Как организована эта книга. 24

Как получить максимальную отдачу от этой книги. 28

Загрузите файлы с примерами кода. 28

Загрузите цветные изображения. 28

Условные обозначения и соглашения. 28

Свяжитесь с нами. 29

Поделитесь своими мыслями. 30

Глава 1. Введение в архитектуру компьютеров.. 31

Технические требования. 32

Эволюция автоматических вычислительных устройств. 32

Аналитическая машина Чарльза Бэббиджа. 32

ENIAC.. 35

IBM PC.. 36

iPhone. 40

Закон Мура. 41

Архитектура компьютеров. 44

Представление чисел уровнями напряжения. 44

Двоичные и шестнадцатеричные числа. 45

Микропроцессор 6502. 49

Набор инструкций микропроцессора 6502. 52

Резюме. 55

Упражнения. 56

Глава 2. Цифровая логика.. 58

Технические требования. 59

Электрические схемы.. 59

Транзистор. 60

Логические вентили. 61

Защелки. 66

Триггеры.. 69

Регистры.. 71

Сумматоры.. 73

Задержка распространения. 74

Синхронизация. 76

Последовательностная логика. 77

Языки описания аппаратных средств. 78

VHDL. 78

Резюме. 83

Упражнения. 83

Глава 3. Элементы процессора.. 85

Технические требования. 86

Простой процессор. 86

Устройство управления. 87

Арифметико-логическое устройство. 90

Регистры.. 95

Набор инструкций процессора. 97

Режимы адресации. 98

Режим непосредственной адресации. 98

Режим абсолютной адресации. 99

Режим абсолютной индексной адресации. 100

Режим косвенной индексной адресации. 102

Категории инструкций. 103

Инструкции загрузки и сохранения. 104

Инструкции передачи данных из регистра в регистр. 104

Инструкции стека. 104

Арифметические инструкции. 105

Логические инструкции. 106

Инструкции ветвления. 106

Инструкции вызова подпрограммы и возврата из подпрограммы.. 107

Инструкции для работы с флагами процессора. 107

Инструкции для работы с прерываниями. 107

Инструкция отсутствия операций. 108

Обработка прерываний. 108

Обработка ……. 108

Обработка …….. 110

Обработка инструкции BRK.. 111

Операции ввода-вывода. 112

Программируемый ввод-вывод. 114

Ввод-вывод с управлением по прерываниям.. 114

Прямой доступ к памяти. 116

Резюме. 116

Упражнения. 117

Глава 4. Компоненты компьютерной системы… 119

Технические требования. 120

Подсистема памяти. 120

Знакомство с полевыми МОП-транзисторами. 121

Построение схем динамической памяти с помощью полевых
МОП-транзисторов. 124

Конденсатор. 124

Битовая ячейка динамической памяти. 126

SDRAM DDR5. 128

DDR для графики. 131

Предварительная выборка. 131

Подсистема ввода-вывода. 132

Параллельные и последовательные шины данных. 133

PCI Express. 135

SATA.. 137

M.2. 138

USB.. 138

Thunderbolt 139

Графические дисплеи. 140

VGA.. 141

DVI 141

HDMI 142

DisplayPort 142

Сетевой интерфейс. 143

Ethernet 143

Wi-Fi 144

Клавиатура и мышь. 146

Клавиатура. 146

Мышь. 147

Технические характеристики современной компьютерной системы.. 148

Резюме. 149

Упражнения. 150

Глава 5. Аппаратно-программный интерфейс.. 151

Технические требования. 152

Драйверы устройств. 152

Параллельный порт. 153

Драйверы устройств PCIe. 155

Структура драйверов устройств. 156

Базовая система ввода-вывода (BIOS) 158

Единый расширяемый интерфейс встроенного ПО (UEFI) 160

Процесс загрузки операционной системы.. 162

Загрузка при использовании BIOS. 163

Загрузка при использовании UEFI 163

Доверенная загрузка. 164

Мобильные устройства. 165

Операционные системы.. 166

Процессы и потоки. 168

Алгоритмы планирования и приоритет процесса. 171

Многопроцессорность. 175

Резюме. 177

Упражнения. 177

Глава 6. Специализированные вычисления.. 179

Технические требования. 180

Вычисления в реальном времени. 180

Операционные системы реального времени. 182

Цифровая обработка сигналов. 186

АЦП и ЦАП.. 186

Особенности аппаратных средств DSP. 189

Алгоритмы обработки сигналов. 192

Обработка данных в графических процессорах. 197

Графические процессоры как процессоры обработки данных. 198

Примеры специализированных архитектур. 202

Резюме. 204

Упражнения. 204

Глава 7. Архитектура процессора и памяти.. 207

Технические требования. 207

Фон-неймановская, гарвардская и модифицированная гарвардская
архитектуры.. 208

Фон-неймановская архитектура. 208

Гарвардская архитектура. 210

Модифицированная гарвардская архитектура. 211

Физическая и виртуальная память. 212

Виртуальная память со страничной организацией. 216

Биты состояния страницы.. 220

Пулы памяти. 222

Блок управления памятью.. 223

Резюме. 226

Упражнения. 227

Глава 8. Методы повышения производительности.. 229

Технические требования. 230

Кеш-память. 230

Многоуровневое кеширование в процессорах. 232

Статическая оперативная память. 233

Кеш первого уровня. 235

Кеш с прямым отображением.. 235

Наборно-ассоциативный кеш.. 239

Полностью ассоциативный кеш.. 241

Политики записи в кеш процессора. 242

Кеши процессора второго и третьего уровней. 243

Конвейерная обработка инструкций. 245

Суперконвейеризация. 248

Конфликты конвейеризации. 250

Микрооперации и переименование регистров. 252

Условное ветвление. 253

Одновременная многопоточность. 254

Модель обработки SIMD.. 256

Резюме. 258

Упражнения. 258

Глава 9. Специализированные расширения процессоров.. 260

Технические требования. 260

Привилегированные режимы процессора. 261

Обработка прерываний и исключений. 261

Кольца защиты.. 265

Режим супервизора и режим пользователя. 267

Системные вызовы.. 268

Арифметика с плавающей запятой. 269

Сопроцессор 8087 для вычислений с плавающей запятой. 272

Стандарт вычислений с плавающей запятой IEEE 754. 274

Управление питанием.. 275

Динамическое изменение напряжения и частоты.. 276

Управление безопасностью системы.. 277

Доверенный платформенный модуль. 280

Противодействие кибератакам.. 281

Резюме. 282

Упражнения. 283

Глава 10. Современные архитектуры и наборы инструкций
процессоров.. 285

Технические требования. 285

Архитектура и набор инструкций x86. 286

Набор регистров архитектуры x86. 288

Режимы адресации x86. 292

Категории инструкций x86. 295

Форматы инструкций x86. 300

Язык ассемблера x86. 301

Архитектура и набор инструкций x64. 304

Набор регистров архитектуры x64. 306

Категории и форматы инструкций x64. 307

Язык ассемблера x64. 307

Архитектура и набор инструкций 32-разрядных процессоров ARM.. 310

Набор регистров ARM.. 312

Режимы адресации ARM.. 313

Категории инструкций ARM.. 316

32-разрядный язык ассемблера ARM.. 319

Архитектура и набор инструкций 64-разрядных процессоров ARM.. 321

64-разрядный язык ассемблера ARM.. 323

Резюме. 325

Упражнения. 325

Глава 11. Архитектура и набор инструкций RISC-V.. 328

Технические требования. 329

Архитектура и приложения RISC-V.. 329

Базовый набор инструкций RISC-V.. 332

Вычислительные инструкции. 333

Инструкции потока управления. 334

Инструкции доступа к памяти. 334

Системные инструкции. 335

Псевдоинструкции. 336

Уровни привилегий. 338

Расширения RISC-V.. 340

Расширение M.. 340

Расширение A.. 341

Расширение C.. 342

Расширения F и D.. 342

Другие расширения. 343

Варианты RISC-V.. 344

64-разрядная архитектура RISC-V.. 345

Стандартные конфигурации RISC-V.. 346

Язык ассемблера RISC-V.. 347

Реализация концепции RISC-V в ПЛИС.. 348

Резюме. 352

Упражнения. 353

Глава 12. Виртуализация процессоров.. 355

Технические требования. 356

Введение в виртуализацию.. 356

Типы виртуализации. 356

Категории виртуализации процессоров. 360

Проблемы виртуализации. 365

Небезопасные инструкции. 366

Теневые таблицы страниц. 367

Безопасность. 367

Виртуализация современных процессоров. 368

Виртуализация процессоров x86. 368

Виртуализация процессоров ARM.. 370

Виртуализация процессоров RISC-V.. 371

Инструменты виртуализации. 372

VirtualBox. 372

VMware Workstation. 373

VMware ESXi 373

KVM.. 373

Xen. 374

QEMU.. 374

Виртуализация и облачные вычисления. 375

Потребление электроэнергии. 376

Резюме. 376

Упражнения. 377

Глава 13. Специализированные компьютерные архитектуры    378

Технические требования. 378

Проектирование архитектуры компьютерных систем на основе
уникальных требований. 379

Архитектура смартфона. 380

iPhone 13 Pro Max. 381

Архитектура персонального компьютера. 384

Игровой настольный компьютер Alienware Aurora Ryzen Edition R10. 384

Вычислительная архитектура масштаба центра обработки данных. 389

Аппаратные средства WSC.. 390

Стоечные серверы.. 392

Управление отказами аппаратных средств. 395

Потребление электроэнергии. 395

WSC как многоуровневый информационный кеш.. 396

Развертывание облачного приложения. 397

Архитектура процессоров для нейронных сетей и машинного обучения. 401

Нейропроцессор Intel Nervana. 401

Резюме. 405

Упражнения. 405

Глава 14. Архитектуры для обеспечения кибербезопасности и конфиденциальности вычислений.. 407

Технические требования. 408

Угрозы кибербезопасности. 408

Категории угроз кибербезопасности. 408

Методы кибератак. 410

Типы вредоносного программного обеспечения. 412

Действия после проникновения. 414

Особенности защищенного оборудования. 416

Определите, что нуждается в защите. 416

Рассматривайте все типы атак. 417

Особенности конструкции защищенных систем.. 419

Конфиденциальные вычисления. 422

Меры безопасности на уровне архитектуры.. 425

Избегайте защиты посредством сокрытия информации. 425

Комплексный подход к безопасному проектированию.. 427

Принцип наименьших привилегий. 427

Архитектура нулевого доверия. 428

Обеспечение безопасности системного и прикладного ПО.. 429

Общие слабые места программного обеспечения. 430

Проверка безопасности исходного кода. 433

Резюме. 433

Упражнения. 434

Глава 15. Архитектуры блокчейна и майнинга биткоинов.. 436

Технические требования. 437

Введение в блокчейн и биткоин. 437

Алгоритм хеширования SHA-256. 441

Вычисление хеша SHA-256. 443

Программное обеспечение Bitcoin Core. 444

Процесс майнинга биткоинов. 445

Пулы майнинга биткоинов. 447

Майнинг с помощью центрального процессора. 449

Майнинг с помощью графического процессора. 450

Компьютерные архитектуры для майнинга биткоинов. 451

Майнинг с помощью ПЛИС.. 453

Майнинг с помощью ASIC.. 455

Экономика майнинга биткоинов. 458

Альтернативные виды криптовалют. 459

Резюме. 460

Упражнения. 461

Глава 16. Архитектуры для самоуправляемых автомобилей   462

Технические требования. 463

Обзор самоуправляемых автомобилей. 463

Уровни автономности вождения. 464

Аспекты безопасности самоуправляемых автомобилей. 466

Требования к аппаратным средствам и программному обеспечению для самоуправляемых автомобилей  468

Наблюдение за состоянием транспортного средства и его окружением.. 469

Распознавание окружающей обстановки. 473

Принятие решений. 484

Вычислительная архитектура автономного транспортного средства. 486

Автопилот Tesla HW3. 487

Резюме. 489

Упражнения. 489

Глава 17. Квантовые вычисления и другие перспективные
направления в вычислительных архитектурах.. 491

Технические требования. 492

Текущее развитие компьютерных архитектур. 492

Экстраполяция современных тенденций в будущее. 494

Закон Мура — новый взгляд. 494

Третье измерение. 495

Распространение специализированных устройств. 496

Потенциально прорывные технологии. 497

Квантовая физика. 497

Спинтроника. 498

Квантовые вычисления. 500

Квантовый взлом кода. 501

Адиабатические квантовые вычисления. 502

Будущее квантовых вычислений. 503

Углеродные нанотрубки. 504

Формирование набора навыков с заделом на будущее. 506

Непрерывное обучение. 506

Высшее образование. 508

Конференции и литература. 509

Резюме. 510

Упражнения. 513

Приложение. Ответы к упражнениям… 515

Глава 1. Введение в архитектуру компьютеров. 515

Упражнение 1. 515

Упражнение 2. 517

Упражнение 3. 521

Упражнение 4. 525

Упражнение 5. 526

Упражнение 6. 528

Глава 2. Цифровая логика. 530

Упражнение 1. 530

Упражнение 2. 530

Упражнение 3. 531

Упражнение 4. 533

Упражнение 5. 534

Упражнение 6. 536

Глава 3. Элементы процессора. 539

Упражнение 1. 539

Упражнение 2. 540

Упражнение 3. 540

Упражнение 4. 541

Упражнение 5. 543

Упражнение 6. 545

Глава 4. Компоненты компьютерной системы.. 551

Упражнение 1. 551

Упражнение 2. 552

Глава 5. Аппаратно-программный интерфейс. 552

Упражнение 1. 552

Упражнение 2. 553

Глава 6. Специализированные вычисления. 554

Упражнение 1. 554

Упражнение 2. 555

Упражнение 3. 557

Глава 7. Архитектура процессоров и памяти. 558

Упражнение 1. 558

Упражнение 2. 558

Упражнение 3. 559

Глава 8. Методы повышения производительности. 561

Упражнение 1. 561

Упражнение 2. 562

Упражнение 3. 562

Глава 9. Специализированные расширения процессоров. 563

Упражнение 1. 563

Упражнение 2. 565

Упражнение 3. 569

Упражнение 4. 569

Упражнение 5. 570

Упражнение 6. 570

Упражнение 7. 570

Упражнение 8. 571

Глава 10. Современные архитектуры и наборы инструкций процессоров. 571

Упражнение 1. 571

Упражнение 2. 575

Упражнение 3. 580

Упражнение 4. 583

Упражнение 5. 588

Упражнение 6. 590

Упражнение 7. 595

Упражнение 8. 598

Глава 11. Архитектура и набор инструкций RISC-V.. 604

Упражнение 1. 604

Упражнение 2. 604

Упражнение 3. 606

Глава 12. Виртуализация процессоров. 609

Упражнение 1. 609

Упражнение 2. 611

Упражнение 3. 613

Глава 13. Специализированные компьютерные архитектуры.. 614

Упражнение 1. 614

Упражнение 2. 615

Глава 14. Архитектуры для обеспечения кибербезопасности и конфиденциальности вычислений  617

Упражнение 1. 617

Упражнение 2. 618

Упражнение 3. 618

Глава 15. Архитектуры блокчейна и майнинга биткоинов. 619

Упражнение 1. 619

Упражнение 2. 621

Глава 16. Архитектуры для самоуправляемых автомобилей. 622

Упражнение 1. 622

Упражнение 2. 623

Упражнение 3. 625

Упражнение 4. 629

Глава 17. Квантовые вычисления и другие перспективные направления
в вычислительных архитектурах. 633

Упражнение 1. 633

Упражнение 2. 634

Упражнение 3. 635

Упражнение 4. 637

Предметный указатель.. 639

Ледин Джим

Джим Ледин (Jim Ledin) — исполнительный директор компании Ledin Engineering, Inc. Джим является экспертом в области проектирования и тестирования встроенного программного обеспечения и аппаратных средств, а также экспертом в области оценки кибербезопасности систем и тестирования на проникновение. Джим имеет степень бакалавра в области аэрокосмической техники от Университета штата Айова и степень мастера в области электротехники и вычислительной техники от Технологического института Джорджии. Он является зарегистрированным профессиональным инженером-электриком в штате Калифорния, сертифицированным специалистом по безопасности информационных систем (Certified InformationSystem Security Professional, CISSP), сертифицированным этичным хакером (CertifiedEthical Hacker, CEH) и сертифицированным специалистом