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

Новинка: “Обработка данных на Python. Data Wrangling и Data Quality”

Обработка данных на Python. Data Wrangling и Data Quality

Книга посвящена первичной обработке данных (Data Wrangling) на Python  и  оценке их качества (Data Quality). Материал содержит основополагающие концепции, экспертные советы и  ресурсы, необходимые для первичной обработки, извлечения, оценки и анализа данных. Все темы раскрыты на простых и наглядных примерах из практики. Даны необходимые и достаточные сведения о языке программирования  Python 3.8+ для чтения, записи и преобразования данных из различных источников, а также  для обработки данных в больших масштабах. Приведены лучшие практики  документирования и структурирования кода. Описан сбор данных из файлов, веб-страниц и API. Рассмотрены приемы проведения базового статистического анализа наборов данных, а также наглядные и убедительные способы визуализации и представления  данных. Изложение рассчитано как на новичков по обработке данных, так и на профессионалов. Электронный архив на сайте издательства содержит цветные иллюстрации к книге.

Для специалистов по обработке данных

Начните работу с чтения, очистки и анализа данных

Мир вокруг нас полон данных, которые содержат уникальные и ценные сведения, но полезную информацию из этих «сырых» данных нужно уметь извлечь!

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

В этой книге ярко проявляется опыт Сьюзан Макгрегор в преподавании журналистики данных (data journalism) студентам всех уровней. Она приводит примеры из реальной жизни и объясняет, как подходить к поиску, проверке и анализу данных доступным способом.
 Джоанна С. Као , технический руководитель журналистики данных в газете Файнэншл Таймс

  • Применяйте Python 3.8+ для чтения, записи и преобразования данных из различных источников, а также для обработки данных в больших масштабах.
  • Организуйте, документируйте и структурируйте свой код, используя лучшие практики
  • Собирайте данные из файлов, веб-страниц и API
  • Проводите базовый статистический анализ, чтобы осмыслить наборы данных
  • Визуализируйте и представляйте данные наглядным и убедительным образом

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

Введение. 11

Для кого предназначена эта книга?. 12

Поедете сами или возьмете такси?. 12

Кому не следует читать эту книгу?. 13

Что ожидать от этой книги. 13

Типографские соглашения. 14

Использование примеров кода. 15

Цветные иллюстрации. 16

Возможности онлайнового обучения от компании O’Reilly. 16

Как связаться с нами. 16

Благодарности. 17

ГЛАВА 1. Введение в первичную обработку (выпас) и качество данных. 19

Что такое выпас данных?. 20

Что такое качество данных?. 22

Целостность данных. 23

Соответствие данных. 23

Почему мы выбрали Python?. 25

Универсальность. 25

Доступность. 25

Удобочитаемость. 26

Сообщество. 26

Альтернативы языку Python. 27

Написание и исполнение программ на языке Python. 27

Работа с кодом Python на локальном устройстве. 30

Введение в работу с командной строкой. 30

Установка языка Python, среды Jupyter Notebook и редактора кода. 33

Работа с кодом Python в режиме онлайн. 39

Hello World! 39

Создание файла автономного сценария Python при помощи Atom.. 39

Создание блокнота кода Python в Jupyter Notebook. 41

Создание блокнота кода Python в Google Colab. 42

Создаем программу. 43

В файле автономного сценария. 43

В блокноте. 43

Исполняем программу. 43

В файле автономного сценария. 43

В блокноте. 44

Документирование, сохранение и управление версиями своего кода. 44

Документирование. 44

Сохранение. 46

Управление версиями. 46

Заключение. 56

ГЛАВА 2. Введение в Python. 57

“Части речи” языков программирования. 58

Существительные ≈ переменные. 59

Важно ли конкретное имя?. 61

Наилучшие практики для именования переменных. 62

Глаголы ≈ функциям. 62

Применение пользовательских функций. 67

Библиотеки: занимаем пользовательские функции у других программистов. 68

Структуры управления: циклы и условные операторы. 69

Циклы. 69

Условные операторы. 72

Понимание ошибок. 77

Синтаксические ошибки. 78

Ошибки времени исполнения. 79

Логические ошибки. 83

Отправляемся в путь с данными Citi Bike. 85

Начинаем с создания псевдокода. 86

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

Заключение. 93

ГЛАВА 3. Понимание качества данных. 95

Оценка соответствия данных. 97

Достоверность данных. 98

Надежность данных. 100

Репрезентативность данных. 101

Оценка целостности данных. 104

Необходимые, но недостаточные. 106

Важные. 108

Достижимость. 111

Улучшение качества данных. 114

Очистка данных. 115

Аугментация данных. 115

Заключение. 116

ГЛАВА 4. Работа с файловыми и канальными данными
на языке Python. 117

Структурированные и неструктурированные данные. 119

Работа со структурированными данными. 123

Файловые табличные форматы данных. 124

Выпас табличных данных посредством языка Python. 126

Выпас реальных данных: понимание безработицы. 133

XLSX, ODS и все остальные. 136

Данные фиксированной ширины. 143

Канальные данные — интерактивные обновления через Интернет. 147

Выпас канальных данных средствами языка Python. 150

Формат JSON: данные следующего поколения. 160

Работа с неструктурированными данными. 165

Текст на основе изображений: доступ к данным в формате PDF. 165

Выпас PDF-данных, используя Python. 166

Обращение к таблицам PDF посредством Tabula. 171

Заключение. 171

ГЛАВА 5. Доступ к интернет-данным.. 173

Доступ к веб-данным XML и JSON.. 175

Знакомство с API-интерфейсами. 178

Базовые API-интерфейсы на примере поисковой системы. 179

Специализированные API-интерфейсы: добавление простой
аутентификации. 181

Получение ключа для API-интерфейса FRED.. 181

Использование ключа API для запроса данных. 182

Чтение документации по API-интерфейсу. 183

Защита своего ключа API при использовании сценариев Python. 186

Создание файла учетных данных. 188

Использование учетных данных в отдельном сценарии. 189

Основы работы с файлом .gitignore. 190

Специализированные API-интерфейсы: работа с протоколом OAuth. 193

Получение учетной записи разработчика Twitter 194

Создание приложения и учетных данных Twitter 196

Кодирование ключа API и ключа секрета API 201

Запрос токена доступа и данных из API-интерфейса Twitter 202

Этические нормы при работе с API-интерфейсами. 206

Извлечение веб-данных: источник данных последней надежды. 207

Осторожно извлекаем данные с веб-сайта УГПТ. 210

Использование средств инспектирования браузера. 211

Решение Python для извлечения данных из веб-страницы:
библиотека Beautiful Soup. 214

Заключение. 218

ГЛАВА 6. Оценка качества данных. 219

Пандемия и программа PPP. 221

Оценка целостности данных. 222

Имеют ли данные известное происхождение?. 223

Актуальны ли данные?. 223

Полные ли данные?. 224

Хорошо ли данные аннотированы?. 236

Являются ли данные крупномасштабными?. 242

Непротиворечивы ли данные?. 244

Многомерны ли наши данные?. 248

Атомарны ли данные?. 250

Понятны ли данные?. 250

Размерностно структурированы ли данные?. 252

Оценка соответствия данных. 253

Достоверность данных. 253

Надежность данных. 257

Репрезентативность данных. 258

Заключение. 259

ГЛАВА 7. Очистка, преобразование и дополнение данных. 261

Выбор подмножества данных системы Citi Bike. 262

Простое разбиение. 263

Регулярные выражения: супермощное средство сопоставления строк. 265

Создание дат. 270

Удаление хлама из файлов данных. 272

Декодирование дат Excel 276

Создание настоящих данных CSV из данных фиксированной ширины. 279

Исправление разнообразности написаний. 282

Тернистый путь к “простым” решениям. 288

Опасные подводные камни. 290

Дополнение данных. 292

Заключение. 294

ГЛАВА 8. Структурирование и рефакторинг кода. 296

Обзор пользовательских функций. 296

Многократное использование кода. 297

Аккуратное и понятное документирование. 297

Недостаточная функциональность по умолчанию.. 298

Область видимости. 298

Определение параметров функции. 301

Доступные опции. 302

Предоставление аргументов. 303

Возвращаемые значения. 303

Работа со стеком. 305

Рефакторинг для получения удовольствия и прибыли. 306

Функция для определения рабочих дней. 306

Опрятные метаданные. 309

Использование pydoc для документирования сценариев и пользовательских функций. 317

О полезности аргументов командной строки. 321

Отличия во взаимодействии со сценариями в автономных файлах и блокнотах. 325

Заключение. 325

ГЛАВА 9. Введение в анализ данных. 327

Вся суть — в контексте. 328

Одинаковые, но не совсем. 329

Что типично? Оценка центральной тенденции. 329

Что это значит?. 330

Поразмыслим нестандартно: выявляем выбросы. 332

Визуализация для анализа данных. 332

Какова форма наших данных? Учимся понимать гистограммы. 336

Вопрос за $2 миллиона. 346

Пропорциональный ответ. 359

Заключение. 362

ГЛАВА 10. Представление данных. 364

Основы визуального красноречия. 365

Сформулируйте свои данные. 367

Диаграммы, графики и картограммы — вот это да! 368

Круговые диаграммы. 369

Линейчатые и столбчатые диаграммы. 372

Линейные диаграммы. 377

Диаграмма рассеяния. 380

Картограммы. 383

Элементы красноречивых визуальных эффектов. 386

“Мелкие” детали действительно имеют значение. 386

Доверяйте своим глазам (и экспертам) 387

Выбор масштаба. 388

Выбор цветовой гаммы. 389

Прежде всего делайте аннотации! 389

От базового к красивому: настройка визуализации с помощью seaborn и matplotlib. 390

Выйдите за рамки основ. 395

Заключение. 396

ГЛАВА 11. За пределами Python. 397

Дополнительные инструменты для анализа данных. 398

Программы для работы с электронными таблицами. 398

OpenRefine. 399

Дополнительные инструменты для обмена и представления данных. 402

Редактирование изображений в форматах JPG, PNG и GIF. 402

Программное обеспечение для редактирования SVG и других векторных форматов. 402

Размышления об этике. 404

Заключение. 405

Приложение А. Другие ресурсы по программированию на Python. 406

Официальная документация Python. 406

Установка ресурсов Python. 407

Где искать библиотеки. 407

Следите за остротой своих инструментов. 408

Где получить больше информации. 409

Приложение Б. Еще несколько слов о Git 410

Вы запускаете команду git push/pull и оказываетесь в странном текстовом редакторе. 410

Ваша команда git push/pull отклоняется. 412

Выполните команду git pull 412

Краткое руководство по Git 414

приложение В. Поиск данных. 416

Репозитории данных и API 416

Эксперты по предметным вопросам. 417

Запросы FOIA/L. 418

Кастомные методы сбора данных. 419

приложение Г. Ресурсы для визуализации и информационного дизайна. 421

Основополагающие книги по визуализации информации. 421

Краткое руководство, за которым вы потянетесь. 422

Источники вдохновения. 422

Об авторе. 423

Колофон. 424

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

Susan McGregor

Сьюзен Макгрегор (Susan McGregor) — исследователь Института науки о данных Колумбийского университета. На протяжении более десяти лет она применяет свой успешный подход к преподаванию программирования и анализа данных для студентов нетехнических специальностей.

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

Мировой бестселлер: “Идеальный тестировщик” Кристин Джеквони

Идеальный тестировщик. Концепции, навыки и стратегии высококачественного тестирования

Рассматриваются базовая терминология и понятия в сфере тестирования ПО. Описываются ручное исследовательское тестирование, тестирование API, тестирование баз данных, кроссбраузерное тестирование,  тестирование мобильных приложений, разработка стратегий тестирования, тестирование безопасности, производительности, юзабилити и доступности, показаны основы автоматизации тестирования. Уделено внимание созданию тест-планов, использованию системы управления версиями и работе с инструментарием Git.. Рассказано о принципах эффективной работы в команде. В книгу включены практические задания, призванные закрепить полученные знания.

Для тестировщиков ПО

Перед вами — исчерпывающее руководство по всем областям тестирования программного обеспечения.

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

  • Основы тестирования
  • Ручное исследовательское тестирование
  • Тестирование API
  • Создание тест-планов
  • Тестирование баз данных
  • Кроссбраузерное тестирование
  • Тестирование мобильных приложений
  • Разработка стратегий тестирования
  • Тестирование безопасности
  • Тестирование производительности
  • Тестирование юзабилити и доступности
  • Автоматизированное тестирование
  • Управление версиями и работа с Git
  • Работа в команде

Книгу “Идеальный тестировщик. Концепции, навыки и стратегии высококачественного тестирования” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Введение. 11

Часть I. Почему мы тестируем?. 13

Глава 1. Почему мы тестируем.. 15

Глава 2. Думайте как тестировщик. 17

Глава 3. Почему всегда будут нужны тестировщики программного
обеспечения. 19

Часть II. Ручное тестирование. 21

Глава 4. Тестирование текстового поля. 23

Глава 5. Сломайте свое приложение с помощью одного странного способа. 26

Глава 6. CRUD-тестирование. 28

Глава 7. Тестирование почтовых индексов. 33

Глава 8. Тестирование полей даты.. 35

Глава 9. Тестирование полей телефонных номеров. 37

Глава 10. Тестирование кнопок. 40

Глава 11. Тестирование форм.. 42

Глава 12. Четыре причины, по которым вы должны тестировать проверку
входных данных (даже если это скучно) 45

Глава 13. Три способа протестировать валидацию вывода. 48

Глава 14. Тестирование кнопки Назад. 51

Глава 15. Шесть советов по тестированию загрузки файлов. 53

Глава 16. Тестирование страницы авторизации. 56

Глава 17. Кроссбраузерное тестирование. 59

Глава 18. Перед тем как сообщить о дефекте. 62

Глава 19. Как воспроизвести ошибку. 65

Глава 20. Как зарегистрировать дефект. 69

Часть III. Как работают приложения. 73

Глава 21. Как работают HTTP-запросы.. 75

Глава 22. Маршрутизация в Интернет. 76

Глава 23. Кодирование и шифрование. 78

Глава 24. HTTPS, токены и файлы cookie. 80

Глава 25. Удобный JWT.. 83

Глава 26. Тестирование баз данных. 86

Глава 27. Тестирование реляционных баз данных. 89

Глава 28. Секреты SQL-запросов. 92

Глава 29. Тестирование нереляционных баз данных. 95

Глава 30. Бессерверная архитектура. 98

Часть IV. API-тестирование. 101

Глава 31. Знакомство с REST-запросами. 103

Глава 32. Подготовка к тестированию API. 105

Глава 33. Тестирование запросов GET.. 111

Глава 34. Тестирование запросов POST.. 116

Глава 35. Тестирование запросов PUT.. 120

Глава 36. Тестирование запросов PATCH.. 123

Глава 37. Тестирование запросов DELETE.. 124

Глава 38. Коды ответов. 125

Глава 39. Утверждения Postman. 128

Глава 40. Использование переменных в Postman. 136

Глава 41. Организация API-тестов. 142

Глава 42. Понимание данных JSON.. 145

Глава 43. Простое тестирование API-контрактов. 148

Часть V. Мобильное тестирование. 151

Глава 44. 12 проблем мобильного тестирования. 153

Глава 45. Ручное мобильное тестирование. 158

Глава 46. Семь советов по автоматизированному тестированию мобильных
устройств. 161

Часть VI. Тестирование безопасности. 165

Глава 47. Введение в тестирование безопасности. 167

Глава 48. Использование инструментов разработчика
для поиска уязвимостей в системе безопасности. 169

Глава 49. Тестирование уязвимостей IDOR.. 171

Глава 50. Введение в межсайтовый скриптинг. 173

Глава 51. Три способа проверки на межсайтовый скриптинг. 176

Глава 52. Знакомство с SQL-инъекциями. 180

Глава 53. Знакомство с перехватами сессий. 182

Глава 54. Знакомство с тестированием мобильной безопасности. 185

Часть VII. Тестирование производительности. 187

Глава 55. Введение в тестирование производительности. 189

Глава 56. Как разработать нагрузочный тест. 193

Часть VIII. Тестирование юзабилити и доступности. 197

Глава 57. Тестирование локализации и интернационализации. 199

Глава 58. Тестирование пользовательского опыта. 202

Глава 59. Тестирование доступности. 204

Часть IX. Основы разработки программного обеспечения. 205

Глава 60. Пишите код как разработчик. 207

Глава 61. Основы работы с командной строкой. 209

Глава 62. Основные определения в программировании. 213

Глава 63. Объектно-ориентированное программирование. 215

Глава 64. Передача параметров. 218

Глава 65. Настройка Node. 220

Глава 66. Стрелочные функции. 221

Глава 67. Промисы.. 223

Глава 68. Async/Await 227

Глава 69. Отладка для тестировщиков. 229

Глава 70. Семь шагов к решению любой проблемы кода. 232

Глава 71. Знакомство с Git 235

Глава 72. Шесть советов для успешной работы с Git 239

Глава 73. Разрешение конфликтов слияния. 242

Глава 74. Аккуратное знакомство с регулярными выражениями. 245

Глава 75. Логирование, мониторинг и оповещения. 247

Часть X. Автоматизированное тестирование. 251

Глава 76. Зачем автоматизировать?. 253

Глава 77. Когда автоматизировать?. 255

Глава 78. Переосмысление пирамиды: колесо автоматизации тестирования. 257

Глава 79. Колесо автоматизации тестирования на практике. 261

Глава 80. Юнит-тесты.. 263

Глава 81. Компонентные тесты.. 265

Глава 82. Сервисные тесты.. 268

Глава 83. Какие тесты API запускать и когда их запускать. 273

Глава 84. Настройка тестов пользовательского интерфейса. 276

Глава 85. Понимание DOM… 278

Глава 86. Нахождение веб-элементов. 280

Глава 87. Автоматизация CRUD-тестирования пользовательского интерфейса  284

Глава 88. Автоматизированное тестирование формы.. 287

Глава 89. Автоматизированное визуальное тестирование. 290

Глава 90. Автоматизированное тестирование безопасности. 292

Глава 91. Автоматизация нагрузочных тестов. 294

Глава 92. Автоматизированные тесты доступности. 298

Глава 93. Стратегия колеса автоматизации. Переход от «Что» к «Как»,
«Когда» и «Где». 299

Глава 94. Как нестабильные тесты разрушают доверие. 303

Часть XI. Cтратегия тестирования. 307

Глава 95. Сила незнания. 309

Глава 96. Сила предварительного тестирования. 311

Глава 97. Ваш будущий «я» скажет вам спасибо. 314

Глава 98. Как разработать план тестирования. 316

Глава 99. Организация плана тестирования. 322

Глава 100. Положительные результаты негативного тестирования. 328

Глава 101. Что включать в дымовой тест. 330

Глава 102. Что тестировать, когда на тестирование не хватает времени. 333

Глава 103. Как сделать так, чтобы тест-кейсы не замедляли вашу работу. 337

Глава 104. Запутались? Упрощайте! 343

Глава 105. Шесть шагов для написания эффективного отчета об ошибке. 346

Глава 106. Надо ли охотиться за дефектом?. 352

Глава 107. Почему нужно проводить тестирование в производственной среде?  354

Глава 108. Что делать, если ошибка обнаружена в производственной среде?. 356

Глава 109. Исправить все. 360

Глава 110. Иерархия качества. 363

Глава 111. Измерение качества. 365

Глава 112. Управление данными тестирования. 368

Глава 113. Вопрос времени. 371

Глава 114. Почему дискуссия «ручное тестирование или автоматизации»
ошибочна. 374

Глава 115. Как разрушить замкнутое пространство автоматизации. 377

Глава 116. Хватит писать так много тестов пользовательского интерфейса! 379

Глава 117. Пять причин, по которым вы не готовы к непрерывному
развертыванию.. 382

Часть XII. Гибкие навыки для тестировщиков. 385

Глава 118. Путь к успеху через вопросы.. 387

Глава 119. Семь оправданий, про которые тестировщики должны забыть. 389

Глава 120. Шесть типов тестировщиков, которых следует избегать. 393

Глава 121. Как приручить разработчика. 397

Глава 122. Самоорганизация для успешного тестирования. 399

Глава 123. Тайм-менеджмент для тестировщиков. 402

Глава 124. Как стать заметным.. 407

Благодарности. 411

Об авторе. 412

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

Джеквони Кристин

Джеквони Кристин (Kristin Jackvony) — опытный тестировщик и эксперт по обеспечению качества программных продуктов, специализирующийся как на совершенствовании устаревшего программного обеспечения, так и на поддержке нового ПО на самых ранних стадиях разработки. Обладает навыками организации систем и процессов для поддержки всех направлений тестирования. В свободное время ведет авторский блог «Думай как тестировщик» (Think Like a Tester), который можно найти по адресу https://thinkingtester.com.

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

Новинка: “Искусство Agile-тестирования”

Искусство Agile-тестирования

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

Для тестировщиков ПО, руководителей проектов

КНИГА ОХВАТЫВАЕТ ВСЕ ОСНОВНЫЕ АСПЕКТЫ AGILE-ТЕСТИРОВАНИЯ

Тестирование — важнейшая часть разработки программного обеспечения, в том числе и с использованием Agile-технологии.

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

Обычно Agile-разработка не вызывает сложностей, если речь идет об относительно небольшом проекте. Однако картина меняется, когда разрабатываемая система состоит из многих компонентов, объединенных сложной системой связей, когда над ней трудится несколько независимых команд. Именно на таких проектах и сделан основной акцент в книге. На ее страницах подробно рассматриваются как теоретические, так и практические аспекты Agile-тестирования. Книга предназначена в первую очередь для профессионалов – тестировщиков и руководителей проектов, однако она будет полезна и начинающим специалистам.

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

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

Введение………………………………………………………………………………………………… 11

Глава 1. Agile-разработка программного обеспечения……………………………. 15

Agile-манифест……………………………………………………………………………………………………………………………. 16

Идеи Agile-манифеста………………………………………………………………………………………………………… 16

Люди и взаимодействие важнее процессов и инструментов…………………………………. 16

Работающий продукт важнее исчерпывающей документации……………………………. 18

Сотрудничество с заказчиком важнее согласования условий контракта…………… 20

Готовность к изменениям важнее следования первоначальному плану……………… 20

Основополагающие принципы Agile-манифеста…………………………………………………………….. 21

Суть Agile-разработки……………………………………………………………………………………………………………….. 23

Адаптивность, а не планирование……………………………………………………………………………………. 24

Ориентированность на людей, а не на процесс………………………………………………………………. 25

Концепции Agile………………………………………………………………………………………………………………….. 25

Уровни Agile………………………………………………………………………………………………………………………… 26

Модели разработки программного обеспечения……………………………………………………………………. 28

Традиционное/классическое проектирование………………………………………………………………………… 29

Каскадная модель………………………………………………………………………………………………………………. 29

V-модель……………………………………………………………………………………………………………………………… 31

W-модель…………………………………………………………………………………………………………………………….. 32

Спиральная модель……………………………………………………………………………………………………………. 33

Инкрементальная модель………………………………………………………………………………………………….. 33

Итеративная модель…………………………………………………………………………………………………………… 34

Ведущие методологии Agile-разработки…………………………………………………………………………………. 36

Scrum…………………………………………………………………………………………………………………………………… 37

Scrum-роли………………………………………………………………………………………………………………… 38

Scrum-встречи……………………………………………………………………………………………………………. 40

Scrum-артефакты………………………………………………………………………………………………………. 41

Спринт……………………………………………………………………………………………………………………….. 44

Kanban………………………………………………………………………………………………………………………………… 45

Принципы управления изменениями……………………………………………………………………….. 45

Принципы предоставления услуг……………………………………………………………………………. 46

Практические шаги Kanban……………………………………………………………………………………… 47

Дополнительные Agile-фреймворки………………………………………………………………………………….. 48

Экстремальное программирование…………………………………………………………………………. 49

Разработка, управляемая функциональностью……………………………………………………… 50

Адаптивная разработка……………………………………………………………………………………………. 50

Crystal…………………………………………………………………………………………………………………………. 51

Масштабирование Agile……………………………………………………………………………………………………………. 51

Масштабированный Scrum……………………………………………………………………………………………….. 51

Текучая технология масштабирования……………………………………………………………………………. 52

Развернутый Agile-фреймворк…………………………………………………………………………………………… 53

Тестирование в Agile-разработках…………………………………………………………………………………………… 54

Глава 2. Бизнес-кейс: финансовая биржа………………………………………………. 56

Архитектура программного обеспечения биржи……………………………………………………………………. 56

Организация тестирования……………………………………………………………………………………………………….. 62

Тестовые системы и данные……………………………………………………………………………………………… 62

Организация Agile-команд…………………………………………………………………………………………………. 62

Глава 3. Организация…………………………………………………………………………….. 65

Структуры управления……………………………………………………………………………………………………………… 65

Линейно-функциональная структура управления………………………………………………………….. 66

Матричная структура управления…………………………………………………………………………………… 66

Встраивание Agile в структуру управления…………………………………………………………………………….. 67

Глава 4. Процессы…………………………………………………………………………………. 69

Адаптация Agile-процессов……………………………………………………………………………………………………….. 69

Процесс обучения и освоения: Shu-Ha-Ri (сю-ха-ри)…………………………………………………………….. 70

Процесс непрерывного улучшения: Kaizen (кайдзен)…………………………………………………………….. 71

Работа в спринте………………………………………………………………………………………………………………………… 72

Управление релизами………………………………………………………………………………………………………………… 73

Поддержка тестового обеспечения………………………………………………………………………………………….. 74

Проблемы и опасности……………………………………………………………………………………………………………… 75

Глава 5. Структура тестирования…………………………………………………………… 78

Объекты или уровни тестирования………………………………………………………………………………………….. 78

Модульное тестирование………………………………………………………………………………………………….. 79

Компонентное тестирование…………………………………………………………………………………………….. 80

Интеграционное тестирование…………………………………………………………………………………………. 81

Системное тестирование…………………………………………………………………………………………………… 81

Сквозное тестирование……………………………………………………………………………………………………… 82

Пользовательское тестирование: программный продукт и пользовательские интерфейсы          83

Категории тестирования…………………………………………………………………………………………………………… 83

Функциональное тестирование………………………………………………………………………………………… 84

Тестирование функциональности……………………………………………………………………………. 85

Аттестационное тестирование………………………………………………………………………………… 85

Нефункциональное тестирование…………………………………………………………………………………….. 85

Тестирование производительности…………………………………………………………………………. 86

Тестирование безопасности…………………………………………………………………………………….. 87

Дополнительные аспекты нефункционального тестирования……………………………… 88

Регрессионное тестирование…………………………………………………………………………………………….. 89

Приемочное тестирование………………………………………………………………………………………………… 90

Дымовое тестирование…………………………………………………………………………………………….. 91

Проверочное тестирование……………………………………………………………………………………… 91

Виды приемочного тестирования……………………………………………………………………………. 91

Техники тестирования……………………………………………………………………………………………………………….. 91

Структурные аспекты тестирования………………………………………………………………………………… 91

Метод черного ящика……………………………………………………………………………………………….. 91

Метод белого ящика…………………………………………………………………………………………………. 92

Метод серого ящика…………………………………………………………………………………………………. 92

Разработка через тестирование………………………………………………………………………………………… 92

Разработка через поведение……………………………………………………………………………………………… 93

Тестирование на основе моделирования…………………………………………………………………………. 94

Тестирование на основе данных………………………………………………………………………………………. 95

Техники формирования тест-кейсов и тестовых данных……………………………………………….. 96

Автоматизированное тестирование…………………………………………………………………………………. 97

Встраивание автоматизированных тестов в разработку продукта…………………….. 98

Некоторые аспекты автоматизированного тестирования…………………………………….. 99

Техники тестирования, основанные на опыте………………………………………………………………. 102

Эксплораторное тестирование……………………………………………………………………………… 102

Тестирование на основе сессий…………………………………………………………………………….. 104

Специальное тестирование……………………………………………………………………………………. 104

Внесение ошибок……………………………………………………………………………………………………………… 105

Мутационное тестирование…………………………………………………………………………………… 106

Модульная интеграция……………………………………………………………………………………………………. 106

Тестирование при интеграции на основе «большого взрыва»……………………………. 106

Инкрементальное тестирование……………………………………………………………………………. 107

Инструменты тестирования…………………………………………………………………………………………….. 107

Глава 6. Инфраструктура……………………………………………………………………… 109

Тестовая среда…………………………………………………………………………………………………………………………. 109

Тестовые данные……………………………………………………………………………………………………………………… 110

Глава 7. Agile-тестирование………………………………………………………………….. 112

Тест-квадранты………………………………………………………………………………………………………………………… 113

Квадрант КТ. Технические тесты, поддерживающие разработчиков………………………… 113

Тестирование модулей…………………………………………………………………………………………… 114

Компонентное тестирование…………………………………………………………………………………. 115

Квадрант КБ. Тесты, поддерживающие разработчиков и ориентированные на бизнес 116

Интеграционное тестирование………………………………………………………………………………. 118

Приемочные тесты для компонентов…………………………………………………………………….. 119

Функциональное тестирование системы………………………………………………………………. 119

Квадрант ПБ. Тесты, ориентированные на бизнес, поддерживающие продукт………… 120

Тестирование пользовательских сценариев…………………………………………………………. 121

Тестирование пригодности и удобства………………………………………………………………… 121

Пользовательское тестирование……………………………………………………………………………. 122

Квадрант ПТ. Технические тесты, поддерживающие продукт……………………………………. 123

Унаследованные системы……………………………………………………………………………………………………….. 124

Глава 8. Тестировщик………………………………………………………………………….. 127

Принципы успешной работы тестировщиков……………………………………………………………………….. 128

Постоянная обратная связь…………………………………………………………………………………………….. 128

Стремление принести пользу заказчику………………………………………………………………………… 129

Непосредственное личное общение……………………………………………………………………………….. 129

Смелость…………………………………………………………………………………………………………………………… 129

Сохранение вещей простыми………………………………………………………………………………………….. 130

Постоянное усовершенствование…………………………………………………………………………………… 130

Восприятие изменений…………………………………………………………………………………………………….. 131

Самоорганизация…………………………………………………………………………………………………………….. 131

Фокус на людях………………………………………………………………………………………………………………… 132

Радость от работы……………………………………………………………………………………………………………. 132

Глава 9. Тестовое обеспечение……………………………………………………………… 133

Планирование тестирования………………………………………………………………………………………………….. 134

Эпики…………………………………………………………………………………………………………………………………. 134

Истории…………………………………………………………………………………………………………………………….. 134

Стратегия тестирования………………………………………………………………………………………………….. 135

План тестирования…………………………………………………………………………………………………………… 138

Тест-спецификации и тест-кейсы……………………………………………………………………………………. 139

Пакеты тестов…………………………………………………………………………………………………………………………… 141

Метрики……………………………………………………………………………………………………………………………………. 142

Контроль над дефектами………………………………………………………………………………………………………… 145

Управление исходным кодом…………………………………………………………………………………………………. 146

Интегрированная среда разработки………………………………………………………………………………………. 147

Глава 10. Качество тестовых данных…………………………………………………… 148

Традиционный подход к оценке качества данных……………………………………………………………….. 148

Внутренняя категория……………………………………………………………………………………………………… 150

Контекстная категория……………………………………………………………………………………………………. 151

Категория представления данных………………………………………………………………………………….. 152

Категория доступа…………………………………………………………………………………………………………… 153

Пригодность к использованию как обобщенный показатель качества тестовых данных.. 153

Требования к метрике качества данных………………………………………………………………………… 154

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

Коэффициент покрытия тест-кейса……………………………………………………………………….. 157

Вес тест-кейса…………………………………………………………………………………………………………. 157

Глава 11. Психология Agile-тестирования……………………………………………. 160

Психологические вызовы работы в Agile……………………………………………………………………………….. 162

Психологические вызовы Agile-разработки…………………………………………………………………… 163

Психологические вызовы тестировщика……………………………………………………………………….. 163

Роль психологической безопасности……………………………………………………………………………… 165

Agile-команда……………………………………………………………………………………………………………………………. 166

Согласованность и координация в команде………………………………………………………………….. 167

Развитие команды…………………………………………………………………………………………………………….. 167

Постоянное совершенствование команды…………………………………………………………………….. 169

Психологические стили коллег и как с ними обходиться…………………………………………….. 169

Нарциссический стиль……………………………………………………………………………………………. 171

Добросовестный стиль…………………………………………………………………………………………… 173

Психопатический стиль………………………………………………………………………………………….. 173

Манипулятивный стиль………………………………………………………………………………………….. 174

Драматический стиль……………………………………………………………………………………………… 175

Лживый стиль………………………………………………………………………………………………………….. 175

Бдительный стиль…………………………………………………………………………………………………… 176

Кверулянтный стиль……………………………………………………………………………………………….. 177

Структурный стиль…………………………………………………………………………………………………. 177

Пассивно-агрессивный стиль…………………………………………………………………………………. 177

Активно-агрессивный стиль…………………………………………………………………………………… 178

Доминантный стиль………………………………………………………………………………………………… 178

Привязчивый стиль…………………………………………………………………………………………………. 179

Глава 12. Выживание в «плохих» Agile-проектах…………………………………. 180

Причины проблематичных Agile-проектов……………………………………………………………………………. 180

Слишком формальное следование Agile-процессам……………………………………………………… 180

Нереалистическое планирование в проекте………………………………………………………………….. 182

Плохие рабочие отношения в команде………………………………………………………………………….. 183

Проект не подходит для Agile-разработки…………………………………………………………………….. 183

Имитация Agile-подхода………………………………………………………………………………………………….. 184

Позиционирование в «плохом» проекте………………………………………………………………………………… 184

Простые правила тестировщика…………………………………………………………………………………….. 185

Поддерживать тестовое обеспечение……………………………………………………………………. 185

Тщательно документировать результаты и протоколы тестирования……………… 185

Уделять большое внимание подробной коммуникации со всеми коллегами……. 186

Всегда открывать баг-репорт и фиксировать потенциальную проблему…………. 186

Автоматизировать все, что возможно…………………………………………………………………… 187

Не воспринимать происходящее лично………………………………………………………………… 187

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

Термины и определения……………………………………………………………………….. 191

Библиография………………………………………………………………………………………. 203

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

Чернов Юрий Георгиевич

Чернов Юрий Георгиевич — кандидат технически наук с более чем 40-летним опытом в области разработки и тестирования программного обеспечения. Преподавал в различных университетах в Москве, Цюрихе, Киеве в качестве приглашенного лектора, работал в московских компаниях и израильском хайтеке. Выступал на многочисленных научных конференциях и конгрессах. Последние годы работает в Швейцарии, из них около 20 лет — на Цюрихской финансовой бирже в качестве руководителя группы тестирования и тест-менеджера. В настоящее время руководит собственной консалтинговой фирмой по тестированию программного обеспечения и научному анализу данных.

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

Встречайте: “Дата-ориентированное программирование”

Дата-ориентированное программирование

Книга посвящена парадигме DOP (дата-ориентированному программированию), являющейся расширением философии объектно-ориентированного программирования. Предлагается новый взгляд на формирование структур данных и операции над ними в высоконагруженных приложениях. Изложенный материал даёт решения сложных проблем, возникающих при управлении состоянием, разделяемыми и распределёнными данными, позволяет безопасно организовать параллелизм и конкурентность, а также адаптировать ключевые принципы объектно-ориентированного программирования (полиморфизм, композицию, наследование) к новым задачам, связанным с обработкой больших данных.

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

Код, одновременно обрабатывающий и данные, и их поведение (такая ситуация обычна в объектно-ориентированном программировании), порой чрезмерно усложняется, и управлять его состоянием становится практически невозможно. Новая парадигма «дата-ориентированное программирование» (DOP – data-oriented programming) решает эту проблему, поскольку здесь данные приложений содержатся в неизменяемых обобщённых структурах, а вычисления над ними выполняются при помощи обобщённых функций. Парадигма DOP, как и ООП, универсальна и не зависит от конкретного языка. Научитесь работать в таком стиле – и в ваших приложениях больше не будет ошибок, связанных с состоянием, станет легче понимать и поддерживать код.

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

В книге рассказано, как:

  • отделить код от данных;
  • заключать информацию в универсальные структуры данных;
  • управлять состоянием, не изменяя данных;
  • управлять конкурентностью в активно масштабируемых системах;
  • писать дата-ориентированные модульные тесты;
  • очерчивать контуры данных.

Книга предназначена для  программистов, имеющих опыт работы с высокоуровневыми языками программирования, в частности, JavaScript, Java, Python, C#, Clojure, Ruby, а также для руководителей и исследователей, решающих широкий спектр задач по обработке данных.

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

Вступительное слово………………………………………………………………………………. 13

Введение………………………………………………………………………………………………… 17

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

Об этой книге……………………………………………………………………………………………………………………………… 19

Кто должен прочитать эту книгу?……………………………………………………………………………………. 19

Как организована эта книга: дорожная карта………………………………………………………………… 19

О коде………………………………………………………………………………………………………………………………….. 21

Дискуссионный форум liveBook……………………………………………………………………………………….. 22

Об авторе……………………………………………………………………………………………………………………………………. 23

Об иллюстрации на обложке……………………………………………………………………………………………………. 23

Персонажи пьесы……………………………………………………………………………………………………………………….. 23

Часть 1. Гибкость……………………………………………………………………………. 25

Глава 1. Сложность объектно-ориентированного программирования……. 27

1.1. Дизайн ООП: классический или традиционный?…………………………………………………………….. 28

1.1.1. Этап проектирования………………………………………………………………………………………………. 28

1.1.2. UML 101……………………………………………………………………………………………………………………. 30

1.1.3. Объяснение каждой части диаграммы классов…………………………………………………….. 33

Класс Library…………………………………………………………………………………………………………………… 33

Классы Librarian, Member и User………………………………………………………………………………….. 33

Класс Catalog…………………………………………………………………………………………………………………. 35

Класс Book………………………………………………………………………………………………………………………. 35

Класс BookItem……………………………………………………………………………………………………………….. 35

1.1.4. Этап реализации………………………………………………………………………………………………………. 36

1.2. Источники сложности…………………………………………………………………………………………………………. 36

1.2.1. Множество отношений между классами……………………………………………………………….. 38

1.2.2. Непредсказуемое поведение кода…………………………………………………………………………… 40

1.2.3. Нетривиальная сериализация данных…………………………………………………………………… 42

1.2.4. Сложные иерархии классов…………………………………………………………………………………….. 44

Итоги…………………………………………………………………………………………………………………………………………… 48

Глава 2. Разделение кода и данных……………………………………………………….. 51

2.1. Две части системы ДОП……………………………………………………………………………………………………… 52

2.2. Объекты данных………………………………………………………………………………………………………………….. 54

2.3. Модули кода……………………………………………………………………………………………………………………….. 56

2.4. Системы ДОП просты для понимания………………………………………………………………………………. 61

2.5. Системы ДОП являются гибкими……………………………………………………………………………………….. 64

Итоги…………………………………………………………………………………………………………………………………………… 68

Глава 3. Основные манипуляции с данными…………………………………………. 69

3.1. Разработка модели данных……………………………………………………………………………………………….. 70

3.2. Представление записей в виде карт…………………………………………………………………………………… 74

3.3. Манипулирование данными с помощью универсальных функций……………………………….. 81

3.4. Вычисление результатов поиска……………………………………………………………………………………….. 85

3.5. Обработка записей различных типов……………………………………………………………………………….. 93

Итоги…………………………………………………………………………………………………………………………………………… 98

Глава 4. Управление состоянием………………………………………………………….. 101

4.1. Несколько версий системных данных…………………………………………………………………………….. 102

4.2. Структурное совместное использование………………………………………………………………………… 104

4.3. Реализация структурного совместного использования…………………………………………………. 110

4.4. Безопасность данных……………………………………………………………………………………………………….. 112

4.5. Фиксационный этап изменения……………………………………………………………………………………….. 114

4.6. Обеспечение целостности состояния системы……………………………………………………………….. 116

4.7. Восстановление предыдущих состояний……………………………………………………………………….. 117

Итоги…………………………………………………………………………………………………………………………………………. 120

Глава 5. Основы контроля конкурентности…………………………………………. 123

5.1. Оптимистичный контроль конкурентности……………………………………………………………………. 124

5.2. Согласование между конкурентными изменениями………………………………………………………. 126

5.3. Сокращение коллекций…………………………………………………………………………………………………….. 129

5.4. Структурная разница……………………………………………………………………………………………………….. 131

5.5. Имплементация алгоритма согласования………………………………………………………………………. 140

Итоги…………………………………………………………………………………………………………………………………………. 142

Глава 6. Модульные тесты…………………………………………………………………… 145

6.1. Простота дата-ориентированных тестовых кейсов………………………………………………………. 145

6.2. Модульные тесты для кода манипулирования данными……………………………………………… 147

6.2.1. Дерево вызовов функций……………………………………………………………………………………….. 149

6.2.2. Модульные тесты для функций вниз по дереву…………………………………………………… 150

6.2.3. Модульные тесты для узлов в дереве…………………………………………………………………… 154

6.3. Модульные тесты для запросов………………………………………………………………………………………. 157

6.4. Модульные мутационные тесты……………………………………………………………………………………… 162

Движение вперед……………………………………………………………………………………………………………………… 171

Итоги…………………………………………………………………………………………………………………………………………. 172

Часть 2. Масштабируемость……………………………………………………. 175

Глава 7. Основы валидации данных……………………………………………………. 179

7.1. Валидация данных в ДОП………………………………………………………………………………………………… 179

7.2. Суть JSON-схемы………………………………………………………………………………………………………………. 181

7.3. Гибкость и строгость схемы…………………………………………………………………………………………….. 188

7.4. Композиция схемы……………………………………………………………………………………………………………. 193

7.5. Сведения о сбоях при валидации данных………………………………………………………………………. 197

Итоги…………………………………………………………………………………………………………………………………………. 202

Глава 8. Расширенный контроль конкурентности……………………………….. 203

8.1. Сложность блокировок…………………………………………………………………………………………………….. 203

8.2. Потокобезопасный счетчик с атомами…………………………………………………………………………… 205

8.3. Потокобезопасный кеш с атомами………………………………………………………………………………….. 211

8.4. Управление состоянием с помощью атомов…………………………………………………………………… 213

Итоги…………………………………………………………………………………………………………………………………………. 215

Глава 9. Персистентные структуры данных…………………………………………. 217

9.1. Потребность в персистентных структурах данных………………………………………………………. 217

9.2. Эффективность персистентных структур данных…………………………………………………………. 221

9.3. Библиотеки персистентных структур данных……………………………………………………………….. 227

9.3.1. Персистентные структуры данных в Java……………………………………………………………. 228

9.3.2. Персистентные структуры данных в JavaScript………………………………………………….. 229

9.4. Персистентные структуры данных в действии………………………………………………………………. 232

9.4.1. Написание запросов с персистентными структурами данных………………………….. 232

9.4.2. Операции изменения при работе с персистентными структурами данных………. 235

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

9.4.4. Структурная разница…………………………………………………………………………………………….. 237

Итоги…………………………………………………………………………………………………………………………………………. 240

Глава 10. Операции с базой данных…………………………………………………….. 243

10.1. Извлечение данных из базы данных……………………………………………………………………………… 244

10.2. Хранение данных в базе данных…………………………………………………………………………………… 251

10.3. Простая манипуляция данными…………………………………………………………………………………….. 254

10.4. Продвинутая обработка данных…………………………………………………………………………………… 258

Итоги…………………………………………………………………………………………………………………………………………. 266

Глава 11. Веб-сервисы………………………………………………………………………….. 269

11.1. Другой запрос функции………………………………………………………………………………………………….. 270

11.2. Создание внутренностей, подобных внешностям……………………………………………………….. 270

11.3. Представление запроса клиента в виде карты…………………………………………………………….. 273

11.4. Представление ответа сервера в виде карты……………………………………………………………….. 276

11.5. Дальнейшая передача информации……………………………………………………………………………… 281

11.6. Расширение результатов поиска в действии………………………………………………………………… 284

11.7. Доставка в срок……………………………………………………………………………………………………………….. 295

Итоги…………………………………………………………………………………………………………………………………………. 296

Часть 3. Удобство сопровождения………………………………………… 297

Глава 12. Расширенная проверка данных……………………………………………. 299

12.1. Проверка аргументов функции………………………………………………………………………………………. 299

12.2. Проверка возвращаемого значения………………………………………………………………………………. 308

12.3. Расширенная проверка данных…………………………………………………………………………………….. 310

12.4. Автоматическое создание диаграмм модели данных…………………………………………………. 314

12.5. Автоматическая генерация модульных тестов на основе схемы……………………………….. 316

12.6. Новый подарок……………………………………………………………………………………………………………….. 324

Итоги…………………………………………………………………………………………………………………………………………. 326

Глава 13. Полиморфизм……………………………………………………………………….. 327

13.1. Сущность полиморфизма……………………………………………………………………………………………….. 327

13.2. Мультиметоды с единичной отправкой……………………………………………………………………….. 332

13.3. Мультиметоды с множественной отправкой……………………………………………………………….. 337

13.4. Мультиметоды с динамической отправкой………………………………………………………………….. 343

13.5. Интеграция мультиметодов: производство………………………………………………………………….. 346

Итоги…………………………………………………………………………………………………………………………………………. 351

Глава 14. Расширенная обработка данных…………………………………………… 353

14.1. Обновление значения на карте с помощью выразительности……………………………………. 353

14.2. Манипулирование вложенными данными……………………………………………………………………. 357

14.3. Использование наилучшего инструмента для работы……………………………………………….. 360

14.4. Легкое разматывание……………………………………………………………………………………………………… 365

Итоги…………………………………………………………………………………………………………………………………………. 370

Глава 15. Отладка………………………………………………………………………………… 371

15.1. Детерминизм в программировании……………………………………………………………………………….. 371

15.2. Репродуцируемость с числами и строками………………………………………………………………….. 375

15.3. Репродуцируемость с любыми данными………………………………………………………………………. 379

15.4. Модульные тесты……………………………………………………………………………………………………………. 383

15.5. Работа с внешними источниками данных…………………………………………………………………….. 392

Прощание…………………………………………………………………………………………………………………………………. 394

Итоги…………………………………………………………………………………………………………………………………………. 394

Приложение A. Принципы дата-ориентированного программирования. 397

A.1. Принцип № 1: отделяйте код от данных………………………………………………………………………… 398

A.1.1. Иллюстрация к принципу № 1………………………………………………………………………………. 399

Нарушение принципа № 1 в ООП……………………………………………………………………………….. 399

Нарушение принципа № 1 в ФП………………………………………………………………………………….. 400

Соблюдение принципа № 1 в ООП……………………………………………………………………………… 400

Соблюдение принципа № 1 в ФП………………………………………………………………………………… 401

A.1.2. Преимущества принципа № 1……………………………………………………………………………….. 401

Преимущество № 1: код может быть повторно использован в различных контекстах 402

Преимущество № 2: код может быть протестирован изолированно……………………….. 405

Преимущество № 3: системы, как правило, менее сложны………………………………………. 406

A.1.3. Издержки принципа № 1……………………………………………………………………………………….. 408

Издержка № 1: отсутствие контроля над тем, какой код к каким данным
может получить доступ……………………………………………………………………………………………….. 408

Издержка № 2: отсутствие пакетирования…………………………………………………………………. 408

Издержка № 3: системы состоят из большего количества объектов……………………….. 409

A.1.4. Основная суть принципа № 1……………………………………………………………………………….. 409

A.2. Принцип № 2: представляйте данные с помощью обобщенных структур………………….. 410

A.2.1. Иллюстрация к принципу № 2………………………………………………………………………………. 410

A.2.2. Преимущества принципа № 2……………………………………………………………………………….. 411

Применение функций, которые не ограничены определенным случаем использования……….. 412

Гибкая модель данных…………………………………………………………………………………………………. 412

A.2.3. Издержки принципа № 2……………………………………………………………………………………….. 413

Издержка № 1: снижение производительности………………………………………………………….. 413

Издержка № 2: отсутствие схемы данных………………………………………………………………….. 414

Издержка № 3: отсутствует проверка данных на валидность
во время компиляции……………………………………………………………………………………………………. 414

Издержка № 4: необходимость явного приведения типов………………………………………… 415

A.2.4. Основная суть принципа № 2……………………………………………………………………………….. 416

A.3. Принцип № 3: данные неизменяемы……………………………………………………………………………….. 417

A.3.1. Иллюстрация к принципу № 3………………………………………………………………………………. 417

A.3.2. Преимущества принципа № 3……………………………………………………………………………….. 419

Преимущество № 1: надежный доступ к данным для всех……………………………………….. 419

Преимущество № 2: предсказуемое поведение кода…………………………………………………. 419

Преимущество № 3: быстрая проверка равенства…………………………………………………….. 420

Преимущество № 4: безопасность конкурентности без затрат………………………………… 420

A.3.3. Издержки принципа № 3……………………………………………………………………………………….. 420

Издержка № 1: снижается производительность………………………………………………………… 421

Издержка № 2: требуется библиотека для персистентных структур данных………… 421

A.3.4. Основная суть принципа № 3……………………………………………………………………………….. 421

A.4. Принцип № 4: отделяйте схему данных от представления данных…………………………….. 422

A.4.1. Иллюстрация к принципу № 4………………………………………………………………………………. 422

A.4.2. Преимущества принципа № 4……………………………………………………………………………….. 424

Преимущество № 1: возможность свободно выбирать, какие данные
следует валидировать………………………………………………………………………………………………….. 424

Преимущество № 2: наличие опциональных полей………………………………………………….. 426

Преимущество № 3: наличие расширенных условий валидации данных………………. 428

Преимущество № 4: возможность автоматического создания визуализации модели данных  428

A.4.3. Издержки принципа № 4……………………………………………………………………………………….. 429

Издержка № 1: слабая связь между данными и их схемой……………………………………….. 430

Издержка № 2: небольшое снижение производительности………………………………………. 430

A.4.4. Основная суть принципа № 4……………………………………………………………………………….. 430

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

Приложение B. Обобщенный доступ к данным
в статически типизированных языках…………………………………………………. 433

B.1. Динамические геттеры для строковых карт…………………………………………………………………… 433

B.1.1. Доступ к невложенным полям карты с помощью динамических геттеров………. 434

B.1.2. Доступ к вложенным полям карты с помощью динамических геттеров…………… 435

B.2. Геттеры значений для карт……………………………………………………………………………………………… 436

B.2.1. Доступ к невложенным полям карты с помощью геттеров значений……………….. 437

B.2.2. Доступ к вложенным полям карты с помощью геттеров значений…………………… 438

B.3. Типизированные геттеры для карт…………………………………………………………………………………. 440

B.3.1. Доступ к невложенным полям карты с помощью типизированных геттеров…… 440

B.3.2. Доступ к вложенным полям карты с помощью типизированных геттеров………. 441

B.4. Обобщенный доступ к членам класса……………………………………………………………………………. 443

B.4.1. Обобщенный доступ к не вложенным членам класса………………………………………… 443

B.4.2. Обобщенный доступ к членам вложенного класса…………………………………………….. 447

B.4.3. Автоматическая сериализация объектов JSON…………………………………………………… 450

Итоги…………………………………………………………………………………………………………………………………………. 451

Приложение C. Дата-ориентированное программирование:
звено в цепи парадигм программирования…………………………………………… 453

C.1. Хронология……………………………………………………………………………………………………………………….. 453

C.1.1. 1958 год: Lisp…………………………………………………………………………………………………………. 453

C.1.2. 1981 год: значения и объекты………………………………………………………………………………. 453

C.1.3. 2000 год: идеальные хеш-деревья………………………………………………………………………… 455

C.1.4. 2006 год: «Из ямы со смолой»………………………………………………………………………………. 455

C.1.5. 2007 год: Clojure…………………………………………………………………………………………………….. 455

C.1.6. 2009 год: неизменяемость для всех………………………………………………………………………. 455

C.2. Принципы ДОП как наилучший подход…………………………………………………………………………. 456

C.2.1. Принцип № 1: отделяйте код от данных……………………………………………………………… 456

C.2.2. Принцип № 2: представляйте данные с помощью обобщенных структур……….. 456

C.2.3. Принцип № 3: данные неизменяемы…………………………………………………………………….. 456

C.2.4. Принцип № 4: отделяйте схему данных от представления данных………………….. 457

C.3. ДОП и другие парадигмы, связанные с данными………………………………………………………….. 458

C.3.1. Дата-ориентированная разработка…………………………………………………………………….. 458

C.3.2. Дата-управляемое программирование………………………………………………………………… 458

C.3.3. Дата-ориентированное программирование (ДОП)…………………………………………….. 459

Итоги…………………………………………………………………………………………………………………………………………. 459

Приложение D. Ссылки на Lodash……………………………………………………….. 461

Йонатан Шарвит

Йонатан Шарвит (Yehonathan Sharvit) более двадцати лет занимается программированием, ведёт блог, выступает на конференциях и проводит семинары по дата-ориентированному подходу во всём мире.

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

Новинка: “Серая уточка. Мордовские народные сказки”

Серая уточка. Мордовские народные сказки

В Республике Мордовия живет два народа — эрзя и мокша. На первый взгляд они очень похожи, но различия все же есть: в языке, костюме, некоторых обрядах.  А вот сказки у них одинаково веселые и с необыкновенными приключениями — «Серая уточка», «Куйгорож», «Как пчела в болоте увязла» и др.  Часто героями сказок становятся боги лесов, воды и земли, которые до сих пор почитаются в Мордовии.

Для младшего школьного возраста

…злые и жадные в этих сказках всегда получают по заслугам.

Серая уточка.

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

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

Художник

Ольга Ионайтис

Ольга Ионайтис  родилась в городе Мытищи Московской области. Профессию книжного художника выбрала ещё в детстве. В 1987 году закончила Московский полиграфический институт. Оформила более 150 книг для детей и взрослых. Любит путешествовать  и с удовольствием проводит мастер-классы для детей даже в самых отдаленных уголках России. За годы работы оформила и проиллюстрировала более 150 книг для детей и подростков. С 1995 года сотрудничает с журналом «Детская Роман-газета». За серию иллюстраций к произведениям Ф. Бернетт «Маленький лорд Фаунтлерой» и «Таинственный сад» была удостоена Серебряной медали Российской Академии художеств. В 2022 году серия иллюстраций к произведению К. Грэма «Ветер в ивах» была удостоена диплома лауреата ежегодного международного конкурса «Образ книги».

Серая уточка. Мордовские народные сказки
Опубликовано

Новинка: “Параллельное программирование – так ли это сложно?”

Параллельное программирование – так ли это сложно?

Книга исследует различные низкоуровневые механизмы и алгоритмы, лежащие в основе современных параллельных и конкурентных вычислений, в частности реализованные в ядре Linux.  Рассмотрены примитивы синхронизации (мьютексы и блокировки), владение данными, валидация, копирование и запись, эвристические методы разработки параллельных и конкурентных алгоритмов, подбор аппаратного обеспечения и другие малоизвестные находки в области параллелизма. Также уделено внимание упрощению и оптимизации параллельных вычислений. Наконец, спрогнозированы возможные тенденции развития параллельного программирования с учётом современных разработок нового аппаратного обеспечения.

 Для специалистов по параллельному программированию, Linux, работе с памятью и ресурсами в операционных системах

На фоне затухания закона Мура дальнейшее ускорение и масштабирование вычислений достижимо только через наращивание количества ядер и разработку новых параллельных и конкурентных алгоритмов.

Основы этих технологий заложены более 50 лет назад, но на русском языке пока представлены только в академических работах и разрозненных материалах по конкретным языкам программирования, прежде всего С++. Общим знаменателем между этими разноуровневыми наработками является данная книга, в которой изложен полувековой научный и практический опыт автора.

Книга посвящена низкоуровневому параллельному и конкурентному программированию. Особое внимание уделено малоизвестным проблемам проектирования параллельных систем, работе с высоконагруженными приложениями и ядром Linux.

В книге рассмотрены:

  • Цели параллельного программирования и альтернативы этого подхода
  • Физические и аппаратные ограничения
  • Примитивы и средства конкурентного программирования: блокировки, подсчёт ссылок, синхронизация, мьютексы и др.
  • Отладка конкурентных программ, включая их формальную верификацию
  • Параллельное программирование в режиме реального времени
  • Экстремально низкоуровневые темы: упорядочивание памяти и атомарные операции
  • Примеры практических задач: подсчёт ссылок, выход из лабиринта, связные списки, хеш-таблицы и др.
  • Тенденции развития параллельного программирования
Параллельное программирование

А также

– Более 500 быстрых вопросов для самопроверки
– Более 600 библиографических источников
– Более 1000 страниц

Как читать книгу

Читать книгу следует с «карандашом в руке» и по ходу работы писать низкоуровневый код, будь то код для ядра Linux или других операционных систем, код для управления базами данных, дорабатывать код библиотек и фреймворков. Материал особенно заинтересует читателей, желающих подробно изучить, как минимальными усилиями добиться максимальной производительности на многоядерном оборудовании.

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

Предисловие к русскому изданию.. 15

От автора. 16

Параллельное программирование: сложно или возможно?. 17

Нормативные положения. 17

Цветные изображения. 18

Глава 1. Как пользоваться этой книгой. 19

1.1 Структура книги. 20

1.2 Экспресс-тесты. 21

1.3 Альтернативы этой книге. 22

1.4 Пример исходного кода. 24

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

Глава 2. Введение. 27

2.1 Исторические трудности параллельного программирования. 28

2.2 Цели параллельного программирования. 29

2.2.1 Производительность. 30

2.2.2 Продуктивность. 32

2.2.3 Универсальность. 33

2.3 Альтернативы параллельному программированию.. 37

2.3.1 Несколько экземпляров последовательного приложения. 37

2.3.2 Использование существующего параллельного ПО.. 37

2.3.3 Оптимизация производительности. 38

2.4 Почему параллельное программирование такое сложное?. 39

2.4.1 Разделение работы. 40

2.4.2 Управление параллельным доступом. 41

2.4.3 Разделение и репликация ресурсов. 42

2.4.4 Взаимодействие с оборудованием. 42

2.4.5 Комбинированные возможности. 43

2.4.6 Как языки и среда помогают в решении этих задач?. 43

2.5 Обсуждение. 44

Глава 3. Аппаратное обеспечение и с чем его едят. 45

3.1 Обзор. 45

3.1.1 Конвейерные процессоры. 46

3.1.2 Ссылки на память. 49

3.1.3 Атомарные операции. 50

3.1.4 Барьеры памяти. 51

3.1.5 Промахи кэша. 51

3.1.6 Операции ввода-вывода. 52

3.2 Накладные расходы. 53

3.2.1 Архитектура аппаратной системы. 53

3.2.2 Затраты на операции. 55

3.2.3 Аппаратная оптимизация. 59

3.3 Бесплатные обеды. 60

3.3.1 3D-интеграция. 61

3.3.3 Свет вместо электронов. 62

3.3.4 Ускорители специального назначения. 63

3.3.5 Существующее параллельное программное обеспечение. 64

3.4 Результаты проектирования программного обеспечения. 64

Глава 4. Инструментарий. 66

4.1 Языки сценариев. 66

4.2 Многопроцессорность в системах POSIX.. 68

4.2.1 Создание и уничтожение процессов POSIX.. 68

4.2.2 Создание и уничтожение потоков POSIX.. 71

4.2.3 Блокировка в POSIX.. 72

4.2.4 Блокировка чтения-записи POSIX.. 77

4.2.5 Атомарные операции (GCC Classic) 82

4.2.6 Атомарные операции (C11) 83

4.2.7 Атомарные операции (Современный GCC) 83

4.2.8 Потоковые переменные. 83

4.3 Альтернативы операциям POSIX.. 84

4.3.1 Организация и инициализация. 84

4.3.2 Создание, уничтожение потоков и управление ими. 85

4.3.3 Блокировка. 88

4.3.4 Доступ к общим переменным. 89

4.3.5 Атомарные операции. 102

4.3.6 Переменные для каждого процессора. 103

4.4 Как выбрать подходящий инструмент?. 105

Глава 5. Подсчет. 106

5.1 Что сложного в конкурентном счете?. 107

5.2 Статистические счетчики. 111

5.2.1 Дизайн. 111

5.2.2 Реализация на основе массива. 111

5.2.3 Реализация на основе переменной потока. 113

5.2.4. Реализация с достижимой согласованностью.. 116

5.2.5 Обсуждение. 118

5.3 Приблизительные предельные счетчики. 119

5.3.1 Дизайн. 119

5.3.2 Реализация простого счетчика пределов. 121

5.3.3 Простой счетчик пределов. 127

5.3.4 Реализация приближенного счетчика предельных значений. 128

5.3.5 Приближенный счетчик предельных значений. 129

5.4 Точные счетчики предельных значений. 129

5.4.1 Реализация атомарного предельных значений. 130

5.4.2 Атомарный счетчик предельных значений: обсуждение. 138

5.4.3 Дизайн счетчика предельных значений с кражей сигналов. 138

5.4.4 Реализация счетчика предельных значений на основе кражи сигналов. 139

5.4.5 Счетчик предельных значений с кражей сигналов: обсуждение. 146

5.4.6 Применение точных счетчиков предельных значений. 146

5.5 Обсуждение параллельного подсчета. 148

5.5.1 Валидация параллельного подсчета. 148

5.5.2 Производительность параллельного счета. 149

5.5.3 Специализации параллельного счета. 150

5.5.4 Уроки параллельного подсчета. 151

Глава 6. Проектирование разделения и синхронизации. 154

6.1 Упражнения на разделение. 155

6.1.1 Проблема обедающих философов. 155

6.1.2 Двусторонняя очередь. 157

6.1.3 Пример разделения: обсуждение. 168

6.2 Критерии дизайна. 168

6.3 Детализация синхронизации. 171

6.3.1 Последовательная программа. 172

6.3.2 Кодовая блокировка. 174

6.3.3 Блокировка данных. 175

6.3.4 Владение данными. 178

6.3.5 Детализация и производительность блокировки. 179

6.4 Параллельный быстрый путь. 182

6.4.1 Блокировка чтения-записи. 183

6.4.2 Иерархическая блокировка. 184

6.4.3 Кэши распределителя ресурсов. 185

6.5 Методы без разделения?. 192

6.5.1 Решатель параллельных лабиринтов с очередью работ. 192

6.5.2 Альтернативный решатель параллельного лабиринта. 195

6.5.3 Проверка лабиринта. 198

6.5.4 Сравнение производительности I 198

6.5.5 Альтернативный последовательный решатель лабиринта. 201

6.5.6 Сравнение производительности II 201

6.5.7 Направления дальнейшего развития и выводы. 203

6.6 Разделение, параллелизм и оптимизация. 204

Глава 7. Блокировка. 205

7.1 Остаться в живых. 206

7.1.1 Взаимная блокировка. 206

7.1.2 Динамическая блокировка и голодание. 218

7.1.3 Несправедливость. 220

7.1.4 Неэффективность. 221

7.2 Типы блокировок. 222

7.2.1 Эксклюзивные блокировки. 222

7.2.2 Блокировки чтения-записи. 223

7.2.3 Прочие средства, помимо блокировок чтения-записи. 225

7.2.4 Блокировка с ограниченной областью действия. 226

7.3 Проблемы с реализацией блокировки. 230

7.3.1 Пример реализации эксклюзивной блокировки на основе атомарного обмена. 230

7.3.2 Другие реализации эксклюзивной блокировки. 231

7.4 Гарантии существования на основе блокировки. 234

7.5 Блокировка: герой или злодей?. 237

7.5.1 Блокировка приложений: герой! 237

7.5.2 Блокировка в параллельных библиотеках: еще один инструмент. 238

7.5.3 Блокировка при распараллеливании последовательных библиотек:
злодей! 242

7.6 Резюме. 245

Глава 8. Владение данными. 246

8.1 Несколько процессов. 247

8.2 Частичное владение данными и pthreads 247

8.3 Доставка функций. 248

8.4 Назначенный поток. 249

8.5 Приватизация. 249

8.6 Другие разновидности владения данными. 250

Глава 9. Отложенная обработка. 252

9.1 Пример запуска. 252

9.2 Подсчет ссылок. 255

9.3 Указатели опасности. 259

9.4 Блокировки последовательности. 267

9.5 Механизм Read-Copy-Update (RCU) 274

9.5.1 Введение в RCU.. 275

9.5.2 Основы RCU.. 285

9.5.3 API RCU ядра Linux. 297

9.5.4 Использование RCU.. 314

9.5.5 Работа, связанная с RCU.. 343

9.6 Что же выбрать?. 348

9.6.1 Что выбрать? Обзор. 348

9.6.2 Что выбрать? Подробный обзор. 350

9.6.3 Что выбрать? Использование в производстве. 354

9.7 А что насчет обновлений?. 356

Глава 10. Структуры данных. 357

10.1 Мотивирующее приложение. 357

10.2 Разделяемые структуры данных. 358

10.2.1 Дизайн хэш-таблицы. 358

10.2.2 Реализация хэш-таблицы. 359

10.2.3 Производительность хэш-таблицы. 363

10.3 Структуры данных преимущественно для чтения. 365

10.3.1 Реализация хэш-таблицы с защитой RCU.. 365

10.3.2 Проверка защищенной RCU хэш-таблицы. 367

10.3.3 Производительность защищенной RCU хэш-таблицы. 368

10.3.4 Хэш-таблицы с защитой RCU: обсуждение. 372

10.4 Неразделяемые структуры данных. 374

10.4.1 Дизайн хэш-таблицы с изменяемым размером. 374

10.4.2 Реализация хэш-таблицы с изменяемым размером. 376

10.4.3 Хэш-таблицы изменяемого размера: обсуждение. 385

10.4.4 Другие хэш-таблицы с изменяемым размером. 386

10.5 Прочие структуры данных. 390

10.6 Микрооптимизация. 392

10.6.1 Специализация. 392

10.6.2 Биты и байты. 393

10.6.3 Аппаратные соображения. 394

10.7 Резюме. 396

Глава 11. Валидация. 397

11.1 Введение. 398

11.1.1 Откуда берутся ошибки?. 398

11.1.2 Необходимый образ мышления. 400

11.1.3 Когда должна начинаться валидация?. 402

11.1.4 Путь с открытым исходным кодом. 403

11.2 Трассировка. 405

11.3 Утверждения. 406

11.4 Статический анализ. 407

11.5 Рецензирование кода. 408

11.5.1 Инспекция. 408

11.5.2 Пошаговый разбор. 409

11.5.3 Самопроверка. 409

11.6 Вероятности и гейзенбаги. 412

11.6.1 Статистика в дискретном тестировании. 413

11.6.2 Злоупотребление статистикой для дискретного тестирования. 415

11.6.3 Статистика непрерывного тестирования. 416

11.6.4 Охота на гейзенбаги. 418

11.7 Оценка производительности. 424

11.7.1 Эталонные тесты. 425

11.7.2 Профилирование. 425

11.7.3 Дифференциальное профилирование. 426

11.7.4 Микроэталонные тесты. 426

11.7.5 Изоляция. 428

11.7.6 Обнаружение помех. 429

11.8 Резюме. 434

Глава 12. Формальная верификация. 436

12.1 Поиск в пространстве состояний. 436

12.1.1 Promela и Spin. 437

12.1.2 Как использовать Promela. 443

12.1.3 Пример Promela: блокировка. 447

12.1.4 Пример Promela: QRCU.. 450

12.1.5 Promela Parable: dynticks и RCU с вытесняющим выполнением. 461

12.1.6 Проверка RCU с вытесняющим выполнением и dynticks 467

12.2 Поиск в пространстве состояний специального назначения. 496

12.2.1 Анатомия лакмусовой бумажки. 497

12.2.2 Что означает эта лакмусовая бумажка?. 499

12.2.3 Запуск лакмусовой бумажки. 500

12.2.4 Обсуждение PPCMEM.. 501

12.3 Аксиоматические подходы. 503

12.3.1 Аксиоматические подходы и блокировка. 505

12.3.2 Аксиоматические подходы и RCU.. 507

12.4 SAT-решатели. 511

12.5 Средства проверки моделей без сохранения состояния. 513

12.6 Резюме. 514

12.7 Выбор плана проверки. 516

Глава 13. Собираем все вместе. 520

13.1 Головоломки со счетчиками. 520

13.1.1 Подсчет обновлений. 520

13.1.2 Подсчет поисковых запросов. 521

13.2 Вернемся к подсчету ссылок. 521

13.2.1 Реализация категорий подсчета ссылок. 523

13.2.2 Оптимизации счетчика. 530

13.3 Помощники указателя опасности. 530

13.3.1 Масштабируемый счетчик ссылок. 530

13.4 Блокировка последовательности. 531

13.4.1 Дуэльные блокировки последовательности. 531

13.4.2 Коррелированные элементы данных. 532

13.4.3 Атомарное перемещение. 533

13.4.4 Превращение в писателя. 535

13.5 RCU спешит на помощь. 535

13.5.1 RCU и статистические счетчики на основе переменных потока. 535

13.5.2 RCU и счетчики съемных устройств ввода-вывода. 539

13.5.3 Массив и длина. 540

13.5.4 Коррелированные поля. 542

13.5.5 Удобный для обновления обход. 543

13.5.6 Масштабируемый счетчик ссылок 2. 543

13.5.7 Перезапущенные периоды простоя. 544

Глава 14. Продвинутая синхронизация. 548

14.1 Как избежать блокировки. 548

14.2 Неблокирующая синхронизация. 549

14.2.1 Простой NBS. 550

14.2.2 Применимость преимуществ NBS. 554

14.2.3 Обсуждение NBS. 557

14.3 Параллельные вычисления в реальном времени. 558

14.3.1 Что такое вычисления в реальном времени?. 558

14.3.2 Кому нужен режим реального времени?. 565

14.3.3 Кому нужен параллельный режим реального времени?. 566

14.3.4 Реализация параллельных систем реального времени. 567

14.3.5 Реализация параллельных операционных систем реального времени. 569

14.3.6 Реализация параллельных приложений реального времени. 586

14.3.7. Реальное время против реального быстрого: как выбрать?. 591

Глава 15. Продвинутая синхронизация: порядок памяти. 594

15.1 Упорядочение: зачем и как?. 595

15.1.1 Почему аппаратное обеспечение нарушает порядок?. 596

15.1.2 Как принудительно выполнить упорядочение?. 599

15.1.3 Базовые эмпирические правила. 603

15.2 Трюки и ловушки. 605

15.2.1 Переменные с несколькими значениями. 605

15.2.2 Переупорядочивание ссылок на память. 609

15.2.3 Адресные зависимости. 612

15.2.4 Зависимости данных. 615

15.2.5 Зависимости управления. 616

15.2.6 Когерентность кэша. 618

15.2.7 Атомарность множественных копий. 620

15.3 Ужасы времени компиляции. 635

15.3.1 Ограничения по ссылке на память. 636

15.3.2 Проблемы с зависимостями от адреса и от данных. 637

15.3.3. Проблемы с зависимостями управления. 642

15.4 Примитивы более высокого уровня. 648

15.4.1 Выделение памяти. 648

15.4.2 Блокировка. 649

15.4.3 RCU.. 656

15.5 Особенности аппаратного обеспечения. 670

15.5.1 Alpha. 673

15.5.2 Armv7-A/R. 677

15.5.3 Armv8. 678

15.5.4 Itanium.. 679

15.5.5 MIPS. 680

15.5.6 POWER / PowerPC. 681

15.5.7 SPARC TSO.. 683

15.5.8 x86. 684

15.5.9 z Systems 685

15.6 Где требуется упорядочение памяти?. 685

Глава 16. Простота использования. 688

16.1 Что такое «простота»?. 688

16.2 Шкала Расти при проектировании API 689

16.3 Стрижка множества Мандельброта. 690

Глава 17. Противоречивые взгляды на будущее. 693

17.1 Будущее процессорных технологий стало не таким, каким должно было. 693

17.1.1 Однопроцессорность превыше всего. 695

17.1.2 Потокомания. 695

17.1.3 Атака клонов. 696

17.1.4 Краш-тест о стену памяти. 696

17.1.5 Поразительные ускорители. 698

17.2 Транзакционная память. 698

17.2.1 Внешний мир. 699

17.2.2 Модификация процесса. 704

17.2.3 Синхронизация. 710

17.2.4 Обсуждение. 716

17.3 Аппаратная транзакционная память. 719

17.3.1 Преимущества HTM при блокировке WRT. 720

17.3.2 Слабые стороны HTM по сравнению с блокировкой. 722

17.3.3. Слабые стороны HTM по сравнению с блокировкой и не только. 731

17.3.4 Где лучше всего использовать HTM?. 735

17.3.5 Что может повлиять на ситуацию.. 736

17.3.6 Выводы. 740

17.4 Формальное регрессионное тестирование?. 741

17.4.1 Автоматический перевод. 741

17.4.2 Среда. 743

17.4.3 Накладные расходы. 743

17.4.4 Поиск ошибок. 745

17.4.5 Минимальный набор инструментов. 746

17.4.6 Релевантные ошибки. 747

17.4.7 Формальная система оценки регрессии. 748

17.5 Функциональное программирование в параллелизме. 750

17.6 Резюме. 752

Глава 18. Подведем итоги и наметим перспективы.. 753

Приложение А. Важные вопросы.. 757

А.1 Почему параллельные программы не всегда быстрее?. 757

А.2 Почему бы не убрать блокировку?. 758

А.3 Который сейчас час?. 758

А.4 Что значит «после»?. 760

А.5 Сколь сильным должно быть упорядочение?. 764

А.5.1 Где находятся определяющие данные?. 765

А.5.2 Согласованные данные используются последовательно?. 766

А.5.3 Разделяема ли задача?. 766

А.5.4 А если все это неверно?. 766

А.6 В чем разница между «конкурентным» и «параллельным»?. 767

А.7 Почему программа глючит?. 768

Приложение Б. «Игрушечные» реализации RCU.. 769

Б.1 RCU на основе блокировки. 769

Б.2 RCU на основе блокировки потока. 770

Б.3 Простой RCU на основе счетчика. 772

Б.4 RCU без голодания на основе счетчика. 774

Б.5 Масштабируемый RCU на основе счетчиков. 778

Б.6 Масштабируемый RCU на основе счетчиков с общими периодами простоя. 781

Б.7 RCU на основе автономного счетчика. 784

Б.8 RCU с вложенностью на основе автономного счетчика. 787

Б.9 RCU на основе состояний покоя. 790

Б.10 Краткий обзор «игрушечных» реализаций RCU.. 793

Приложение В. Зачем нужны барьеры памяти?. 795

В.1 Структура кэша. 795

В.2 Протоколы когерентности кэша. 798

В.2.1 Состояние MESI 798

В.2.2 Сообщения протокола MESI 799

В.2.3 Диаграмма состояний MESI 800

В.2.4 Пример протокола MESI 802

В.3 Сохранения порождают ненужные простои. 803

В.3.1 Буферы сохранения. 804

В.3.2 Переадресация хранения. 805

В.3.3. Буферы хранения и барьеры памяти. 806

В.4 Последовательности сохранения приводят к ненужным задержкам. 809

В.4.1 Очереди недействительности. 810

В.4.2 Очереди недействительности и подтверждения недействительности. 810

В.4.3 Очереди недействительности и барьеры памяти. 811

В.5 Чтение и запись барьеров памяти. 814

В.6 Примеры последовательностей барьера памяти. 815

В.6.1 Враждебная порядку архитектура. 815

В.6.2 Пример 1. 816

В.6.3 Пример 2. 817

В.6.4 Пример 3. 818

В.7 Барьеры памяти с нами навсегда?. 818

В.8 Советы разработчикам аппаратного обеспечения. 819

Приложение Г. Ответы на быстрые тесты.. 821

Г.1 Как пользоваться этой книгой. 821

Г.2 Введение. 822

Г.3 Аппаратное обеспечение и его привычки. 829

Г.4 Инструментарий. 835

Г.5 Подсчет. 845

Г.6 Разбиение на разделы и синхронизация. 868

Г.7 Блокировка. 877

Г.8 Владение данными. 889

Г.9 Отложенная обработка. 891

Г.10 Структуры данных. 915

Г.11 Проверка. 924

Г.12 Формальная верификация. 935

Г.13 Собираем все вместе. 947

Г.14 Продвинутая синхронизация. 953

Г.15 Продвинутая синхронизация:  упорядочение памяти. 956

Г.16 Простота использования. 976

Г.17 Противоречивые взгляды на будущее. 977

Г.18 Важные вопросы. 987

Г.19 «Игрушечные» реализации RCU.. 988

Г.20 Зачем нужны барьеры памяти?. 998

Глоссарий. 1004

Библиография. 1014

Благодарности. 1058

Советник LATEX.. 1058

Рецензенты. 1058

Владельцы машин. 1059

Оригинальные публикации. 1059

Авторство рисунков. 1060

Прочая поддержка. 1061

Акронимы.. 1062

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

Указатель API 1070

Paul Mckenney

Пол Маккинни (Paul Mckenney) — профессор, ведущий специалист по поддержке ядра Linux (функционал RCU), член комитета по стандартизации ISO SC22 WG21 (C++), один из авторов действующей в Linux модели памяти. Сфера научных интересов: технологии валидации и надёжная реализация сложных конкурентных вычислений. Более 50 лет занимается программированием, в том числе 30 лет исследует параллельное программирование. Автор более 200 публикаций и обладатель 150 патентов на различные разработки в области информатики. Является активным контрибьютором ядра Linux.

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

Вышла книга “MySQL. Практические рецепты”

MySQL. Практические рецепты

Изложены фундаментальные идеи SQL и MySQL. Рассмотрены базовые принципы построения запросов и такие основы SQL, как объединения таблиц, фильтрация данных для создания расширенных запросов, форматирование запросов, построение подзапросов, генерация производных таблиц, структурирование запросов и вывод таблиц. Подробно описаны принципы анализа данных с использованием наборов данных MySQL. Представлены методики выполнения сложных запросов к базам данных. Показано использование простой математики и логики, множественных фильтров, описаны приемы агрегирования данных. Рассказывается о том, как проводить скользящий анализ, изучать временные ряды, а также управлять сложными массивами данных в MySQL.

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

Эффективная работа с базами данных MySQL с помощью SQL-операций, извлечения данных и пользовательских запросов

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

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

В книге:

  • Подробно описаны принципы анализа данных с использованием наборов данных MySQL
  • Представлены методики выполнения сложных запросов к базам данных MySQL
  • Рассматриваются такие понятия SQL, как объединение таблиц, фильтрация данных, структурирование запросов и вывод таблиц
  • Показано использование простой математики и логики, множественных фильтров, описаны приемы агрегирования данных
  • Даны примеры грамотного использования табличных выражений, подзапросов и сложных вычислений, правильного применения расширенных методов для проведения анализа скользящих и временных рядов
  • Практические примеры проводят читателя через все этапы освоения SQL — от новичка до мастера

Для кого эта книга

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

Книгу “MySQL. Практические рецепты” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Об авторе. 15

Об авторе рецензии. 16

Благодарности. 17

Введение. 18

Зачем нужно изучать SQL?. 18

Почему MySQL?. 19

Что представляет собой SQL?. 19

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

Что даст вам эта книга. 20

Как читать эту книгу. 20

Детализированный запрос. 21

Структура книги. 21

Цветные изображения. 23

Образец данных и образцы запросов. 23

Версии MySQL. 23

Теперь самое время начать работу с запросами к MySQL. 23

ГЛАВА 1. Составление основных запросов SQL.. 25

Предварительные условия. 25

  1. Реляционные базы данных. 26
  2. Запуск MySQL Workbench. 27
  3. Подключение к базе данных. 30
  4. Просмотр таблиц в базе данных. 31
  5. Обнаружение всех представлений в базе данных. 32
  6. Использование клиентской командной строки. 32
  7. Вывод данных в таблицу. 35
  8. Отображение данных из определенного поля. 38
  9. Поиск столбцов в таблице. 39
  10. Отображение данных из определенного набора полей. 40
  11. Использование командной строки для отображения структуры таблицы.. 41
  12. Изменение имени поля в выходных данных. 42
  13. Сортировка данных. 43
  14. Сортировка данных в порядке, обратном алфавитному. 46
  15. Применение нескольких сортировочных критериев. 47
  16. Ограничение количества отображаемых записей. 48

Резюме. 50

Основные знания, приобретенные в этой главе. 50

ГЛАВА 2. Использование нескольких таблиц при составлении
запросов данных. 53

Хранение данных в нескольких таблицах. 53

  1. Соединение таблиц. 54
  2. Соединение таблиц с разными именами полей и связями. 58
  3. Удаление дубликатов из результатов запроса. 59
  4. Соединение нескольких таблиц. 62
  5. Использование псевдонимов таблиц. 65
  6. Соединение нескольких таблиц. 68
  7. Визуализация баз данных. 70
  8. Использование представлений для запоминания сложных объединений таблиц 72

Резюме. 73

Основные знания, приобретенные в этой главе. 74

ГЛАВА 3. Расширенное соединение таблиц. 75

Многообразие типов соединений таблиц. 75

  1. LEFT JOIN и возврат всех данных из таблицы с левым соединением.. 76
  2. RIGHT JOIN и возврат всех данных из таблицы с правым соединением.. 79
  3. Соединения через промежуточные таблицы.. 81
  4. Использование в соединениях нескольких полей. 83
  5. Объединение таблицы с самой собой. 85
  6. Соединение таблиц по диапазонам значений. 88
  7. Перекрестные соединения. 91
  8. Объединение концепций. 92

Резюме. 93

Основные знания, приобретенные в этой главе. 93

ГЛАВА 4. Фильтрация данных. 95

Использование языка SQL для фильтрации данных. 95

  1. Фильтрация данных с помощью соединений. 96
  2. Фильтрация данных с использованием соединения нескольких таблиц. 96
  3. Фильтрация выводимых данных с помощью промежуточных таблиц. 99
  4. Фильтрация текста. 102
  5. Применение нескольких текстовых фильтров. 103
  6. Исключение элемента. 105
  7. Использование нескольких фильтров исключения. 106
  8. Фильтрация чисел, превышающих заданный порог. 108
  9. Фильтрация чисел ниже определенного порога. 109
  10. Фильтрация по значениям до определенного числа включительно. 110
  11. Фильтрация по диапазону значений. 111
  12. Использование булевых фильтров (True или False) 113

Резюме. 115

Основные знания, приобретенные в этой главе. 115

ГЛАВА 5. Применение сложных фильтров при составлении запросов. 117

Комплексные методы фильтрации. 117

  1. Фильтры “или… или…”. 118
  2. Одновременное использование нескольких отдельных критериев. 119
  3. Использование нескольких фильтров и исключение данных. 120
  4. Одновременная фильтрация текста и чисел. 122
  5. Одновременное применение сложных альтернативных фильтров. 123
  6. Поиск с учетом регистра. 126
  7. Отключение чувствительности к регистру в фильтрах. 127
  8. Поиск с использованием подстановочных знаков. 129
  9. Подстановочные знаки для исключения данных. 131
  10. Включение чувствительности к регистру в фильтрах подстановочных знаков 132
  11. Фильтрация данных по определенной части текста. 133
  12. Работа с NULL, или с незаполненными полями. 136
  13. Поиск с помощью регулярных выражений. 138

Резюме. 139

Основные знания, полученные в этой главе. 140

ГЛАВА 6. Выполнение простых расчетов. 141

Выполнение вычислений на языке SQL. 141

  1. Выполнение простых математических действий. 141
  2. Анализ типов данных в представлениях MySQL. 144
  3. Изоляция сегментов формул с использованием математики. 146
  4. Расчет коэффициентов. 147
  5. Предотвращение ошибок деления на ноль. 149
  6. Увеличение значений на определенный процент. 150
  7. Сортировка вывода по результату расчетов. 151
  8. Обработка недостающих данных. 153
  9. Фильтрация вычислений. 155
  10. Сложные вычисляемые фильтры.. 157
  11. Быстрое написание точного SQL-запроса. 160

Резюме. 161

Основные знания, полученные в этой главе. 161

ГЛАВА 7. Объединение результатов. 163

Объединение данных в SQL-запросе. 163

  1. Подсчет итоговых показателей таблицы.. 164
  2. Использование рассчитанных сумм.. 165
  3. Группировка суммарных показателей. 166
  4. Использование нескольких уровней группирования. 167
  5. Расчет средних значений. 169
  6. Подсчет сгруппированных элементов. 170
  7. Подсчет уникальных элементов. 172
  8. Отображение верхнего и нижнего числовых порогов. 173
  9. Групповая фильтрация. 174
  10. Фильтрация суммарных результатов. 175
  11. Выбор данных на основе суммарных результатов и определенных критериев фильтрации 176
  12. Сортировка по суммарным результатам.. 178

Резюме. 179

Основные знания, полученные в этой главе. 180

ГЛАВА 8. Работа с датами в MySQL.. 181

Анализ данных за определенный период времени. 181

  1. Фильтрация записей по дате. 182
  2. Фильтрация данных по диапазону дат. 183
  3. Способ указания дат в запросах MySQL. 185
  4. Расчет количества дней между двумя датами. 187
  5. Объединение данных по диапазону дат. 189
  6. Удаление элемента времени из фильтруемой даты.. 191
  7. Фильтрация по годам.. 193
  8. Фильтрация записей за несколько лет. 194
  9. Фильтрация данных по году и месяцу. 196
  10. Поиск данных по определенному кварталу. 197
  11. Фильтрация данных по дням недели. 199
  12. Поиск записей для определенной недели года. 200
  13. Объединение данных по дням недели определенного года. 201
  14. Сортировка данных по полному названию дня недели. 202
  15. Суммарные итоговые и средние показатели по дням года. 204
  16. Совокупные итоговые и средние показатели по дням месяца. 205
  17. Отображение обобщенных значений за месяц. 207
  18. Отображение суммарных данных за 75 дней до определенной даты.. 208
  19. Отображение данных за предыдущие три месяца. 210
  20. Определение текущей системной даты.. 212

Резюме. 212

Основные знания, полученные в этой главе. 213

ГЛАВА 9. Форматирование текста в результатах запроса. 215

Оптимизация вывода результата SQL-запросов. 215

  1. Добавление текста в выходные данные. 215
  2. Добавление нескольких фрагментов текста к числам.. 217
  3. Объединение столбцов с использованием различных разделителей. 218
  4. Предотвращение появления значения NULL в объединенном выводе. 221
  5. Соединение и группировка. 222
  6. Объединение столбцов. 223
  7. Преобразование текста в верхний регистр. 225
  8. Преобразование текста в нижний регистр. 226
  9. Извлечение нескольких символов из поля. 227
  10. Отображение трех символов справа от текста. 228
  11. Отображение заданного количества символов из определенного места текста 230
  12. Фильтрация записей по части поля. 231
  13. Фильтрация данных по определенным символам в заданной позиции внутри поля 232
  14. Объединение с частью поля. 234

Резюме. 235

Основные знания, полученные в этой главе. 235

ГЛАВА 10. Форматирование чисел и дат. 237

Представление чисел и дат. 237

  1. Отбрасывание десятичных знаков из выходных данных. 238
  2. Округление поля до ближайшего целого числа. 239
  3. Округление значения до ближайшего целого числа. 240
  4. Округление значения в большую или меньшую сторону до ближайшей тысячи 241
  5. Отображение значения в определенном числовом формате. 242
  6. Отображение значения в определенной валюте. 244
  7. Указание формата локали. 246
  8. Вывод даты в определенном формате. 247
  9. Вывод даты в формате ISO Date. 250
  10. Представление времени в определенном формате. 252

Резюме. 254

Основные знания, полученные в этой главе. 254

ГЛАВА 11. Использование базовой логики для улучшения анализа. 257

Применение SQL-логики. 257

  1. Генерирование предупреждения при превышении значения. 257
  2. Сокращение текста и добавление многоточий для обозначения усечения. 259
  3. Разработка сложных расчетных оповещений. 260
  4. Создание ключевых показателей эффективности. 263
  5. Классификация ряда элементов при отсутствии необходимых категорий
    в данных. 265
  6. Создание специальных групп категорий. 268
  7. Использование нескольких специальных категорий. 270
  8. Распределение данных по категориям с использованием нескольких вложенных классификаций 271
  9. Объединение специальных категорий. 273
  10. Размещение значений NULL в начале или конце списка. 276
  11. Классификация данных по произвольным категориям.. 278

Резюме. 280

Основные знания, полученные в этой главе. 280

ГЛАВА 12. Вложенные запросы.. 283

Что такое вложенные запросы?. 283

  1. Добавление сводных полей к подробным наборам данных. 284
  2. Отображение значения в процентах общего числа. 286
  3. Использование вложенного запроса для фильтрации данных. 289
  4. Использование вложенного запроса как компонента вычисления
    для фильтрации данных. 290
  5. Фильтрация объединенного диапазона данных с помощью нескольких вложенных запросов 293
  6. Фильтрация результатов объединения с помощью второго объединения. 295
  7. Вложенные внутренние запросы.. 296
  8. Использование вложенных запросов для исключения данных. 299
  9. Несколько вложенных внутренних запросов. 301
  10. Фильтрация по основным и вложенным запросам.. 304
  11. Применение отдельных фильтров во вложенном и основном запросах. 306

Резюме. 308

Основные знания, полученные в этой главе. 308

ГЛАВА 13. Производные таблицы.. 309

Что представляет собой производная таблица?. 309

  1. Использование производной таблицы для создания промежуточных вычислений 310
  2. Группировка и упорядочивание данных посредством пользовательской классификации 315
  3. Присоединение производных таблиц к другим таблицам.. 317
  4. Использование нескольких результатов из производной таблицы для фильтрации данных 321
  5. Сложные сводные производные таблицы.. 324
  6. Объединение нескольких производных таблиц. 326
  7. Использование нескольких производных таблиц для сложных объединений. 330
  8. Использование производных таблиц для присоединения несвязанных таблиц 333
  9. Сравнение данных за год с помощью производной таблицы.. 336
  10. Синхронизация фильтров между производной таблицей и основным запросом 338

Резюме. 340

Основные знания, полученные в этой главе. 340

ГЛАВА 14. Общие табличные выражения. 341

Оптимизация сложных запросов с помощью общих табличных выражений. 341

  1. Базовые общие табличные выражения. 342
  2. Вычисление с помощью CTE средних значений по нескольким
    величинам.. 345
  3. Повторное использование CTE в запросе. 347
  4. Использование CTE в производной таблице для обеспечения двух
    разных уровней объединения данных. 349
  5. Использование CTE для выделения данных из отдельного набора
    на другом уровне детализации. 352
  6. Использование нескольких общих табличных выражений. 354
  7. Вложенные общие табличные выражения. 357
  8. Использование нескольких общих табличных выражений для сравнения разрозненных наборов данных 359

Резюме. 363

Основные знания, полученные в этой главе. 363

ГЛАВА 15. Коррелированные вложенные запросы.. 365

Зачем использовать коррелированные вложенные запросы?. 365

  1. Простые коррелированные вложенные запросы.. 366
  2. Коррелированные вложенные запросы для отображения процентных
    долей определенного итогового значения. 368
  3. Сравнение наборов данных с помощью коррелированного вложенного запроса 369
  4. Дублирование вывода коррелированного вложенного запроса в результатах выполнения запроса 371
  5. Агрегированные коррелированные вложенные запросы.. 373
  6. Использование коррелированных вложенных запросов для фильтрации данных по совокупному значению.. 375
  7. Использование коррелированных вложенных запросов для обнаружения записей 377
  8. Использование коррелированного вложенного запроса для исключения данных 379
  9. Сложные объединения в коррелированных вложенных запросах. 380
  10. Использование коррелированного вложенного запроса для проверки значений в разных таблицах 383

Резюме. 384

Основные знания, полученные в этой главе. 384

ГЛАВА 16. Манипулирование набором данных. 387

Применение наборов данных для объединения и сопоставления данных. 387

  1. Чтение данных из нескольких одинаково структурированных таблиц
    с помощью оператора UNION.. 388
  2. Поиск и определение одинаковых данных в нескольких таблицах. 390
  3. Выделение общих элементов из нескольких подмножеств данных. 392
  4. Объединение в одном вложенном запросе нескольких одинаковых
    таблиц. 395
  5. Выделение из двух наборов данных неодинаковых записей. 396
  6. Отображение полных записей для несовпадающих данных. 398
  7. Отображение полных записей для одинаковых данных. 401

Резюме. 404

Основные знания, полученные в этой главе. 404

ГЛАВА 17. Использование SQL для более сложных вычислений. 407

Дополнительные методы расчета. 407

  1. Расчет процентного соотношения по каждой записи в наборе данных. 408
  2. Повторное использование нескольких вложенных запросов. 409
  3. Отбрасывание дробной части числа из результатов вычислений. 412
  4. Числовые типы данных. 413
  5. Преобразование типа отформатированных исходных данных в числовой тип, пригодный для использования. 415
  6. Проверка сбоев при удалении символов форматирования. 418
  7. Проверка наличия значений, не являющихся числовыми. 419
  8. Вычисление с помощью оператора MOD остатка от деления. 420
  9. Создание финансовых расчетов. 423
  10. Использование таблицы для получения последовательного списка
    чисел. 426
  11. Формирование случайной выборки из набора данных. 428

Резюме. 430

Основные знания, полученные в этой главе. 430

ГЛАВА 18. Сегментирование и классификация данных. 433

Ранжирование и сегментация данных. 433

  1. Упорядочивание данных по рангам.. 434
  2. Создание нескольких ранжированных групп. 436
  3. Создание нескольких рейтинговых групп и подгрупп. 438
  4. Фильтрация данных по рейтингу элементов. 440
  5. Классификация данных в строгом порядке ранжирования. 442
  6. Разделение данных на децили. 446
  7. Построение значений для перцентиля. 448
  8. Извлечение данных из определенного квинтиля. 450
  9. Возвращение верхнего N процента набора данных. 452
  10. Вычисление общих продаж.. 454
  11. Классификация данных с помощью функции PERCENT_RANK() 456

Резюме. 457

Основные знания, полученные в этой главе. 458

ГЛАВА 19. Скользящий анализ. 459

Промежуточные итоговые и средние значения, промежуточные подсчеты
и сравнительные значения. 459

  1. Добавление текущих итогов. 460
  2. Использование оконных функций в обобщенном запросе. 462
  3. Перезагрузка текущих итогов. 464
  4. Оконные функции во вложенном запросе. 466
  5. Добавление уникальных идентификаторов на лету с помощью
    функции ROW_NUMBER() 469
  6. Отображение записей с отсутствующими данными. 471
  7. Отображение полного диапазона дат и связанных с ними данных. 474
  8. Сравнение данных с данными из предыдущих записей. 477
  9. Сравнение данных по времени с помощью функций FIRST_VALUE()
    и LAST_VALUE() 481
  10. Отображение изменяющихся средних значений по заданному
    количеству записей. 483
  11. Отображение первой и последних четырех продаж по каждому
    клиенту. 486

Резюме. 488

Основные знания, полученные в этой главе. 488

ГЛАВА 20. Анализ данных, изменяющихся с течением времени. 491

Временной анализ. 491

  1. Обобщенные значения за год до настоящего времени. 492
  2. Объединение значений за месяц до настоящего времени. 494
  3. Возврат суммарных значений за квартал и до настоящего времени. 496
  4. Выделение данных за предыдущий месяц. 498
  5. Использование производной таблицы для сравнения данных
    со значениями предыдущего года. 500
  6. Нахождение общей суммы за каждый будний день в течение года. 502
  7. Подсчет количества выходных дней между двумя датами. 507
  8. Совокупные данные за последний день месяца. 509
  9. Обобщенные данные на последнюю пятницу месяца. 512
  10. Анализ временных отрезков в виде лет, месяцев и дней. 514
  11. Выделение временных периодов из элементов даты и времени. 517
  12. Данные списка по времени суток. 519
  13. Объединение данных по часовым диапазонам.. 521
  14. Обобщенные данные с разбивкой по часам по четвертям.. 523

Резюме. 524

Основные знания, полученные в этой главе. 525

ГЛАВА 21. Вывод комплексных данных. 527

Отображение комплексных данных с помощью SQL-запроса. 527

  1. Создание сводной таблицы.. 528
  2. Создание сводной таблицы, отображающей несколько сгруппированных строк 531
  3. Отмена группировки данных. 534
  4. Добавление итогов в сводные запросы.. 537
  5. Создание понятных таблиц, включающих итоговые данные
    и промежуточные итоги. 540
  6. Работа с данными иерархического типа. 542
  7. Создание иерархий с отступом.. 545
  8. Замена в итоговом результате аббревиатур полным текстом.. 546
  9. Замена определенного количества символов другим текстом.. 548
  10. Создание списка из нескольких записей с разделителями-запятыми. 549
  11. Экспорт списков, разделенных запятыми. 552
  12. Экспорт списков с заголовками. 555
  13. Экспорт списков фиксированной ширины.. 558
  14. Удаление лишних пробелов из выходных данных. 560

Резюме. 561

Основные знания, полученные в этой главе. 562

ПРИЛОЖЕНИЯ.. 563

Приложение 1. Установка MySQL.. 565

Установка MySQL. 565

  1. Установка MySQL в операционной системе Windows. 565
  2. Установка MySQL на Macintosh. 573
  3. Установка MySQL в операционной системе Linux. 574

Приложение 2. Установка MySQL Workbench. 576

Установка MySQL Workbench в операционной системе Windows. 576

  1. Установка MySQL под операционную систему Windows. 576
  2. Установка приложения MySQL Workbench на компьютере Macintosh. 581
  3. Запуск MySQL Workbench. 581
  4. Создание соединения с MySQL. 582

Приложение 3. Настройка базы данных с примерами. 584

  1. Загрузка примеров под операционную систему Windows. 584
  2. Загрузка выборочных данных в базу данных PrestigeCars. 584
  3. Открытие примеров запросов. 585

 

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

Adam Aspin

Адам Аспин (Adam Aspin) — аналитик данных с более чем 25-летним стажем. Работал в таких областях, как финансы, фармацевтика, коммунальные услуги, банковское дело, телекоммуникации и розничная торговля. Автор нескольких книг по различным аспектам платформы данных Microsoft, а также многочисленных публикаций на порталах SQLServerCentral.com и Simple-Talk. Регулярно выступает на различных мероприятиях, посвященных SQL Server, таких как SQLBits, SQL Saturdays/User groups и других.

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

Новинка: “Объектно-ориентированное программирование: с нуля к SOLID и MVC””

Объектно-ориентированное программирование: с нуля к SOLID и MVC

Базовая книга по приёмам объектно-ориентированного программирования (ООП) с примерами на языке C++. Разобраны основные принципы и техники разработки объектно-ориентированных программ, объяснены шаблоны проектирования (паттерны), особое внимание уделено принципам SOLID, архитектуре MVC (модель-представление-контроллер) и особенностям работы с ООП в С++.

Для начинающих разработчиков, специалистов по C++, студентов вузов

MVC и SOLID для уверенного понимания паттернов проектирования

Вот уже более 30 лет объектно-ориентированное программирование (ООП) остаётся основной парадигмой разработки программного обеспечения, доминирующей в академической информатике и в прикладном программировании на C++, Java, C#, Python и других языках, лидирующих в рейтинге TIOBE. При этом многие современные книги по ООП представляют собой огромные фолианты и не подходят для базового изучения этой темы.

Данная книга, написанная на основе многолетних наработок автора в преподавании и индустрии программного обеспечения, раскрывает тему ООП максимально доступно и просто. Кроме базовых основ ООП, книга описывает паттерны проектирования, принципы SOLID, архитектуру MVC (модель-представление-контроллер), а также затрагивает особенности ООП в языке С++.
Материал подходит в качестве вводной книги по ООП. Книга будет интересна студентам, осваивающим C++ и ООП, но и опытные специалисты тоже найдут в ней интересные детали об использовании паттернов проектирования.

Вы узнаете, как:

– инкапсулировать данные и код в объекты,
– работать с объектами в С++ и других востребованных языках,
– управлять композицией и взаимодействием объектов,
– управлять временем жизни объектов,
– использовать паттерны проектирования,
– применять принципы SOLID,
– создавать событийно-ориентированные приложения,
– решать задачи с помощью архитектуры MVC.

Книгу “Объектно-ориентированное программирование: с нуля к SOLID и MVC” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Посвящения и благодарности……………………………………………………………… 5

Введение……………………………………………………………………………………………… 7

Некоторые обозначения и сокращения………………………………………………………………………………… 7

Что это и для кого…………………………………………………………………………………………………………………… 7

Зачем это всё…………………………………………………………………………………………………………………………… 8

Методическая проблема……………………………………………………………………………………………………….. 9

Глава 1. Основы ООП……………………………………………………………………….. 11

1.1. Основные понятия…………………………………………………………………………………………………………. 11

1.2. Хватит бла-бла-бла, давайте уже код!………………………………………………………………………… 16

1.3. Определение классов и создание объектов…………………………………………………………………. 17

1.4. Работа с объектами……………………………………………………………………………………………………….. 20

1.5. Методы…………………………………………………………………………………………………………………………… 23

1.6. Сокрытие свойств и методов………………………………………………………………………………………… 26

1.7. Конструкторы и деструкторы, жизненный цикл объектов………………………………………… 29

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

1.9. Расширение и изменение объектов при наследовании………………………………………………. 45

1.10. Композиция………………………………………………………………………………………………………………….. 46

1.11. Глубокое и поверхностное копирование, value- и reference-семантика…………………. 51

1.12. Наследование, композиция, агрегация, ассоциация, зависимость…………………………. 52

1.13. Диаграммы классов, последовательностей, состояний и прочий UML…………………. 55

1.14. Композиция или наследование?………………………………………………………………………………… 60

1.15. Помещение объектов в переменные различных типов…………………………………………….. 63

1.16. Полиморфизм……………………………………………………………………………………………………………….. 66

1.17. Приведение типов………………………………………………………………………………………………………… 74

1.18. Передача и возврат объектов из функций в C++………………………………………………………. 83

1.19. Проблемы работы с памятью и не только, в C++ и не только…………………………………. 87

1.20. Технологии и практики управления долгоживущими объектами в C++………………… 90

Глава 2. Приемы ООП……………………………………………………………………….. 99

2.1. Демистификация паттернов ООП…………………………………………………………………………………. 99

2.2. Обычные приемы и антиприемы ООП, паттерны и антипаттерны…………………………. 100

2.3. Template Method………………………………………………………………………………………………………….. 103

2.4. Prototype……………………………………………………………………………………………………………………….. 106

2.5. Бесклассовое (прототипно-ориентированное) ООП………………………………………………… 109

2.6. Интерфейсы………………………………………………………………………………………………………………….. 110

2.7. Множественное наследование…………………………………………………………………………………… 113

2.8. Примеси (миксины, mixins)…………………………………………………………………………………………. 115

2.9. Singleton………………………………………………………………………………………………………………………… 116

2.10. Chain of Responsibility……………………………………………………………………………………………….. 119

2.11. Делегирование, объектная шизофрения………………………………………………………………….. 126

2.12. Strategy……………………………………………………………………………………………………………………….. 130

2.13. Adapter……………………………………………………………………………………………………………………….. 135

2.14. Iterator………………………………………………………………………………………………………………………… 142

2.15. Шаблоны C++. Осторожно по минному полю………………………………………………………… 150

2.16. Стандартные контейнеры STL…………………………………………………………………………………. 152

2.17. Decorator…………………………………………………………………………………………………………………….. 154

2.18. Proxy…………………………………………………………………………………………………………………………… 160

2.19. Composite…………………………………………………………………………………………………………………… 163

2.20. Observer сам по себе и как пример mixin…………………………………………………………………. 167

2.21. Command…………………………………………………………………………………………………………………… 171

2.22. Factory Method, Abstract Factory……………………………………………………………………………… 179

2.23. Abstract Factory еще раз……………………………………………………………………………………………. 187

2.24. Memento…………………………………………………………………………………………………………………….. 190

2.25. Bridge………………………………………………………………………………………………………………………….. 193

2.26. Visitor………………………………………………………………………………………………………………………….. 201

2.27. Одинарная и двойная диспетчеризация………………………………………………………………….. 209

2.28. SOLID-принципы……………………………………………………………………………………………………….. 211

2.29. Объектная интроспекция и рефлексия…………………………………………………………………….. 221

2.30. Событийно-управляемое приложение: событие, типы событий, сообщение, обработчик, механизм обмена сообщениями, очередь сообщений…………………………………………………………………………………………………… 225

2.31. Архитектура Model-View-Controller (MVC) и ее варианты.
Самый простой способ ее нарушить и исправить………………………………………………….. 237

Приложение. Ликбез по переменным и указателям в C++………………… 249

П.1. Обозначения………………………………………………………………………………………………………………… 249

П.2. Краткое описание объявления и примеры использования……………………………………… 249

П.3. Полное описание………………………………………………………………………………………………………… 250

П.3.1. Переменная………………………………………………………………………………………………………. 250

П.3.2. Память………………………………………………………………………………………………………………. 251

П.3.3. Адрес переменной……………………………………………………………………………………………. 252

П.3.4. Переменные-указатели……………………………………………………………………………………. 253

П.3.5. Операции с указателями…………………………………………………………………………………. 256

П.3.6. Массивы……………………………………………………………………………………………………………. 257

П.3.7. Ссылки………………………………………………………………………………………………………………. 259

П.4. Вопросы для самоконтроля……………………………………………………………………………………….. 262

Список литературы………………………………………………………………………….. 265

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

Макеев Григорий Анатольевич

Макеев Григорий Анатольевич, кандидат технических наук, практикующий инженер-программист, руководитель группы разработчиков, занимающейся разработкой наукоёмкого инженерного ПО, преподаватель Уфимского университета науки и технологий. Обладает почти 20-летним профессиональным стажем. На протяжении преподавательской карьеры вел дисциплины, связанные с объектно-ориентированным и функциональным программированием, а также с базами данных.

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

Встречайте 2-е издание книги: “Программирование инфраструктуры”

Программирование инфраструктуры. 2-е издание

Впервые на русском языке  книга об управлении облачной IT-инфраструктурой. Показаны методы контроля и развития версий инфраструктуры, аналогичные применяемым при работе с исходным кодом. Рассказано  об управлении облачными серверами, их стеками и кластерами через Terraform-подобный инфраструктурный код. Описано, как получать, поддерживать и масштабировать облачные ресурсы, как управлять облачными серверами, их стеками и кластерами, как организовать непрерывное развертывание и масштабирование облачных инфраструктур.

Для системных администраторов, инженеров по облачным сервисам, программистов,  DevOps-специалистов

Практики IaC постепенно развивались от поддержки серверов до управления полнофункциональными стеками. Но за новые возможности приходится расплачиваться усложнением систем. Эта книга позволит вам не только освоить паттерны проектирования облачных систем, но и вывести автоматизацию серверов на новый уровень.
Патрик Дебуа, основатель конференции DevOpsDays

Как создаются адаптивные облачные системы

Ещё несколько лет назад тема программируемой инфраструктуры (Infrastructure as Code – IaC) была в новинку. Но сегодня даже самые консервативные организации, например крупные банки, постепенно переносят инфраструктуру в облака, и становится важно поддерживать её конфигурацию в виде обширных баз кода.

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

В книге рассмотрены:

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

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

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

Зачем я написал эту книгу………………………………………………………………………………………………………… 19

Что нового и особенного во втором издании…………………………………………………………………………… 19

Что дальше…………………………………………………………………………………………………………………………………. 21

Чего ожидать и чего не стоит ожидать от этой книги…………………………………………………………….. 21

Исторический контекст программирования инфраструктуры………………………………………………. 22

Для кого эта книга……………………………………………………………………………………………………………………… 22

Принципы, практики, паттерны………………………………………………………………………………………………… 23

Примеры с ShopSpinner……………………………………………………………………………………………………………… 24

Соглашения, используемые в книге………………………………………………………………………………………….. 24

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

Часть I. Основы……………………………………………………………………………….. 27

Глава 1. Что такое программирование инфраструктуры………………………… 29

Из железного века в облачный………………………………………………………………………………………………….. 30

Программирование инфраструктуры………………………………………………………………………………………. 31

Достоинства программирования инфраструктуры………………………………………………………………… 32

Программирование инфраструктуры как оптимизация в расчете на изменения…………………. 32

Возражение: «мы не так часто вносим изменения, поэтому их автоматизация не столь нужна»            33

Возражение: «сначала систему нужно построить, а уже потом автоматизировать». 34

Возражение: «приходится выбирать между скоростью и качеством»………………………. 35

Четыре ключевые метрики………………………………………………………………………………………………………… 37

Три ключевые практики для программирования инфраструктуры………………………………………. 37

Ключевая практика: все определяется как код……………………………………………………………. 38

Ключевая практика: вся текущая работа непрерывно тестируется и сдается…………. 38

Ключевая практика: создаются небольшие простые фрагменты, которые поддаются изменениям независимо друг от друга………………………………………………………………………………………………………………………………… 39

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

Глава 2. Инфраструктурные принципы для облачного века………………….. 40

Принцип: исходим из того, что системы ненадежны……………………………………………………………… 40

Принцип: все нужно делать воспроизводимым………………………………………………………………………. 41

Западня: системы-снежинки……………………………………………………………………………………………………… 42

Принцип: создавайте такие компоненты, которые легко пустить в расход…………………………. 43

Принцип: минимизируем вариативность…………………………………………………………………………………. 44

Конфигурационная энтропия………………………………………………………………………………………… 45

Принцип: убедитесь, что любой процесс сможете повторить……………………………………………….. 47

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

Глава 3. Инфраструктурные платформы………………………………………………… 49

Из каких частей состоит инфраструктурная система…………………………………………………………….. 49

Инфраструктурные платформы……………………………………………………………………………………………….. 51

Инфраструктурные ресурсы…………………………………………………………………………………………………….. 53

Вычислительные ресурсы……………………………………………………………………………………………… 54

Ресурсы для хранения данных………………………………………………………………………………………. 55

Сетевые ресурсы…………………………………………………………………………………………………………….. 56

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

Глава 4. Ключевая практика: все определяется как код………………………… 60

Зачем следует определять инфраструктуру так, чтобы ее можно было программировать.. 60

Что можно определить как код…………………………………………………………………………………………………. 61

Выбирайте инструменты, конфигурация которых вынесена наружу……………………….. 61

Управление вашим кодом в системе контроля версий………………………………………………… 62

Языки для программирования инфраструктуры…………………………………………………………………….. 63

Скрипты для обслуживания инфраструктуры…………………………………………………………….. 64

Декларативные инфраструктурные языки…………………………………………………………………… 66

Программируемые императивные инфраструктурные языки…………………………………….. 68

Сравнение декларативных и императивных языков в контексте инфраструктуры…. 69

Предметно-ориентированные инфраструктурные языки……………………………………………. 69

Языки общего назначения в сравнении с инфраструктурными DSL…………………………. 71

Принципы реализации при определении инфраструктуры, которую планируется программировать              71

Разделяем декларативный и императивный код………………………………………………………….. 72

Обращайтесь с инфраструктурным кодом точно как с «настоящим»……………………….. 72

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

Часть II. Работа с инфраструктурными стеками………………. 75

Глава 5. Программирование инфраструктурных стеков………………………… 77

Что такое инфраструктурный стек…………………………………………………………………………………………… 77

Код стека…………………………………………………………………………………………………………………………. 78

Инстанс стека………………………………………………………………………………………………………………….. 79

Конфигурирование серверов в стеке…………………………………………………………………………….. 79

Низкоуровневые инфраструктурные языки…………………………………………………………………. 80

Высокоуровневые инфраструктурные языки………………………………………………………………. 81

Паттерны и антипаттерны структурирования стеков……………………………………………………………. 82

Антипаттерн: монолитный стек…………………………………………………………………………………….. 82

Зачем это нужно…………………………………………………………………………………………………….. 82

Применимость…………………………………………………………………………………………………………. 83

Последствия……………………………………………………………………………………………………………. 83

Внедрение……………………………………………………………………………………………………………….. 84

Смежные паттерны………………………………………………………………………………………………… 84

Паттерн: стек группы приложений……………………………………………………………………………….. 84

Зачем это нужно…………………………………………………………………………………………………….. 85

Применимость…………………………………………………………………………………………………………. 85

Последствия……………………………………………………………………………………………………………. 85

Внедрение……………………………………………………………………………………………………………….. 86

Смежные паттерны………………………………………………………………………………………………… 86

Паттерн: сервисный стек……………………………………………………………………………………………….. 86

Зачем это нужно…………………………………………………………………………………………………….. 86

Применимость…………………………………………………………………………………………………………. 87

Последствия……………………………………………………………………………………………………………. 87

Внедрение……………………………………………………………………………………………………………….. 87

Смежные паттерны………………………………………………………………………………………………… 87

Паттерн: микростек………………………………………………………………………………………………………… 87

Зачем это нужно…………………………………………………………………………………………………….. 88

Последствия……………………………………………………………………………………………………………. 88

Внедрение……………………………………………………………………………………………………………….. 88

Смежные паттерны………………………………………………………………………………………………… 88

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

Глава 6. Создание окружений с помощью стеков…………………………………… 89

Зачем вообще нужны окружения……………………………………………………………………………………………… 89

Окружения для доставки………………………………………………………………………………………………… 89

Множество продакшен-окружений………………………………………………………………………………. 90

Окружения, согласованность и конфигурация…………………………………………………………….. 91

Паттерны построения окружений…………………………………………………………………………………………….. 92

Антипаттерн: один стек на несколько окружений………………………………………………………. 92

Зачем это нужно…………………………………………………………………………………………………….. 92

Последствия……………………………………………………………………………………………………………. 93

Смежные паттерны………………………………………………………………………………………………… 93

Антипаттерн: копирование и вставка окружения……………………………………………………….. 94

Зачем это нужно…………………………………………………………………………………………………….. 94

Применимость…………………………………………………………………………………………………………. 94

Последствия……………………………………………………………………………………………………………. 94

Внедрение……………………………………………………………………………………………………………….. 95

Смежные паттерны………………………………………………………………………………………………… 95

Паттерн: переиспользуемый стек………………………………………………………………………………….. 95

Зачем это нужно…………………………………………………………………………………………………….. 96

Применимость…………………………………………………………………………………………………………. 97

Последствия……………………………………………………………………………………………………………. 97

Внедрение……………………………………………………………………………………………………………….. 97

Смежные паттерны………………………………………………………………………………………………… 97

Построение окружений с использованием множества стеков……………………………………………….. 98

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

Глава 7. Конфигурирование инстансов стеков…………………………………….. 100

Использование параметров стека для создания уникальных идентификаторов………………. 101

Пример параметров стека……………………………………………………………………………………………………….. 102

Паттерны конфигурирования стеков……………………………………………………………………………………… 103

Антипаттерн: установка параметров стека вручную……………………………………………….. 103

Зачем это нужно…………………………………………………………………………………………………… 103

Последствия………………………………………………………………………………………………………….. 104

Внедрение……………………………………………………………………………………………………………… 104

Смежные паттерны………………………………………………………………………………………………. 104

Паттерн: переменные окружения стека……………………………………………………………………… 105

Зачем это нужно…………………………………………………………………………………………………… 105

Применимость………………………………………………………………………………………………………. 105

Последствия………………………………………………………………………………………………………….. 105

Внедрение……………………………………………………………………………………………………………… 106

Смежные паттерны………………………………………………………………………………………………. 107

Паттерн: скрипты для ввода параметров…………………………………………………………………… 107

Зачем это нужно…………………………………………………………………………………………………… 107

Применимость………………………………………………………………………………………………………. 107

Последствия………………………………………………………………………………………………………….. 108

Внедрение……………………………………………………………………………………………………………… 108

Смежные паттерны………………………………………………………………………………………………. 110

Паттерн: конфигурационные файлы стека………………………………………………………………… 110

Зачем это нужно…………………………………………………………………………………………………… 110

Применимость………………………………………………………………………………………………………. 111

Последствия………………………………………………………………………………………………………….. 111

Внедрение……………………………………………………………………………………………………………… 111

Смежные паттерны………………………………………………………………………………………………. 113

Паттерн: стек-обертка………………………………………………………………………………………………….. 113

Зачем это нужно…………………………………………………………………………………………………… 114

Последствия………………………………………………………………………………………………………….. 114

Внедрение……………………………………………………………………………………………………………… 115

Смежные паттерны………………………………………………………………………………………………. 116

Паттерн: конвейеризация параметров стека……………………………………………………………… 116

Зачем это нужно…………………………………………………………………………………………………… 117

Применимость………………………………………………………………………………………………………. 117

Последствия………………………………………………………………………………………………………….. 117

Внедрение……………………………………………………………………………………………………………… 118

Смежные паттерны………………………………………………………………………………………………. 119

Паттерн: реестр параметров стека……………………………………………………………………………… 119

Зачем это нужно…………………………………………………………………………………………………… 120

Применимость………………………………………………………………………………………………………. 120

Последствия………………………………………………………………………………………………………….. 120

Внедрение……………………………………………………………………………………………………………… 121

Смежные паттерны………………………………………………………………………………………………. 122

Конфигурационный реестр…………………………………………………………………………………………………….. 122

Внедрение конфигурационного реестра…………………………………………………………………….. 123

Реестры инструмента, предназначенного для автоматизации инфраструктуры 123

Продукты, которые могут послужить конфигурационным реестром
общего назначения………………………………………………………………………………………………. 123

Сервисы реестра, предоставляемые на платформе………………………………………….. 124

Конфигурационные реестры «сделай сам»……………………………………………………….. 124

Один или множество конфигурационных реестров…………………………………………………… 125

Обращение с секретами как с параметрами………………………………………………………………………….. 125

Шифрование секретов………………………………………………………………………………………………….. 126

Несекретная авторизация……………………………………………………………………………………………. 126

Инъекция секретов во время выполнения…………………………………………………………………… 127

Одноразовые секреты…………………………………………………………………………………………………… 127

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

Глава 8. Ключевая практика: непрерывное тестирование и доставка….. 129

Зачем непрерывно тестировать инфраструктурный код……………………………………………………… 130

Что такое непрерывное тестирование………………………………………………………………………… 130

Что следует тестировать на уровне инфраструктуры………………………………………………. 132

Сложности с тестированием инфраструктурного кода……………………………………………………….. 134

Проблема: тесты для декларативного кода обычно не слишком ценны…………………. 135

Тестирование изменчивого декларативного кода…………………………………………….. 136

Тестирование сочетаний декларативного кода………………………………………………… 137

Проблема: тестирование инфраструктурного кода идет медленно………………………… 137

Проблема: зависимости усложняют тестовую инфраструктуру……………………………… 139

Прогрессивное тестирование………………………………………………………………………………………………….. 140

Тестовая пирамида………………………………………………………………………………………………………. 141

Модель тестирования по принципу швейцарского сыра………………………………………….. 143

Конвейеры доставки для работы с инфраструктурой………………………………………………………….. 144

Этапы работы конвейера…………………………………………………………………………………………….. 145

Масштаб компонентов, тестируемых на этапе…………………………………………………………. 146

Масштаб зависимостей, используемых на этапе конвейера……………………………………. 146

Платформенные элементы, требуемые на этапе конвейера…………………………………….. 147

Программы и сервисы для организации конвейера доставки………………………………….. 148

Тестирование в продакшене…………………………………………………………………………………………………… 150

Что невозможно воспроизвести вне продакшена………………………………………………………. 151

Управление рисками тестирования в продакшене……………………………………………………. 152

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

Глава 9. Тестирование инфраструктурных стеков……………………………….. 154

Пример инфраструктуры………………………………………………………………………………………………………… 154

Пример стека…………………………………………………………………………………………………………………. 155

Пример стека и конвейер для него………………………………………………………………………………. 156

Офлайновые этапы тестирования стеков………………………………………………………………………………. 156

Проверка синтаксиса……………………………………………………………………………………………………. 157

Офлайновый статический анализ кода………………………………………………………………………. 157

Статический анализ кода с применением API…………………………………………………………… 158

Тестирование с применением имитационного API……………………………………………………. 158

Онлайновые этапы тестирования стеков………………………………………………………………………………. 159

Предпросмотр: проверяем, какие изменения могут быть внесены…………………………… 160

Верификация: выдвижение гипотез об инфраструктурных ресурсах……………………… 161

Результаты: убеждаемся, что инфраструктура работает корректно………………………. 162

Использование тестовых контекстов для обращения с зависимостями……………………………… 163

Тестовые двойники для восходящих зависимостей…………………………………………………… 164

Тестовые контексты для нисходящих зависимостей…………………………………………………. 165

Проводим рефакторинг компонентов так, чтобы их легко было изолировать……….. 167

Паттерны жизненного цикла для тестовых инстансов стеков…………………………………………….. 167

Паттерн: персистентный тестовый стек……………………………………………………………………… 168

Зачем это нужно…………………………………………………………………………………………………… 168

Применимость………………………………………………………………………………………………………. 168

Последствия………………………………………………………………………………………………………….. 168

Внедрение……………………………………………………………………………………………………………… 169

Смежные паттерны………………………………………………………………………………………………. 169

Паттерн: эфемерный тестовый стек……………………………………………………………………………. 169

Зачем это нужно…………………………………………………………………………………………………… 170

Применимость………………………………………………………………………………………………………. 170

Последствия………………………………………………………………………………………………………….. 170

Внедрение……………………………………………………………………………………………………………… 170

Смежные паттерны………………………………………………………………………………………………. 170

Антипаттерн: сдвоенные этапы с персистентными и эфемерными стеками…………… 170

Зачем это нужно…………………………………………………………………………………………………… 171

Применимость………………………………………………………………………………………………………. 171

Последствия………………………………………………………………………………………………………….. 171

Внедрение……………………………………………………………………………………………………………… 171

Смежные паттерны………………………………………………………………………………………………. 172

Паттерн: периодическая пересборка стека……………………………………………………………….. 172

Зачем это нужно…………………………………………………………………………………………………… 172

Применимость………………………………………………………………………………………………………. 172

Последствия………………………………………………………………………………………………………….. 172

Внедрение……………………………………………………………………………………………………………… 173

Смежные паттерны………………………………………………………………………………………………. 173

Паттерн: серийный сброс стека………………………………………………………………………………….. 173

Зачем это нужно…………………………………………………………………………………………………… 174

Применимость………………………………………………………………………………………………………. 174

Последствия………………………………………………………………………………………………………….. 174

Внедрение……………………………………………………………………………………………………………… 174

Смежные паттерны………………………………………………………………………………………………. 174

Оркестрация тестов…………………………………………………………………………………………………………………. 175

Поддержка локального тестирования………………………………………………………………………… 175

Избегайте плотного связывания с инструментами конвейера………………………………….. 176

Инструменты оркестрации тестов………………………………………………………………………………. 176

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

Часть III. Работа с серверами и другими платформами исполнения приложений…………………………………………………………………………………… 179

Глава 10. Среды выполнения приложений…………………………………………… 181

Исходно облачная инфраструктура под потребности приложений…………………………………… 182

Цели для сред исполнения приложений………………………………………………………………………………… 183

Развертываемые части приложения……………………………………………………………………………. 183

Пакеты для развертывания………………………………………………………………………………………….. 184

Развертывание приложений на серверах………………………………………………………………………………. 185

Упаковка приложений в контейнерах………………………………………………………………………… 185

Развертывание приложений в серверных кластерах………………………………………………… 186

Развертывание приложений в кластерах приложений…………………………………………………………. 187

Пакеты для развертывания приложений в кластерах………………………………………………………….. 188

Развертывание серверного приложения по модели FaaS…………………………………………………….. 190

Данные приложений………………………………………………………………………………………………………………… 190

Структуры и схемы данных………………………………………………………………………………………… 191

Исходно облачная инфраструктура для хранения приложений……………………………… 192

Соединяемость приложений…………………………………………………………………………………………………… 192

Обнаружение сервисов……………………………………………………………………………………………………………. 193

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

Глава 11. Сборка серверов в коде…………………………………………………………. 196

Что на сервере………………………………………………………………………………………………………………………….. 197

Откуда что берется………………………………………………………………………………………………………………….. 198

Код для конфигурации сервера………………………………………………………………………………………………. 199

Модули кода для конфигурации сервера…………………………………………………………………… 200

Проектирование модулей для конфигурации серверного кода……………………………….. 201

Версионирование и продвижение серверного кода………………………………………………….. 202

Серверные роли……………………………………………………………………………………………………………. 203

Тестирование серверного кода………………………………………………………………………………………………. 204

Прогрессивное тестирование серверного кода………………………………………………………….. 204

Что тестировать в серверном коде………………………………………………………………………………. 205

Как тестировать серверный код………………………………………………………………………………….. 206

Создание нового серверного инстанса………………………………………………………………………………….. 207

Сборка нового серверного инстанса вручную………………………………………………………….. 208

Создаем сервер с помощью скрипта…………………………………………………………………………… 209

Создание сервера с помощью инструмента управления стеком……………………………… 209

Конфигурирование платформы для автоматического создания серверов……………… 210

Как собрать сервер с помощью сетевого инструмента предоставления ресурсов… 211

Заблаговременная сборка серверов………………………………………………………………………………………. 212

Горячее клонирование сервера…………………………………………………………………………………… 212

Использование серверного снимка……………………………………………………………………………… 213

Создание чистого серверного образа…………………………………………………………………………. 213

Конфигурирование нового серверного инстанса…………………………………………………………………. 214

Зажаривание серверного инстанса…………………………………………………………………………….. 215

Выпекание серверных образов……………………………………………………………………………………. 216

Комбинируем выпекание и зажаривание…………………………………………………………………… 216

Применение серверной конфигурации при создании сервера………………………………….. 217

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

Глава 12. Управление изменениями, поступающими на серверы…………. 219

Паттерны управления изменениями: когда применять изменения………………………………………. 220

Антипаттерн: применять по факту изменений…………………………………………………………… 220

Зачем это нужно…………………………………………………………………………………………………… 220

Применимость………………………………………………………………………………………………………. 221

Последствия………………………………………………………………………………………………………….. 221

Внедрение……………………………………………………………………………………………………………… 221

Смежные паттерны………………………………………………………………………………………………. 221

Паттерн: непрерывная синхронизация конфигурации……………………………………………… 222

Зачем это нужно…………………………………………………………………………………………………… 222

Применимость………………………………………………………………………………………………………. 223

Последствия………………………………………………………………………………………………………….. 223

Внедрение……………………………………………………………………………………………………………… 223

Смежные паттерны………………………………………………………………………………………………. 223

Паттерн: неизменяемый сервер…………………………………………………………………………………… 224

Зачем это нужно…………………………………………………………………………………………………… 224

Применимость………………………………………………………………………………………………………. 224

Последствия………………………………………………………………………………………………………….. 224

Внедрение……………………………………………………………………………………………………………… 225

Смежные паттерны………………………………………………………………………………………………. 225

Как применять код конфигурации сервера……………………………………………………………………………. 226

Паттерн: конфигурация сервера методом push…………………………………………………………. 226

Зачем это нужно…………………………………………………………………………………………………… 226

Применимость………………………………………………………………………………………………………. 226

Последствия………………………………………………………………………………………………………….. 227

Внедрение……………………………………………………………………………………………………………… 227

Смежные паттерны………………………………………………………………………………………………. 228

Паттерн: конфигурация сервера методом pull…………………………………………………………… 228

Зачем это нужно…………………………………………………………………………………………………… 228

Применимость………………………………………………………………………………………………………. 229

Внедрение……………………………………………………………………………………………………………… 229

Смежные паттерны………………………………………………………………………………………………. 230

Другие события серверного жизненного цикла…………………………………………………………………….. 230

Останов и перезапуск серверного инстанса………………………………………………………………. 231

Замена серверного инстанса……………………………………………………………………………………….. 232

Восстановление отказавшего сервера……………………………………………………………………….. 233

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

Глава 13. Образы серверов как код……………………………………………………… 235

Сборка серверного образа……………………………………………………………………………………………………… 235

Зачем собирать серверный образ……………………………………………………………………………….. 236

Как собрать серверный образ……………………………………………………………………………………… 237

Инструменты для сборки серверных образов……………………………………………………………. 237

Процесс онлайновой сборки образа…………………………………………………………………………… 238

Инфраструктура для сборочного инстанса………………………………………………………. 239

Конфигурирование сборочного инстанса…………………………………………………………. 239

Процесс офлайновой сборки образа…………………………………………………………………………… 241

Исходное содержимое для серверного образа……………………………………………………………………… 242

Сборка на основе стандартного серверного образа…………………………………………………. 243

Сборка серверного образа с нуля……………………………………………………………………………….. 243

Происхождение серверного образа и его содержимое……………………………………………… 243

Изменение серверного образа………………………………………………………………………………………………… 244

Разогреть или испечь свежий?…………………………………………………………………………………….. 244

Версионирование серверного образа…………………………………………………………………………. 245

Обновление серверных инстансов при изменении образа……………………………………….. 247

Предоставление серверного образа для совместного использования несколькими командами              248

Как работать с крупными изменениями, вносимыми в образ…………………………………… 249

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

Стадия сборки серверного образа………………………………………………………………………………. 250

Стадия тестирования серверного образа…………………………………………………………………… 252

Стадии доставки серверного образа………………………………………………………………………….. 253

Использование множества серверных образов…………………………………………………………………….. 253

Серверные образы для разных инфраструктурных платформ………………………………… 254

Серверные образы для разных операционных систем……………………………………………… 254

Серверные образы для разных аппаратных архитектур…………………………………………. 254

Серверные образы для разных ролей…………………………………………………………………………. 255

Многослойное расположение серверных образов……………………………………………………. 255

Совместное использование кода в разных серверных образах……………………………….. 256

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

Глава 14. Сборка кластеров в коде………………………………………………………. 258

Решения с кластерами приложений……………………………………………………………………………………….. 259

Кластер как услуга………………………………………………………………………………………………………. 259

Распространение кластеров в упакованном виде……………………………………………………… 260

Топологии стеков для кластеров приложений………………………………………………………………………. 261

Монолитный стек, использующий кластер как услугу…………………………………………….. 262

Монолитный стек для упакованного кластерного решения…………………………………….. 263

Конвейер для стека, в котором реализован монолитный кластер приложений……… 264

Пример: множество стеков в одном кластере…………………………………………………………….. 267

Стратегии совместного использования кластеров приложений…………………………………………. 269

Один большой кластер на все случаи жизни……………………………………………………………… 270

Отдельные кластеры для стадий доставки………………………………………………………………… 271

Кластеры для управления……………………………………………………………………………………………. 272

Кластеры для команд…………………………………………………………………………………………………… 273

Сервисная сеть……………………………………………………………………………………………………………… 273

Инфраструктура для бессерверных FaaS-сервисов……………………………………………………………… 275

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

Часть IV. Проектирование инфраструктуры……………………… 279

Глава 15. Ключевая практика: небольшие простые фрагменты…………… 281

Модульное проектирование…………………………………………………………………………………………………… 281

Характеристики хорошо спроектированных компонентов……………………………………… 282

Правила проектирования компонентов……………………………………………………………………… 283

Избегайте дублирования……………………………………………………………………………………… 283

Правило композиции……………………………………………………………………………………………. 284

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

Проектируйте компоненты на основе концепций предметной области,
а не на основе технических концепций………………………………………………………………. 284

Закон Деметры……………………………………………………………………………………………………… 285

Никаких циклических зависимостей………………………………………………………………….. 285

Используйте тестирование для принятия проектных решений………………………………… 286

Модульная инфраструктура…………………………………………………………………………………………………… 286

Компоненты стека по сравнению со стеками в качестве компонентов…………………… 286

Использование сервера в стеке……………………………………………………………………………………. 288

Проведение границ между компонентами…………………………………………………………………………….. 291

Устанавливайте границы по паттернам естественных изменений………………………….. 292

Устанавливайте границы по жизненным циклам компонентов……………………………….. 292

Устанавливайте границы по организационным структурам…………………………………… 294

Создавайте границы, поддерживающие устойчивость…………………………………………….. 295

Создавайте границы, поддерживающие масштабирование…………………………………….. 295

Устанавливайте границы по проблемам безопасности и управления……………………. 298

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

Глава 16. Построение стеков из компонентов………………………………………. 300

Языки инфраструктуры для компонентов стека…………………………………………………………………… 301

Повторное использование декларативного кода с модулями………………………………….. 301

Динамическое создание элементов стека с применением библиотек……………………… 302

Паттерны для компонентов стека…………………………………………………………………………………………… 303

Паттерн: фасадный модуль…………………………………………………………………………………………. 303

Зачем это нужно…………………………………………………………………………………………………… 304

Применимость………………………………………………………………………………………………………. 304

Последствия………………………………………………………………………………………………………….. 304

Внедрение……………………………………………………………………………………………………………… 305

Смежные паттерны………………………………………………………………………………………………. 305

Антипаттерн: модуль обфускации……………………………………………………………………………… 305

Зачем это нужно…………………………………………………………………………………………………… 306

Применимость………………………………………………………………………………………………………. 306

Последствия………………………………………………………………………………………………………….. 306

Внедрение……………………………………………………………………………………………………………… 306

Смежные паттерны………………………………………………………………………………………………. 306

Антипаттерн: неразделяемый модуль………………………………………………………………………… 306

Зачем это нужно…………………………………………………………………………………………………… 307

Применимость………………………………………………………………………………………………………. 307

Последствия………………………………………………………………………………………………………….. 307

Внедрение……………………………………………………………………………………………………………… 307

Смежные паттерны………………………………………………………………………………………………. 307

Паттерн: модуль бандла……………………………………………………………………………………………… 308

Зачем это нужно…………………………………………………………………………………………………… 309

Применимость………………………………………………………………………………………………………. 309

Последствия………………………………………………………………………………………………………….. 309

Внедрение……………………………………………………………………………………………………………… 309

Смежные паттерны………………………………………………………………………………………………. 309

Антипаттерн: спагетти-модуль…………………………………………………………………………………… 309

Зачем это нужно…………………………………………………………………………………………………… 311

Последствия………………………………………………………………………………………………………….. 311

Внедрение……………………………………………………………………………………………………………… 311

Смежные паттерны………………………………………………………………………………………………. 312

Паттерн: сущность домена инфраструктуры…………………………………………………………….. 312

Зачем это нужно…………………………………………………………………………………………………… 313

Применимость………………………………………………………………………………………………………. 313

Внедрение……………………………………………………………………………………………………………… 313

Смежные паттерны………………………………………………………………………………………………. 313

Построение уровня абстрагирования……………………………………………………………………………………. 314

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

Глава 17. Использование стеков в качестве компонентов……………………. 316

Обнаружение зависимостей между стеками…………………………………………………………………………. 316

Паттерн: сопоставление ресурсов………………………………………………………………………………. 317

Зачем это нужно…………………………………………………………………………………………………… 318

Применимость………………………………………………………………………………………………………. 318

Последствия………………………………………………………………………………………………………….. 318

Внедрение……………………………………………………………………………………………………………… 319

Смежные паттерны………………………………………………………………………………………………. 319

Паттерн: поиск данных в стеке……………………………………………………………………………………. 320

Зачем это нужно…………………………………………………………………………………………………… 320

Применимость………………………………………………………………………………………………………. 320

Последствия………………………………………………………………………………………………………….. 321

Внедрение……………………………………………………………………………………………………………… 321

Смежные паттерны………………………………………………………………………………………………. 322

Паттерн: поиск по реестру интеграции………………………………………………………………………. 322

Зачем это нужно…………………………………………………………………………………………………… 323

Применимость………………………………………………………………………………………………………. 324

Последствия………………………………………………………………………………………………………….. 324

Внедрение……………………………………………………………………………………………………………… 324

Смежные паттерны………………………………………………………………………………………………. 325

Внедрение зависимости……………………………………………………………………………………………….. 325

Проблемы со смешиванием зависимости и кода определения………………………… 326

Отделение зависимостей от их обнаружения……………………………………………………. 326

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

Часть V. Доставка инфраструктуры……………………………………… 329

Глава 18. Организация кода инфраструктуры……………………………………… 331

Организация проектов и репозиториев………………………………………………………………………………….. 331

Один репозиторий или много?…………………………………………………………………………………….. 332

Один репозиторий для всего………………………………………………………………………………………… 332

Один репозиторий, несколько сборок………………………………………………………………… 333

Отдельный репозиторий для каждого проекта (микрорепозиторий)………………………. 334

Несколько репозиториев с несколькими проектами………………………………………………….. 335

Организация различных типов кода………………………………………………………………………………………. 336

Файлы поддержки проекта………………………………………………………………………………………….. 336

Межпроектные тесты…………………………………………………………………………………………………… 337

Хранение интеграционных тестов в проекте…………………………………………………….. 338

Отдельные проекты интеграционных тестов…………………………………………………………….. 338

Организация кода по концепции предметной области……………………………………………… 339

Организация файлов конфигурационных значений………………………………………………….. 340

Управление инфраструктурным кодом и кодом приложения……………………………………………… 341

Доставка инфраструктуры и приложений…………………………………………………………………. 341

Тестирование приложений с инфраструктурой………………………………………………………… 342

Тестирование инфраструктуры перед интеграцией………………………………………………….. 343

Использование инфраструктурного кода для развертывания приложений……………. 344

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

Глава 19. Доставка инфраструктурного кода……………………………………….. 347

Доставка инфраструктурного кода……………………………………………………………………………………….. 347

Сборка инфраструктурного проекта………………………………………………………………………….. 348

Инфраструктурный код упаковки как артефакт………………………………………………………… 349

Использование репозитория для доставки инфраструктурного кода……………………… 349

Специализированный репозиторий артефактов……………………………………………….. 350

Репозиторий инструмента…………………………………………………………………………………… 350

Общий репозиторий для хранения файлов………………………………………………………… 351

Доставка кода из репозитория исходного кода………………………………………………… 351

Интеграция проектов……………………………………………………………………………………………………………….. 351

Паттерн: интеграция проекта во время сборки………………………………………………………….. 353

Зачем это нужно…………………………………………………………………………………………………… 353

Применимость………………………………………………………………………………………………………. 354

Последствия………………………………………………………………………………………………………….. 354

Внедрение……………………………………………………………………………………………………………… 354

Смежные паттерны………………………………………………………………………………………………. 355

Паттерн: интеграция проекта во время доставки………………………………………………………. 355

Зачем это нужно…………………………………………………………………………………………………… 356

Применимость………………………………………………………………………………………………………. 357

Последствия………………………………………………………………………………………………………….. 357

Внедрение……………………………………………………………………………………………………………… 357

Смежные паттерны………………………………………………………………………………………………. 358

Паттерн: интеграция проекта во время применения…………………………………………………. 358

Зачем это нужно…………………………………………………………………………………………………… 359

Применимость………………………………………………………………………………………………………. 359

Последствия………………………………………………………………………………………………………….. 359

Внедрение……………………………………………………………………………………………………………… 359

Смежные паттерны………………………………………………………………………………………………. 360

Использование скриптов для обертывания инструментов инфраструктуры…………………….. 361

Сборка значений конфигурации…………………………………………………………………………………. 361

Упрощение скриптов-оболочек…………………………………………………………………………………… 362

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

Глава 20. Командные рабочие процессы………………………………………………. 364

Люди…………………………………………………………………………………………………………………………………………. 365

Кто пишет инфраструктурный код?………………………………………………………………………………………. 367

Применение кода к инфраструктуре………………………………………………………………………………………. 369

Применение кода с вашей локальной рабочей станции…………………………………………… 369

Применение кода из централизованной службы……………………………………………………….. 370

Персональные инфраструктурные инстансы…………………………………………………………….. 371

Ветви исходного кода в рабочих процессах……………………………………………………………… 373

Предотвращение конфигурационной энтропии……………………………………………………………………. 374

Сведите к минимуму задержку автоматизации…………………………………………………………. 374

Избегайте непродуманного применения изменений………………………………………………….. 375

Применяйте код непрерывно……………………………………………………………………………………….. 375

Неизменяемая инфраструктура…………………………………………………………………………………… 375

Управление в конвейерно-ориентированном потоке задач…………………………………………………. 376

Перетасовка обязанностей………………………………………………………………………………………….. 377

Сдвиг влево……………………………………………………………………………………………………………………. 378

Пример процесса для инфраструктуры как кода с управлением…………………………….. 378

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

Глава 21. Безопасное изменение инфраструктуры……………………………….. 380

Уменьшите объем изменений………………………………………………………………………………………………….. 380

Небольшие изменения………………………………………………………………………………………………….. 382

Пример рефакторинга………………………………………………………………………………………………….. 384

Отправка неполных изменений в продакшен………………………………………………………………………… 385

Параллельные инстансы……………………………………………………………………………………………… 386

Обратно совместимые преобразования……………………………………………………………………… 389

Переключатели функций……………………………………………………………………………………………… 390

Изменение действующей инфраструктуры……………………………………………………………………………. 392

Инфраструктурная хирургия………………………………………………………………………………………. 394

Расширение и сжатие…………………………………………………………………………………………………… 396

Изменения нулевого времени простоя………………………………………………………………………… 399

Сине-зеленые изменения……………………………………………………………………………………… 400

Преемственность……………………………………………………………………………………………………………………… 400

Преемственность за счет предотвращения ошибок…………………………………………………… 401

Непрерывность за счет быстрого восстановления……………………………………………………. 402

Непрерывное аварийное восстановление………………………………………………………………….. 403

Хаос-инжиниринг…………………………………………………………………………………………………………. 404

Планирование неудач………………………………………………………………………………………………….. 404

Непрерывность данных в меняющейся системе……………………………………………………………………. 406

Блокировка……………………………………………………………………………………………………………………. 407

Разделение…………………………………………………………………………………………………………………….. 407

Репликация……………………………………………………………………………………………………………………. 407

Перезагрузка…………………………………………………………………………………………………………………. 407

Смешение подходов к обеспечению непрерывности данных………………………………….. 408

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

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

Об авторе……………………………………………………………………………………………… 416

Kief Morris

Киф Моррис (Kief Morris) – директор по облачной инженерии в компании ThoughtWorks, помогает организациям развивать облачную и внутрикорпоративную IT-инфраструктуру. Более 20 лет занимается проектированием, выстраиванием и эксплуатацией автоматизированной серверной инфраструктуры. На заре карьеры занимался сценариями командной строки и языком Perl, а затем осваивал CFengine, Puppet, Chef, Terraform и многие другие технологии, как только они появлялись.

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

Вышло 7-е издание: “Самоучителя системного администратора”

Самоучитель системного администратора, 7 изд.

Изложены основные задачи системного администрирования, описаны базовые протоколы, даны рекомендации по выбору оборудования и проведению ежедневных рутинных операций. Подробно раскрыты технологии, используемые при построении информационных систем, описаны средства мониторинга и обслуживания как малых, так и распределённых сетей. Рассмотрены методы централизованного управления, основы создания безопасной среды. Даны рекомендации по поиску неисправностей, обеспечению защиты данных. Параллельно рассмотрены решения на основе операционных систем Windows и Linux с использованием как проприетарных, так и открытых технологий. Книга написана на основе многолетнего опыта разработки и практического администрирования информационных систем.
В 7-м издании весь материал актуализирован для Windows Server 2022 (русская версия), дополнительно рассмотрены файрвол ufw, утилита monit, виртуализация средствами KVM.

Для начинающих системных администраторов

Настольная книга администратора

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

  • Системы высокой доступности и их построение
  • Оптимизация производительности
  • Выбор оборудование и его характеристики
  • Использование облачных технологий
  • Объединение компьютеров Windows, macOS и Linux
  • Контроль и управление. Утилита monit для перезапуска сетевых сервисов
  • Надежная защита данных
  • Виртуализация средствами KVM
  • Практические рекомендации по выбору DLP-системы
  • Информационные системы на основе Windows 10/11/Server 2016/2019/2022

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

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

Что нового вы найдете в седьмом издании?…………………………………………………………………………….. 18

Глава 1. Системное администрирование………………………………………………… 19

Обязанности системного администратора……………………………………………………………………………… 19

Выбор операционной системы: Windows vs Linux…………………………………………………………………. 20

Участие в тендерах……………………………………………………………………………………………………………………. 22

Обновление программного обеспечения…………………………………………………………………………………. 22

О моральных качествах администратора……………………………………………………………………………….. 23

Глава 2. Выбор аппаратных и программных средств…………………………….. 25

Требования к оборудованию информационных систем………………………………………………………… 25

Выбор производителя………………………………………………………………………………………………………… 25

Гарантия и сервис-центры………………………………………………………………………………………………… 27

Выбор процессора……………………………………………………………………………………………………………… 28

Выбор шасси………………………………………………………………………………………………………………………. 30

Выбор материнской платы……………………………………………………………………………………………….. 31

Выбор дисков……………………………………………………………………………………………………………………… 31

Выбор памяти…………………………………………………………………………………………………………………….. 33

Дополнительные требования к коммутационному оборудованию………………………………. 34

Дополнительные требования к аварийным источникам питания…………………………………. 35

Состав программного обеспечения типового предприятия…………………………………………………… 35

Подсистема аутентификации и контроля доступа………………………………………………………….. 36

Подключение Linux к домену: протокол Kerberos…………………………………………………. 36

Настройка конфигурации клиента Kerberos……………………………………………………… 36

Настройка файла nsswitch.conf………………………………………………………………………….. 37

Получение билета Kerberos для учетной записи администратора…………………. 37

Подключение к домену……………………………………………………………………………………….. 37

Проверка подключения………………………………………………………………………………………. 38

Сервер Linux в качестве контроллера домена……………………………………………………….. 38

Совместно используемые ресурсы…………………………………………………………………………………… 38

Учетная запись для анонимного доступа……………………………………………………………….. 39

Работа с Windows-ресурсами в Linux……………………………………………………………………… 40

Установка пакета Samba……………………………………………………………………………………. 40

Настройки Samba……………………………………………………………………………………………….. 40

Подключение к общим ресурсам……………………………………………………………………….. 41

Браузеры Интернета………………………………………………………………………………………………………….. 42

Защита узлов сети……………………………………………………………………………………………………………… 42

Средства удаленного администрирования……………………………………………………………………… 43

Средства резервного копирования…………………………………………………………………………………… 44

Офисный пакет……………………………………………………………………………………………………………………. 46

Электронная почта…………………………………………………………………………………………………………….. 48

Свободное программное обеспечение……………………………………………………………………………… 51

Базовые сведения о работе в *NIX-системах………………………………………………………………………….. 52

Linux-мифы…………………………………………………………………………………………………………………………. 52

Надежность Linux и Windows……………………………………………………………………………………………. 54

Несколько моментов, о которых следует знать пользователям Linux………………………….. 54

Ядро и дистрибутивы……………………………………………………………………………………………….. 54

Файловая система…………………………………………………………………………………………………….. 55

Монтирование файловой системы………………………………………………………………………….. 57

Консоль и графический режим………………………………………………………………………………… 58

Пользователь root……………………………………………………………………………………………………… 58

Структура папок Linux…………………………………………………………………………………………….. 59

Текстовые редакторы: vi и другие…………………………………………………………………………… 59

Выполнение команд с правами другого пользователя………………………………………….. 63

Прикладные программы в Linux……………………………………………………………………………………….. 64

Кросс-платформенный запуск программ…………………………………………………………………………. 65

Установка Linux…………………………………………………………………………………………………………………. 66

Загрузка нескольких операционных систем……………………………………………………………………. 67

Тестирование Linux на виртуальной машине…………………………………………………………………. 67

Глава 3. Структура сети…………………………………………………………………………. 69

Структурированные кабельные сети……………………………………………………………………………………….. 69

Категории СКС…………………………………………………………………………………………………………………… 72

Волоконно-оптические сети……………………………………………………………………………………………… 74

Сети 10G, 40G и 100G………………………………………………………………………………………………………… 75

Схема разъема RJ-45…………………………………………………………………………………………………………. 76

Варианты исполнения СКС………………………………………………………………………………………………. 78

Удлинение кабеля………………………………………………………………………………………………………………. 78

Прокладка силовых кабелей…………………………………………………………………………………………….. 78

Питание по сети Ethernet (PoE)…………………………………………………………………………………………. 79

Требования пожарной безопасности……………………………………………………………………………….. 79

Топология сети…………………………………………………………………………………………………………………… 80

Размеры сегментов сети на витой паре…………………………………………………………………… 80

Уровни ядра, распределения и доступа………………………………………………………………….. 80

Топология каналов распределенной сети предприятия………………………………………… 81

Сеть управления……………………………………………………………………………………………………….. 82

Документирование структуры каналов связи………………………………………………………… 83

Качество сетей связи предприятия…………………………………………………………………………………… 83

Проверка кабельной системы………………………………………………………………………………….. 83

Проверка качества передачи данных……………………………………………………………………… 85

Приоритизация трафика…………………………………………………………………………………………… 85

Варианты приоритизации: QoS, ToS, DiffServ………………………………………………….. 86

Классификация, маркировка, правила приоритизации…………………………………… 88

Как работает приоритизация: очереди…………………………………………………………….. 88

Ограничение полосы пропускания трафика (Traffic shaping)…………………………. 89

Беспроводные сети…………………………………………………………………………………………………………………….. 90

Стандарты беспроводной сети…………………………………………………………………………………………. 92

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

Безопасность беспроводной сети……………………………………………………………………………………… 97

Шифрование трафика беспроводной сети……………………………………………………………… 97

Аутентификация пользователей и устройств Wi-Fi……………………………………………….. 97

Безопасность клиента………………………………………………………………………………………………. 98

Настройка транспортных протоколов…………………………………………………………………………………….. 99

Протоколы………………………………………………………………………………………………………………………….. 99

Модель OSI……………………………………………………………………………………………………………………….. 100

Стек протоколов TCP/IP………………………………………………………………………………………………….. 101

Протоколы UPD, TCP, ICMP……………………………………………………………………………………………. 102

Протокол IPv6………………………………………………………………………………………………………………….. 102

Параметры TCP/IP-протокола………………………………………………………………………………………… 103

IP-адрес……………………………………………………………………………………………………………………. 103

Групповые адреса…………………………………………………………………………………………………… 103

Распределение IP-адресов сети малого офиса…………………………………………………….. 104

Подсети и маска адреса…………………………………………………………………………………………. 105

Шлюз (Gateway, default gateway)………………………………………………………………………….. 106

Таблицы маршрутизации………………………………………………………………………………………. 106

Автоматическое присвоение параметров IP-протокола……………………………………… 111

Серверы DHCP…………………………………………………………………………………………………… 111

Адресация APIPA………………………………………………………………………………………………. 112

Назначение адресов при совместном использовании подключения к Интернету           112

Порт………………………………………………………………………………………………………………………….. 113

Протокол ARP…………………………………………………………………………………………………………. 114

Имена компьютеров в сети TCP/IP………………………………………………………………………… 115

Доменные имена Интернета…………………………………………………………………………….. 116

Соотношение доменных имен и IP-адресов компьютеров…………………………….. 117

Серверы доменных имен (DNS)………………………………………………………………………… 117

WINS…………………………………………………………………………………………………………………… 118

Статическое задание имен……………………………………………………………………………….. 118

Последовательность разрешения имен…………………………………………………………… 119

Настройка серверов DHCP и DNS………………………………………………………………………………….. 120

Настройка DHCP…………………………………………………………………………………………………….. 120

Создание и настройка зоны……………………………………………………………………………… 120

Авторизация DHCP-сервера…………………………………………………………………………….. 121

Настройка параметров области………………………………………………………………………. 122

Фиксированные IP-адреса………………………………………………………………………………… 123

Подстройка DHCP под группы клиентов………………………………………………………… 124

Отказоустойчивость DHCP-сервера………………………………………………………………… 125

Обслуживание DHCP-сервером других сегментов сети………………………………… 126

Порядок получения IP-адресов клиентами DHCP………………………………………….. 127

Первичное получение адреса………………………………………………………………….. 127

Продление аренды……………………………………………………………………………………. 127

Диагностика и обслуживание DHCP-сервера………………………………………………… 128

Интеграция DHCP и DNS…………………………………………………………………………………………………. 128

DNS…………………………………………………………………………………………………………………………… 129

Термины DNS…………………………………………………………………………………………………….. 129

Порядок разрешения имен в DNS…………………………………………………………………….. 132

Основные типы записей DNS……………………………………………………………………………. 133

Установка сервера DNS……………………………………………………………………………………. 134

Записи домена Windows……………………………………………………………………………………. 136

Разделение DNS…………………………………………………………………………………………………. 136

Настройка DNS в удаленных офисах……………………………………………………………… 138

Обслуживание и диагностика неисправностей DNS-сервера……………………….. 138

Перенос записей зон………………………………………………………………………………………….. 141

Глава 4. Информационные системы предприятия………………………………… 143

SOHO-сети………………………………………………………………………………………………………………………………… 143

Одноранговые сети………………………………………………………………………………………………………………….. 145

Сеть с централизованным управлением………………………………………………………………………………… 145

Управление локальными ресурсами………………………………………………………………………………. 145

Возможность добавлять рабочие станции в домен……………………………………………… 146

Удаление устаревших записей о компьютерах и пользователях………………………. 148

Изменение настроек системы при подключении ее к домену……………………………… 148

Локальный администратор против доменного……………………………………………………. 149

Исключение компьютера из домена………………………………………………………………… 149

Отключение совместного использования административных ресурсов……… 149

Исключение администратора домена из группы локальных администраторов 150

Блокировка администратора домена на уровне файловой системы……………. 150

Блокирование групповой политики…………………………………………………………………. 150

Проблема аудитора………………………………………………………………………………………………… 151

Методы управления локальной системой……………………………………………………………………… 151

Служба каталогов……………………………………………………………………………………………………………………. 152

Служба каталогов Windows (Active Directory)………………………………………………………………. 153

Домены Windows………………………………………………………………………………………………………………. 154

Подразделение………………………………………………………………………………………………………… 155

Лес……………………………………………………………………………………………………………………………. 156

Сайты……………………………………………………………………………………………………………………….. 156

DN и RDN…………………………………………………………………………………………………………………. 156

Управление структурой домена предприятия………………………………………………………………………. 157

Создание нового домена…………………………………………………………………………………………………. 157

Функциональный уровень домена………………………………………………………………………… 159

Компоненты Active Directory………………………………………………………………………………….. 160

Создание контроллеров домена «только для чтения»…………………………………………. 162

Удаление контроллера домена……………………………………………………………………………… 162

Переименование домена………………………………………………………………………………………… 164

LDAP и Active Directory……………………………………………………………………………………………………. 164

Подключаемся к каталогу по протоколу LDAP…………………………………………………… 164

Синтаксис поисковых запросов LDAP………………………………………………………………….. 165

Команда ldifde………………………………………………………………………………………………………… 167

Делегирование прав…………………………………………………………………………………………………………. 168

Корзина Active Directory: просмотр и восстановление удаленных объектов каталога 169

Учетные записи и права………………………………………………………………………………………………………….. 171

Понятие учетной записи………………………………………………………………………………………………….. 171

Локальные и доменные учетные записи………………………………………………………………………… 173

Группы пользователей…………………………………………………………………………………………………….. 174

Ролевое управление………………………………………………………………………………………………… 176

Результирующее право: разрешить или запретить?……………………………………………. 176

Разрешения общего доступа и разрешения безопасности………………………………….. 177

Наследуемые разрешения: будьте внимательны…………………………………………………. 178

Восстановление доступа к ресурсам……………………………………………………………………. 179

Обход перекрестной проверки………………………………………………………………………………. 180

Изменение атрибутов объектов при операциях копирования и перемещения….. 180

Результирующие права и утилиты………………………………………………………………………… 181

Рекомендации по применению разрешений…………………………………………………………. 182

Создание и удаление учетных записей………………………………………………………………………….. 182

Права учетной записи……………………………………………………………………………………………………… 184

Восстановление параметров безопасности по умолчанию……………………………….. 185

Автоматически создаваемые учетные записи……………………………………………………………….. 187

Встроенные учетные записи пользователей………………………………………………………… 187

Предопределенные учетные записи пользователя………………………………………………. 187

Учетная запись Администратор……………………………………………………………………… 188

Учетная запись Гость……………………………………………………………………………………….. 188

Другие встроенные учетные записи пользователей………………………………………. 188

Встроенные группы………………………………………………………………………………………………… 189

Специальные группы……………………………………………………………………………………………… 191

Рекомендации по использованию операции Запуск от имени Администратора……… 192

Включение сетевого обнаружения в Windows Server 2016/2019/2022……………………….. 193

Глава 5. Работа в глобальной сети……………………………………………………….. 195

Организация доступа к ресурсам Интернета………………………………………………………………………… 195

Сетевая адресация…………………………………………………………………………………………………………… 195

Введение в IPv6………………………………………………………………………………………………………………… 198

NAT — трансляция сетевого адреса………………………………………………………………………………. 199

Реализация NAT средствами службы маршрутизации Windows Server…………….. 199

Аппаратный NAT……………………………………………………………………………………………………. 203

Реализация NAT средствами Linux……………………………………………………………………….. 204

Фильтрация трафика……………………………………………………………………………………………………………….. 204

Демилитаризованная зона………………………………………………………………………………………………. 205

Межсетевой экран (брандмауэр)……………………………………………………………………………………. 205

Выбор межсетевого экрана……………………………………………………………………………………. 206

Нужен ли прокси-сервер?………………………………………………………………………………………. 207

Системы обнаружения вторжений………………………………………………………………………… 207

Варианты межсетевых экранов………………………………………………………………………………………. 208

Программное решение……………………………………………………………………………………………. 208

Аппаратные решения……………………………………………………………………………………………… 209

Настройка параметров межсетевого экрана при помощи групповой политики……….. 209

Межсетевой экран Linux…………………………………………………………………………………………………. 211

Настройки запуска…………………………………………………………………………………………………. 211

Цепочки и правила………………………………………………………………………………………………….. 212

Задание правил брандмауэра……………………………………………………………………………….. 214

Пример настройки брандмауэра…………………………………………………………………………… 217

Брандмауэр UFW……………………………………………………………………………………………………………… 222

Установка и базовая настройка…………………………………………………………………………….. 222

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

Разрешаем IP-адреса………………………………………………………………………………………………. 224

Запрещаем IP-адреса и службы…………………………………………………………………………….. 224

Сброс правил…………………………………………………………………………………………………………… 224

Оптимизация доступа в Интернет………………………………………………………………………………………….. 224

Основные мероприятия оптимизации…………………………………………………………………………….. 224

Прокси-сервер…………………………………………………………………………………………………………………… 225

Прозрачный прокси………………………………………………………………………………………………… 227

Настройка использования полосы пропускания…………………………………………………. 228

Блокировка рекламы, сайтов «для взрослых» и т. п…………………………………………….. 230

Поддержка SSL……………………………………………………………………………………………………….. 233

Удаленная работа……………………………………………………………………………………………………………………. 235

Виртуальные частные сети…………………………………………………………………………………………….. 235

Удаленное подключение к Linux……………………………………………………………………………………. 236

Протокол SSH………………………………………………………………………………………………………….. 236

«Тонкие» клиенты……………………………………………………………………………………………………. 238

Использование графических утилит для подключения к Linux………………………….. 239

Подключение филиалов…………………………………………………………………………………………………… 239

Контроллер домена «только для чтения»………………………………………………………………………. 240

Решение DirectAccess……………………………………………………………………………………………………….. 241

Терминальный доступ…………………………………………………………………………………………………………….. 242

Терминальные серверы от Microsoft………………………………………………………………………………. 242

Терминальные клиенты………………………………………………………………………………………….. 242

Режимы терминальных служб……………………………………………………………………………….. 243

Лицензирование терминальных служб…………………………………………………………………. 244

Особенности использования приложений на терминальном сервере……………….. 245

Безопасность терминальных сессий……………………………………………………………………… 245

Подключение к консоли терминального сервера………………………………………………… 246

Подключение администратора к сессии пользователя……………………………………….. 247

Публикация приложений в терминале…………………………………………………………………………… 247

Веб-доступ к терминальному серверу……………………………………………………………………………. 250

Шлюз терминалов……………………………………………………………………………………………………………. 250

Создание локальных копий данных………………………………………………………………………………………. 251

История файлов………………………………………………………………………………………………………………… 251

Технология BranchCache………………………………………………………………………………………………… 252

Доступ из-за межсетевого экрана…………………………………………………………………………………………… 253

Глава 6. Управление информационной системой…………………………………. 255

Состав информационной системы…………………………………………………………………………………………. 255

Построение топологии существующей СКС…………………………………………………………………. 255

Инвентаризация физических каналов связи…………………………………………………………………… 256

Учет компьютеров и программ……………………………………………………………………………………….. 257

Мониторинг функционирования ПО………………………………………………………………………………………. 258

Управление с помощью групповых политик…………………………………………………………………………. 258

Порядок применения множественных политик……………………………………………………………… 259

Совместимость версий групповых политик…………………………………………………………………… 259

Места хранения и условия применения групповых политик……………………………………….. 260

Последствия отключений политик…………………………………………………………………………………. 262

Редактирование групповых политик……………………………………………………………………………… 262

Начальные объекты групповой политики……………………………………………………………………… 265

«Обход» параметров пользователя………………………………………………………………………………… 266

Фильтрация объектов при применении групповой политики………………………………………. 266

Фильтрация при помощи WMI-запросов……………………………………………………………… 267

Настройка параметров безопасности групповых политик………………………………… 267

Предпочтения групповых политик………………………………………………………………………… 267

Рекомендации по применению политик…………………………………………………………………………. 268

Блокирование запуска нежелательных приложений с помощью компонента AppLocker 269

Некоторые особенности политики установки программного обеспечения……………….. 270

Административные шаблоны…………………………………………………………………………………………. 272

Утилиты группового управления…………………………………………………………………………………………… 272

Средства поддержки пользователей………………………………………………………………………………. 273

Удаленный помощник…………………………………………………………………………………………….. 273

Утилиты подключения к рабочему столу…………………………………………………………….. 274

Средства автоматизации — сценарии…………………………………………………………………………………… 276

Использование командной строки………………………………………………………………………………….. 276

Сценарии Visual Basic……………………………………………………………………………………………………… 277

Интерфейс IPMI……………………………………………………………………………………………………………….. 278

Интерфейс WMI……………………………………………………………………………………………………………….. 278

Язык запросов WMI Query Language…………………………………………………………………….. 279

Варианты применения WMI………………………………………………………………………………….. 279

Примеры WMI-сценариев………………………………………………………………………………………. 280

PowerShell………………………………………………………………………………………………………………………….. 281

Утилиты администрирования третьих фирм…………………………………………………………………………. 282

Утилиты от компании Sysinternals………………………………………………………………………………….. 282

Снифферы…………………………………………………………………………………………………………………………. 283

Ideal Administrator……………………………………………………………………………………………………………. 284

Hyena………………………………………………………………………………………………………………………………… 284

Автоматизация установки программного обеспечения……………………………………………………….. 284

Развертывание Windows 8……………………………………………………………………………………………….. 285

Развертывание Windows 10/11………………………………………………………………………………………… 285

Клонирование Windows-систем………………………………………………………………………………………. 285

Подводные камни процесса клонирования………………………………………………………….. 286

Утилита sysprep………………………………………………………………………………………………………. 287

Создание установочного образа системы при помощи утилиты sysprep……. 287

Подготовка диска для существенно отличающейся системы……………………….. 288

Дублирование жесткого диска………………………………………………………………………………. 289

Образы клонируемого диска и их модификация………………………………………………….. 290

Клонирование компьютеров — членов домена…………………………………………………… 290

Клонирование Linux-систем……………………………………………………………………………………………. 290

Средства клонирования Linux……………………………………………………………………………….. 290

Использование Clonezilla……………………………………………………………………………………….. 291

Подготовка программ для «тихой» установки………………………………………………………………. 297

Файлы ответов (трансформаций)………………………………………………………………………….. 298

Использование ключей «тихой» установки………………………………………………………….. 300

Переупаковка………………………………………………………………………………………………………….. 301

Административная установка……………………………………………………………………………….. 303

Развертывание программы в Active Directory………………………………………………………………… 303

Глава 7. Мониторинг информационной системы…………………………………. 309

Основные способы мониторинга……………………………………………………………………………………………. 309

Журналы системы и программ……………………………………………………………………………………….. 309

Протокол SNMP……………………………………………………………………………………………………………….. 310

Опрос служб……………………………………………………………………………………………………………………… 310

Мониторинг с использованием агентов…………………………………………………………………………. 311

Мониторинг на основе протокола SNMP………………………………………………………………………………. 312

Простейшие варианты мониторинга……………………………………………………………………………………… 314

Контроль журналов Windows…………………………………………………………………………………………. 314

Привязка задачи……………………………………………………………………………………………………… 314

Подписка на события……………………………………………………………………………………………… 316

Создание собственных событий в журналах Windows……………………………………….. 316

Настройка журналирования в syslog…………………………………………………………………….. 317

Простейший мониторинг Apache……………………………………………………………………………………. 317

Утилиты мониторинга……………………………………………………………………………………………………… 317

Система мониторинга Nagios………………………………………………………………………………………………….. 318

Необходимость мониторинга сети…………………………………………………………………………………. 318

Установка Nagios……………………………………………………………………………………………………………… 318

Настройка Nagios…………………………………………………………………………………………………………….. 320

Мониторинг в Nagios серверов Windows………………………………………………………………………… 324

Мониторинг Windows-систем на основе WMI……………………………………………………… 327

Мониторинг в Nagios серверов Linux……………………………………………………………………………… 328

Мониторинг систем с использованием протокола SNMP…………………………………………….. 328

Сервер протоколов………………………………………………………………………………………………………………….. 329

Постановка задачи…………………………………………………………………………………………………………… 329

Настройка основного (центрального) сервера……………………………………………………………… 330

Настройка остальных серверов сети……………………………………………………………………………… 333

Протоколирование системой инициализации в Linux………………………………………………………….. 334

Системы мониторинга трафика……………………………………………………………………………………………… 337

Простейшая система мониторинга трафика: darkstat………………………………………………….. 337

Система NeTAMS…………………………………………………………………………………………………………….. 339

Утилита monit………………………………………………………………………………………………………………………….. 343

Мониторинг жестких дисков. Коды S.M.A.R.T……………………………………………………………………… 344

Глава 8. Виртуализация и облачные технологии………………………………….. 351

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

Глоссарий…………………………………………………………………………………………………………………………………. 352

Вендоры виртуальных решений…………………………………………………………………………………………….. 352

Выбор гипервизора………………………………………………………………………………………………………………….. 353

Программное обеспечение и виртуальная среда………………………………………………………………….. 356

Особенности сетевых подключений виртуальных машин…………………………………………… 356

Лицензирование программного обеспечения виртуальных машин……………………………. 357

Создание виртуальных машин……………………………………………………………………………………………….. 358

Создание виртуальной машины путем чистой установки операционной системы…… 358

Клонирование виртуальной машины…………………………………………………………………………….. 359

Снятие образа физического сервера………………………………………………………………………………. 360

Миграция между решениями различных производителей…………………………………………… 360

Некоторые замечания к устройству виртуальных машин…………………………………………………… 362

Жесткие диски………………………………………………………………………………………………………………….. 362

Типы виртуальных дисков……………………………………………………………………………………… 362

Необходимость блочного доступа к виртуальному диску…………………………………. 363

Варианты подключения виртуального диска………………………………………………………. 363

Обслуживание файлов виртуального диска…………………………………………………………. 363

Сохранение состояния виртуальной машины……………………………………………………… 363

Распределение вычислительных ресурсов……………………………………………………………………. 364

Оперативная память………………………………………………………………………………………………………… 364

Сервисные операции……………………………………………………………………………………………………………….. 365

Резервное копирование и антивирусная защита…………………………………………………………… 365

Обмен данными………………………………………………………………………………………………………………… 365

Копирование данных с машины на машину………………………………………………………… 365

Общие папки……………………………………………………………………………………………………………. 365

Миграция виртуальных машин………………………………………………………………………………………. 367

Подключение к виртуальным машинам…………………………………………………………………………. 368

Особенности выключения виртуальных машин……………………………………………………………. 368

Виртуальные рабочие станции………………………………………………………………………………………………. 369

Сравниваем VDI-решения с терминальными клиентами……………………………………………… 369

Немного об экономике VDI……………………………………………………………………………………………… 370

Структура VDI-решений…………………………………………………………………………………………………. 371

Некоторые особенности VDI-решений………………………………………………………………………….. 372

KVM и Virtuozzo (OpenVZ)……………………………………………………………………………………………………… 373

Разница между KVM и Virtuozzo…………………………………………………………………………………….. 373

Виртуализация на основе технологии KVM…………………………………………………………………………. 374

Установка KVM……………………………………………………………………………………………………………….. 374

Создание виртуальной машины……………………………………………………………………………………… 375

Полезные команды…………………………………………………………………………………………………………… 377

Советы по оптимизации виртуальных систем………………………………………………………………………. 378

Виртуализация в сетях передачи данных……………………………………………………………………………… 379

Виртуальные частные сети…………………………………………………………………………………………….. 379

Зачем нужны виртуальные сети?……………………………………………………………………………………. 379

Маркировка кадров…………………………………………………………………………………………………………. 380

Порты и VLAN………………………………………………………………………………………………………………….. 381

Практика настройки VLAN на коммутаторах Cisco…………………………………………………….. 382

Другие производители оборудования……………………………………………………………………………. 384

Настройка VLAN в Linux………………………………………………………………………………………………… 384

Выбор сервера: физический или виртуальный……………………………………………………………………… 386

Нужен ли вашему проекту сервер?………………………………………………………………………………… 386

Стоимость физического сервера…………………………………………………………………………………….. 386

Стоимость виртуального сервера…………………………………………………………………………………… 387

Стоимость содержания физического сервера……………………………………………………………….. 388

Выбор облачного провайдера……………………………………………………………………………………………….. 390

Площадка………………………………………………………………………………………………………………………….. 390

Сертификация ЦОД…………………………………………………………………………………………………. 390

Где расположен ЦОД: в России или за границей?……………………………………………….. 391

Кому принадлежит ЦОД? Можно ли войти и посмотреть, как все устроено?….. 392

Облачная платформа………………………………………………………………………………………………………. 392

Как можно подключиться к «облаку»? Есть ли панель управления?………………… 393

Что представляет собой виртуальное ядро?………………………………………………………… 393

Какие используются дисковые ресурсы? Соответствует ли скорость ресурсов заявленной?            393

Есть ли сервис резервного копирования?……………………………………………………………… 394

Какова пропускная способность интернет-соединения и сколько будет стоить ее расширение?    394

Входит ли в стоимость услуги лицензия на программное обеспечение?………….. 394

Как выполняется тарификация?…………………………………………………………………………….. 394

Есть ли тестовый режим?……………………………………………………………………………………….. 395

Сколько стоит собственная VPN-сеть и какие есть ограничения?……………………… 395

Есть ли какие-либо скрытые платежи — например, за панель управления сервером и т. п.?            395

Поддержка………………………………………………………………………………………………………………………… 395

Виртуализация физического сервера…………………………………………………………………………………….. 395

Установка панели управления на виртуальный Linux-сервер……………………………………………. 398

Настройка терминального Windows-сервера……………………………………………………………………….. 404

Создание виртуального сервера…………………………………………………………………………………….. 404

Оптимальная конфигурация виртуального сервера для бухгалтерской программы «1C:Предприятие»  405

Установка службы удаленных рабочих столов……………………………………………………………. 406

Настройка сервера лицензирования для удаленных рабочих столов……………………….. 411

Установка лицензий службы удаленных рабочих столов…………………………………………… 417

Безопасный запуск программы «1С:Предприятие»………………………………………………………. 420

Песочница Windows…………………………………………………………………………………………………………………. 421

Глава 9. Безопасность………………………………………………………………………….. 425

Безопасность и комфорт………………………………………………………………………………………………………….. 425

Попытаемся разложить по полочкам…………………………………………………………………………………….. 426

Как будем защищать?……………………………………………………………………………………………………………… 427

Три «кита» безопасности………………………………………………………………………………………………………… 428

Организационное обеспечение информационной безопасности………………………………………… 429

План обеспечения непрерывности функционирования информационной системы….. 430

Безопасность паролей……………………………………………………………………………………………………… 430

Токены и смарт-карты……………………………………………………………………………………………. 432

Rainbow-таблицы……………………………………………………………………………………………………. 433

Блокировка учетной записи пользователя…………………………………………………………… 433

Восстановление пароля администратора……………………………………………………………. 434

Методы социальной инженерии…………………………………………………………………………………….. 435

Меры защиты от внешних угроз…………………………………………………………………………………………….. 436

Физическая безопасность………………………………………………………………………………………………… 436

Ограничение доступа к рабочим станциям………………………………………………………….. 437

Межсетевые экраны……………………………………………………………………………………………….. 438

Ограничения подключения нового оборудования………………………………………………. 438

Обеспечение сетевой безопасности информационной системы………………………………….. 439

Контроль проходящего трафика…………………………………………………………………………… 439

Контроль устройств по MAC-адресам…………………………………………………………………. 440

Протокол 802.1х……………………………………………………………………………………………………… 441

Особенности применения протокола 802.1х…………………………………………………… 442

Настройка протокола 802.1х…………………………………………………………………………… 443

Выдача сертификатов компьютерам………………………………………………………. 444

Настройка службы каталогов…………………………………………………………………. 445

Настройка службы RADIUS…………………………………………………………………….. 445

Настройка автоматического назначения VLAN для порта
коммутатора……………………………………………………………………………………………… 445

Настройка клиентского компьютера………………………………………………………. 446

Настройка коммутатора………………………………………………………………………….. 447

Технология NAP……………………………………………………………………………………………………………….. 447

Обнаружение нештатной сетевой активности………………………………………………………………. 448

Контроль состояния программной среды серверов и станций……………………………………………. 449

Индивидуальная настройка серверов……………………………………………………………………………. 449

Security Configuration Manager………………………………………………………………………………. 449

Security Compliance Manager…………………………………………………………………………………. 450

Исключение уязвимостей программного обеспечения…………………………………………………. 450

Уязвимости и эксплойты………………………………………………………………………………………… 450

Как узнать об обновлениях?………………………………………………………………………………….. 451

Проверка системы на наличие уязвимостей…………………………………………………………. 451

Тестирование обновлений……………………………………………………………………………………… 452

Обновления операционных систем Linux…………………………………………………………….. 453

Индивидуальные обновления Windows-систем……………………………………………………. 454

Обновление Windows-систем на предприятии……………………………………………………… 455

Установка обновлений через групповые политики……………………………………………… 456

Защита от вредоносных программ…………………………………………………………………………………. 456

График обновления антивирусных баз…………………………………………………………………. 459

Внимательность пользователя………………………………………………………………………………. 459

Обезвреживание вирусов……………………………………………………………………………………….. 460

Защита от вторжений………………………………………………………………………………………………………. 461

Программы-шпионы: «троянские кони»……………………………………………………………….. 461

Редактирование списка автоматически загружаемых программ………………………. 465

Безопасность приложений………………………………………………………………………………………………. 466

Основные принципы безопасности приложений…………………………………………………. 466

Единый фонд дистрибутивов и средства контроля запуска
программного обеспечения……………………………………………………………………………………. 467

Неизменность системы…………………………………………………………………………………………………….. 467

Защита от утечки данных……………………………………………………………………………………………………….. 468

Шифрование данных……………………………………………………………………………………………………….. 468

Шифрование данных на устройствах хранения………………………………………………….. 468

Шифрование архивов……………………………………………………………………………………….. 468

Бесплатные программы шифрования данных………………………………………………… 468

Шифрование дисков: коммерческие программы……………………………………………. 470

Шифрование в Linux……………………………………………………………………………………………….. 472

Шифрование файловой системы Windows……………………………………………………………. 475

Шифрование диска при помощи BitLocker…………………………………………………………… 477

Использование BitLocker на компьютерах без TPM………………………………………. 478

Включение шифрования…………………………………………………………………………………… 479

Режим восстановления……………………………………………………………………………………… 479

Шифрование почты………………………………………………………………………………………………… 480

Получение открытого ключа для защищенной переписки……………………………. 481

Получение цифрового сертификата для защищенной переписки…………………. 481

Работа с подписанными и зашифрованными сообщениями в ОС Android…… 484

Шифрование в базах данных…………………………………………………………………………………. 490

Стеганография………………………………………………………………………………………………………… 491

Анализ поведения пользователей…………………………………………………………………………………… 491

DLP-технологии……………………………………………………………………………………………………………….. 492

Инструменты анализа безопасности Windows Server…………………………………………………………… 495

MBSA, Microsoft Baseline Security Alalyzer…………………………………………………………………….. 495

Microsoft Windows Server Best Practice Analyzer……………………………………………………………. 497

SekCheck Security Auditing………………………………………………………………………………………………. 498

Скрипт Windows SEC-Audit……………………………………………………………………………………………… 499

Анонимность работы в глобальной сети……………………………………………………………………………….. 499

Глава 10. Отказоустойчивая информационная система……………………….. 503

Территориальная распределенность…………………………………………………………………………………….. 503

Центры обработки данных (дата-центры)…………………………………………………………………………….. 504

Требования к помещениям………………………………………………………………………………………………. 504

Поддержание в помещении постоянной температуры…………………………………………………. 505

Резервное электроснабжение………………………………………………………………………………………….. 505

Системы пожаротушения………………………………………………………………………………………………… 506

Сетевая инфраструктура………………………………………………………………………………………………………… 506

Выбор правильной топологии сети передачи данных…………………………………………………. 506

Построение отказоустойчивой сети на основе протоколов второго уровня модели OSI     507

Протокол STP…………………………………………………………………………………………………….. 507

Протокол MSTP…………………………………………………………………………………………………. 508

Отказоустойчивая сеть на основе протоколов третьего уровня модели OSI……. 508

Протокол VRRP…………………………………………………………………………………………………. 508

Агрегированные каналы…………………………………………………………………………………… 509

Проприетарные технологии восстановления структуры сети…………………………………….. 510

Фермы серверов……………………………………………………………………………………………………………………….. 510

Отказоустойчивые решения для приложений……………………………………………………………………….. 511

DNS-серверы…………………………………………………………………………………………………………………….. 511

DHCP-сервер…………………………………………………………………………………………………………………….. 512

Кластер Oracle RAC…………………………………………………………………………………………………………. 512

Распределенная информационная база программы «1С:Предприятие»…………………….. 513

Дублирование данных…………………………………………………………………………………………………………….. 513

Зеркалирование серверов баз данных…………………………………………………………………………… 513

Зеркалирование (репликация) данных SQL-серверов…………………………………………. 513

Снимки баз данных…………………………………………………………………………………………………. 514

Настройка клиентских подключений……………………………………………………………………. 514

Распределенная файловая система………………………………………………………………………………… 515

Создание DFS………………………………………………………………………………………………………….. 515

Репликация DFS………………………………………………………………………………………………………. 516

Поддержка DFS в Linux-системах…………………………………………………………………………. 518

Кластеры………………………………………………………………………………………………………………………………….. 518

Кластер Microsoft…………………………………………………………………………………………………………….. 519

Распределенные каталоги………………………………………………………………………………………………………. 521

Репликация данных каталогов……………………………………………………………………………………….. 521

Хозяева операций……………………………………………………………………………………………………. 522

Смена хозяев операций………………………………………………………………………………………….. 523

Сервер глобального каталога (GC)……………………………………………………………………….. 524

Отказоустойчивые решения и виртуальные системы…………………………………………………………… 525

Глава 11. Порядок выявления неисправностей и их устранения………….. 527

Если отказ уже произошел……………………………………………………………………………………………………… 527

Максимальный аптайм……………………………………………………………………………………………………. 528

Восстановление с нуля, или полное фиаско………………………………………………………………….. 528

Запасные детали………………………………………………………………………………………………………………. 529

Где получить помощь?……………………………………………………………………………………………………………. 530

Сбор информации об отказе…………………………………………………………………………………………………… 530

Анализ журналов системы………………………………………………………………………………………………. 531

Средства просмотра журналов системы……………………………………………………………………….. 532

Журналы в Linux: демон syslogd…………………………………………………………………………………….. 533

Централизованное ведение журналов……………………………………………………………………………. 537

Установка триггеров на события протоколов……………………………………………………………….. 538

Настройка аудита событий безопасности…………………………………………………………………….. 538

Особенности отказов различных компонентов…………………………………………………………………….. 539

Мониторинг отказоустойчивой структуры…………………………………………………………………… 540

Неисправности подсистемы передачи данных…………………………………………………………….. 540

Обнаружение неисправностей сетевой инфраструктуры…………………………………… 540

Диагностика IP-протокола…………………………………………………………………………………….. 541

Проверка параметров настройки IP-протокола…………………………………………….. 541

Проверка достижимости ближайших компьютеров сети………………………………. 544

Проверка функционирования серверов имен………………………………………………….. 544

Проверка доступности приложений на удаленном компьютере………………….. 546

Проверка качества канала связи…………………………………………………………………………… 547

Объективные показатели качества канала связи…………………………………………………. 547

Программа Observer………………………………………………………………………………………….. 548

Утилита pathping……………………………………………………………………………………………….. 549

Неисправности аппаратной части компьютера……………………………………………………………. 550

Контроль жестких дисков………………………………………………………………………………………. 551

Восстановление данных с жестких дисков…………………………………………………………… 553

Проверка оперативной памяти………………………………………………………………………………. 553

Контроль теплового режима работы системы…………………………………………………….. 555

Ошибки программного обеспечения………………………………………………………………………………. 556

Восстановление «упавших» систем……………………………………………………………………………………….. 556

Восстановление из резервной копии………………………………………………………………………………. 556

Восстановление загрузчика системы…………………………………………………………………………….. 557

Восстановление загрузки Windows 8…………………………………………………………………….. 557

Восстановление загрузки Windows 10/11…………………………………………………………….. 562

Восстановление загрузки Linux-систем………………………………………………………………… 565

Если опции восстановления недоступны……………………………………………………………… 565

Загрузка в специальных режимах………………………………………………………………………………….. 566

Загрузка Windows в безопасном режиме………………………………………………………………. 566

Загрузка *NIX-систем в однопользовательском режиме…………………………………….. 566

Откат к предыдущим состояниям системы……………………………………………………………………. 567

Загрузка последней удачной конфигурации Windows………………………………………… 567

Загрузка конфигурации из точек восстановления Windows……………………………….. 567

Восстановление Windows путем переустановки…………………………………………………………… 568

Восстановление удаленных данных……………………………………………………………………………… 570

Корзины…………………………………………………………………………………………………………………… 570

Восстановление из теневых копий………………………………………………………………………… 570

История файлов………………………………………………………………………………………………………. 572

Оптимизация настроек компьютера………………………………………………………………………………………. 577

Что такое «медленно»?…………………………………………………………………………………………………….. 578

Основные «узкие места» системы…………………………………………………………………………………… 578

Оценка производительности процессора……………………………………………………………… 579

Оценка использования оперативной памяти………………………………………………………… 581

Оценка дисковой подсистемы………………………………………………………………………………… 582

Показатели производительности дисков………………………………………………………… 582

Пути оптимизации дисковой подсистемы……………………………………………………….. 585

Оценка работы сетевого адаптера и пути оптимизации системы передачи данных 585

Некоторые советы по анализу показаний производительности…………………………………. 587

Оптимизация приложений……………………………………………………………………………………………….. 588

Диагностика службы каталогов и обнаружение ее неисправностей………………………….. 589

Средства тестирования AD……………………………………………………………………………………. 590

Проверка разрешения имен……………………………………………………………………………………. 591

Глава 12. Плановые задачи обслуживания…………………………………………… 593

Ежедневные задачи…………………………………………………………………………………………………………………. 593

Еженедельные задачи……………………………………………………………………………………………………………… 594

Прочие плановые операции……………………………………………………………………………………………………. 595

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

Кенин Александр

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