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

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

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

Книга посвящена парадигме 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 экз., делится с читателями своим двадцатилетним опытом проектирования и управления информационными системами.

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

Встречайте: “Программирование на VBA в Excel. Самоучитель”

Программирование на VBA в Excel . Самоучитель

Книга посвящена возможностям программирования на языке Visual Basic for Applications (VBA) в современном офисном приложении Microsoft Office Excel. Приведена информация о сервисах Power по работе с данными, новинках Excel 2021, в том числе о динамических массивах и функциях для работы с ними. Даны теоретические сведения о программировании, элементах объектной модели Excel, запуске и отладке макросов. Рассмотрены вопросы автоматизации рабочего листа при помощи элементов управления Excel. Описаны приемы создания макросов, пользовательских функций и форм в редакторе Visual Basic. Приведены способы взаимодействия при помощи VBA с другими программами пакета Microsoft Office. Для закрепления материала рассмотрены примеры пользовательских приложений в виде листингов программ с анализом и поясняющими комментариями. В приложениях содержатся глоссарии с основными терминами VBA и редактора Visual Basic VBE.

Файлы рабочих книг с поддержкой макросов для каждой главы размещены на сайте издательства.

  • Основы VBA для Excel и настройки безопасности
  • Новинки Excel 2021 и службы Power
  • Объекты, методы, свойства, события
  • Макросы: программирование, запуск и отладка
  • Функции, определенные пользователем
  • Работа с ячейками, датами и временем
  • Динамические массивы в Excel и VBA
  • Графические элементы и диаграммы средствами VBA
  • Создание пользовательских форм, диалоговых окон, сообщений
  • Автоматизация рабочего листа: элементы управления формы и ActiveX

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

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

Язык VBA……………………………………………………………………………………………………………………………………. 11

Нововведения Excel 2021 и службы Power……………………………………………………………………………… 11

Совместное редактирование рабочей книги……………………………………………………………………. 12

Службы Power……………………………………………………………………………………………………………………. 12

Динамические массивы……………………………………………………………………………………………………… 17

Новые функции в Excel 2021……………………………………………………………………………………………… 19

Оператор неявного пересечения……………………………………………………………………………………….. 20

Зачем нужен VBA в Excel 2021?……………………………………………………………………………………………….. 21

Объектно-ориентированное программирование…………………………………………………………………….. 22

Общие положения………………………………………………………………………………………………………………. 22

Объект…………………………………………………………………………………………………………………………………. 24

Объектная модель Microsoft Excel 2021…………………………………………………………………………………… 24

Объектная модель VBA……………………………………………………………………………………………………… 24

Объект Application……………………………………………………………………………………………………………… 25

Классы………………………………………………………………………………………………………………………………… 26

Свойства……………………………………………………………………………………………………………………………… 26

Методы……………………………………………………………………………………………………………………………….. 27

События………………………………………………………………………………………………………………………………. 28

Глава 1. Основные понятия VBA…………………………………………………………… 31

Базовые конструкции языка Visual Basic…………………………………………………………………………………. 31

Типы данных в VBA…………………………………………………………………………………………………………… 32

Константы и переменные, переменные объектов……………………………………………………………. 34

Область действия переменных и констант……………………………………………………………… 34

Объявление констант и переменных……………………………………………………………………….. 35

Начало работы………………………………………………………………………………………………………………………….. 35

Настройка безопасности…………………………………………………………………………………………………………… 39

Запись макроса………………………………………………………………………………………………………………………….. 41

Имя макроса……………………………………………………………………………………………………………………….. 41

Разработка проекта…………………………………………………………………………………………………………………… 42

Создание модуля……………………………………………………………………………………………………………………….. 44

Создание модуля с помощью контекстно-зависимого меню………………………………………….. 45

Окно кода……………………………………………………………………………………………………………………………. 45

Оператор Option Explicit…………………………………………………………………………………………………… 46

Первая процедура……………………………………………………………………………………………………………………… 47

Объявление переменной в VBA…………………………………………………………………………………………. 48

Оператор Debug.Print………………………………………………………………………………………………………… 49

Автоматический ввод атрибутов команд…………………………………………………………………………. 51

Структура кода процедуры………………………………………………………………………………………………………. 52

Метод Worksheets.Activate…………………………………………………………………………………………………. 53

Активная ячейка ActiveCell……………………………………………………………………………………………….. 53

Открытие книги с макросом………………………………………………………………………………………………. 55

Ввод данных……………………………………………………………………………………………………………………….. 56

Оператор With…………………………………………………………………………………………………………………….. 57

Свойство Selection……………………………………………………………………………………………………………… 58

Свойство Orientation………………………………………………………………………………………………………….. 59

Объект Range………………………………………………………………………………………………………………………. 60

Кнопка (элемент управления ActiveX)……………………………………………………………………………… 61

Свойство Offset…………………………………………………………………………………………………………………… 62

Функция Environ…………………………………………………………………………………………………………………. 63

Функция MsgBox…………………………………………………………………………………………………………………. 64

Константы табуляции Chr(9) и перевода строки Chr(10)………………………………………………. 66

Диалоговое окно, создаваемое функцией InputBox………………………………………………………… 67

Переменная типа String……………………………………………………………………………………………………… 68

Переменная типа Long……………………………………………………………………………………………………….. 68

Переменная типа Byte………………………………………………………………………………………………………… 69

Методы Protect и Unprotect………………………………………………………………………………………………. 69

Запуск макроса при помощи нажатия сочетания клавиш……………………………………………………… 71

Как удалить модуль?…………………………………………………………………………………………………………………. 73

Глава 2. Основы программирования в VBA…………………………………………… 75

Ячейка и диапазон ячеек…………………………………………………………………………………………………………… 75

Арифметические выражения…………………………………………………………………………………………………….. 76

Правила записи арифметических выражений…………………………………………………………………. 77

Арифметические выражения в ячейке………………………………………………………………………………. 77

Арифметические выражения с ячейками………………………………………………………………………….. 78

Обрамление ячейки — метод BorderAround……………………………………………………………………………. 79

Оператор With……………………………………………………………………………………………………………………………. 80

Вложенные операторы With……………………………………………………………………………………………………… 81

Генерация случайных чисел СЛЧИС()……………………………………………………………………………………. 82

Генерация динамического массива случайных чисел RandArray………………………………………… 83

Перевод градусов по Фаренгейту в градусы по Цельсию……………………………………………………… 84

Замена значений формул числом…………………………………………………………………………………………….. 85

Работа с цветом………………………………………………………………………………………………………………………….. 88

Функция RGB………………………………………………………………………………………………………………………. 88

Свойства Color и ColorIndex…………………………………………………………………………………………….. 89

Свойство Color………………………………………………………………………………………………………….. 89

Свойство ColorIndex…………………………………………………………………………………………………. 90

Палитра цветов…………………………………………………………………………………………………………. 93

Подсчет цветов в рисунке…………………………………………………………………………………………. 95

Заливка ячейки цветом……………………………………………………………………………………………… 98

Защита ячеек рабочего листа от форматирования……………………………………………….. 99

Выделение ячеек по цветовому соответствию в диапазоне………………………………… 101

Заливка строк с заданным шагом………………………………………………………………………….. 102

Выделение миганием………………………………………………………………………………………………. 103

Календарь……………………………………………………………………………………………………………….. 105

Заливка ячеек, содержащих формулы………………………………………………………………….. 106

Подсветка минимального и максимального значений………………………………………… 108

Цветовая шкала………………………………………………………………………………………………………. 109

Глава 3. Логические операторы……………………………………………………………. 111

Оператор If…Then…Else…………………………………………………………………………………………………………… 111

Операторы сравнения……………………………………………………………………………………………………………… 111

Неполная форма оператора If…Then……………………………………………………………………………… 113

Полная форма оператора If…Then…Else………………………………………………………………………… 114

Оператор ElseIf…………………………………………………………………………………………………………………. 114

Вложенные логические операторы………………………………………………………………………………………… 115

Примеры использования логических операторов………………………………………………………………… 116

Свойство Name…………………………………………………………………………………………………………………. 116

Свойство Value…………………………………………………………………………………………………………………. 116

Функции IsEmpty и IsNumeric…………………………………………………………………………………………… 117

Свойство Range.HasFormula…………………………………………………………………………………………… 117

Переход к ячейке A2021………………………………………………………………………………………………….. 118

Пример с оператором Case……………………………………………………………………………………………… 119

Функция InputBox…………………………………………………………………………………………………………….. 121

Оператор GoTo…………………………………………………………………………………………………………………. 122

Проверка существования файла…………………………………………………………………………………….. 123

Глава 4. Операторы цикла…………………………………………………………………… 125

Цикл For…To…Step…Next…………………………………………………………………………………………………………. 125

Цикл For…To…Next…………………………………………………………………………………………………………………… 126

Заполнение столбца………………………………………………………………………………………………………… 127

Заполнение столбца с большим шагом………………………………………………………………………….. 128

Отрицательный шаг…………………………………………………………………………………………………………. 128

Выход из цикла по условию……………………………………………………………………………………………. 129

Кнопка для запуска макроса (элемент управления формы)………………………………………………… 130

Вложенный цикл For…To…Next………………………………………………………………………………………. 131

Цикл For…Each…………………………………………………………………………………………………………………………. 133

Цикл Do…Loop………………………………………………………………………………………………………………………….. 134

Цикл While…Wend…………………………………………………………………………………………………………………….. 137

Время работы программы………………………………………………………………………………………………………. 138

Глава 5. Функции, определенные пользователем…………………………………. 145

Построение функций……………………………………………………………………………………………………………….. 145

График функции одной переменной……………………………………………………………………………….. 145

Структура кода функции пользователя…………………………………………………………………………. 146

График функции одной переменной (продолжение)…………………………………………………….. 146

Расчет функции одной переменной с использованием динамических массивов……….. 149

График кусочно-непрерывной функции с двумя условиями………………………………………… 150

Расчет кусочно-непрерывной функции с двумя условиями с использованием динамических массивов   153

График кусочно-непрерывной функции с тремя условиями………………………………………… 154

Расчет кусочно-непрерывной функции с тремя условиями с использованием динамических массивов   156

Названия формул на английском языке…………………………………………………………………………. 158

Пользовательская функция с тремя аргументами…………………………………………………………. 160

Создание собственной категории…………………………………………………………………………………………… 161

Функция без аргументов………………………………………………………………………………………………….. 163

Переименование рабочего листа……………………………………………………………………………………. 164

Функция с аргументом типа Range…………………………………………………………………………………. 165

Функция с массивом…………………………………………………………………………………………………………. 166

Формулы динамического массива………………………………………………………………………………….. 168

Функция с массивом в качестве аргумента……………………………………………………………………. 169

Вызов функции из процедуры…………………………………………………………………………………………. 171

Вызов процедуры, использующей функцию, из другой процедуры……………………………. 173

Запись названий формул…………………………………………………………………………………………………. 174

Вычисление определенного интеграла…………………………………………………………………………………. 176

Метод прямоугольников………………………………………………………………………………………………….. 177

Метод трапеций……………………………………………………………………………………………………………….. 177

Метод Симпсона………………………………………………………………………………………………………………. 177

Переключатели OptionButton…………………………………………………………………………………………………. 180

Глава 6. Пользовательская форма………………………………………………………… 183

Создание форм средствами VBA……………………………………………………………………………………………. 183

Форма UserForm………………………………………………………………………………………………………………………. 183

Семейство форм……………………………………………………………………………………………………………….. 184

Свойства формы……………………………………………………………………………………………………………….. 184

Разметочная сетка……………………………………………………………………………………………………………. 186

Методы формы…………………………………………………………………………………………………………………. 187

События формы………………………………………………………………………………………………………………… 187

Командная кнопка для показа формы……………………………………………………………………………. 188

Элементы управления……………………………………………………………………………………………………………… 190

Префиксы………………………………………………………………………………………………………………………….. 193

Элемент управления Label………………………………………………………………………………………………. 193

Элемент управления CommandButton……………………………………………………………………………. 196

Элемент управления TextBox………………………………………………………………………………………….. 199

Элементы управления OptionButton и Frame………………………………………………………………… 202

Ключевое слово Me………………………………………………………………………………………………………….. 205

Элемент управления ScrollBar……………………………………………………………………………………….. 206

Элемент управления ListBox…………………………………………………………………………………………… 210

Элемент управления ComboBox……………………………………………………………………………………… 213

Элемент управления Image……………………………………………………………………………………………… 216

Элемент управления SpinButton…………………………………………………………………………………….. 220

Элемент управления TabStrip…………………………………………………………………………………………. 224

Элементы управления CheckBox и MultiPage……………………………………………………………….. 228

Элемент управления RefEdit…………………………………………………………………………………………… 232

Элемент управления ToggleButton…………………………………………………………………………………. 235

Пользовательский элемент управления…………………………………………………………………………………. 237

Элементы управления формы…………………………………………………………………………………………………. 238

Элемент управления Полоса прокрутки……………………………………………………………………….. 239

Глава 7. Программирование объектов Shape, инфографики и фракталов 243

Типы объектов, свойства и методы семейства Shapes………………………………………………………….. 243

Тип объекта msoShapeRectangle (прямоугольник) с заливкой (Fill)……………………………. 244

Тип объекта msoConnectorCurve (соединительная линия)…………………………………………… 246

Метод AddConnector……………………………………………………………………………………………………….. 247

Метод Patterned……………………………………………………………………………………………………………….. 248

Рисование линии: метод AddLine……………………………………………………………………………………. 250

Тип объекта msoShapeSmileyFace…………………………………………………………………………………… 251

Свойство Name…………………………………………………………………………………………………………………. 252

Стрелка……………………………………………………………………………………………………………………………… 253

Метод FillFormat.OneColorGradient………………………………………………………………………………. 255

Текстовый фрейм……………………………………………………………………………………………………………… 255

Тип фигуры msoShapeHeart (сердце) с заливкой (Fill)………………………………………………….. 257

Метод Group…………………………………………………………………………………………………………………….. 258

Создание выноски с текстовым фреймом………………………………………………………………………. 259

Свойство ThreeD………………………………………………………………………………………………………………. 260

Частичное и полное удаление фигур……………………………………………………………………………… 262

Оператор Set…………………………………………………………………………………………………………………….. 264

Создание собственных элементов инфографики………………………………………………………………….. 265

Фракталы………………………………………………………………………………………………………………………………….. 267

Тип данных, определенный пользователем…………………………………………………………………… 268

Фракталы из треугольников……………………………………………………………………………………………. 269

Фракталы из многоугольников……………………………………………………………………………………….. 273

Фракталы из четырехугольников…………………………………………………………………………………… 275

Глава 8. Работа с ячейками и областями………………………………………………. 279

Объект Application…………………………………………………………………………………………………………………… 279

Свойства объекта Application…………………………………………………………………………………………. 279

Методы объекта Application…………………………………………………………………………………………… 280

Объект Range……………………………………………………………………………………………………………………………. 281

Адресация ячеек……………………………………………………………………………………………………………….. 281

Свойства объекта Range………………………………………………………………………………………………….. 282

Методы объекта Range……………………………………………………………………………………………………. 284

Объект Selection……………………………………………………………………………………………………………………….. 284

Объект Cell……………………………………………………………………………………………………………………………….. 284

Выделение нескольких областей……………………………………………………………………………………………. 284

Выделение последней ячейки в диапазоне……………………………………………………………………………. 286

Свойство Range.End………………………………………………………………………………………………………………… 287

Выделение ячеек с формулами……………………………………………………………………………………………….. 288

Выделение используемого диапазона данных……………………………………………………………………… 290

Форматирование объединенных ячеек………………………………………………………………………………….. 290

Выделение по условию……………………………………………………………………………………………………………. 292

Удаление символов из ячеек…………………………………………………………………………………………………… 293

Убираем текст………………………………………………………………………………………………………………………….. 294

Имена и фамилии……………………………………………………………………………………………………………………… 295

Метод Delete…………………………………………………………………………………………………………………………….. 297

Метод Clear……………………………………………………………………………………………………………………………… 298

Метод Application.Goto…………………………………………………………………………………………………………… 299

Скрытие данных………………………………………………………………………………………………………………………. 299

Копирование и специальная вставка…………………………………………………………………………………….. 299

Поиск минимума и максимума в диапазоне………………………………………………………………………….. 300

Поиск минимума и максимума в динамическом массиве…………………………………………………….. 301

Глава 9. Работа с данными…………………………………………………………………… 305

Массив из трех элементов………………………………………………………………………………………………………. 305

Динамический массив данных……………………………………………………………………………………………….. 308

Сравнение областей на одном листе……………………………………………………………………………………… 310

Сравнение областей на разных листах…………………………………………………………………………………. 311

Сортировка………………………………………………………………………………………………………………………………. 316

Сортировка диапазона данных………………………………………………………………………………………. 317

Сортировка областей (блоков)……………………………………………………………………………………….. 318

Простая сортировка блоков…………………………………………………………………………………… 319

Сортировка блоков с изменением ее условий………………………………………………………. 320

Сортировка по цвету……………………………………………………………………………………………………….. 322

Контроль автофильтра посредством VBA…………………………………………………………………………….. 325

Команда Итоги………………………………………………………………………………………………………………………… 325

Сортировка данных при помощи среза…………………………………………………………………………………. 328

Сводные таблицы PivotTable………………………………………………………………………………………………….. 332

Глава 10. Автоматизация диаграмм……………………………………………………… 337

Объектная модель диаграмм…………………………………………………………………………………………………… 337

Типы диаграмм…………………………………………………………………………………………………………………. 339

Свойства объекта Chart…………………………………………………………………………………………………… 342

Методы объекта Chart…………………………………………………………………………………………………….. 342

Первая диаграмма……………………………………………………………………………………………………………………. 343

Создание диаграммы с помощью VBA………………………………………………………………………….. 346

Коническая гистограмма…………………………………………………………………………………………………. 350

Печать диаграмм……………………………………………………………………………………………………………… 352

Удаление диаграммы………………………………………………………………………………………………………. 354

Форматирование параметров диаграммы…………………………………………………………………………….. 355

Форматирование цветов поверхности…………………………………………………………………………………… 357

Добавление линии тренда………………………………………………………………………………………………………. 359

Геолокация……………………………………………………………………………………………………………………………….. 363

Красивые узоры……………………………………………………………………………………………………………………….. 365

Глава 11. Программирование объектов и событий………………………………. 369

Где и как создаются процедуры обработки событий?…………………………………………………………. 370

Процедура для объекта ЭтаКнига…………………………………………………………………………………. 371

События, связанные с нажатием кнопок мыши…………………………………………………………………….. 372

Процедура в модуле………………………………………………………………………………………………………… 372

Событие для объекта Worksheet (Лист)………………………………………………………………………….. 373

Ключевое слово ByVal и параметр Target……………………………………………………………………… 374

Очистка ячейки…………………………………………………………………………………………………………………. 375

Свойства ScrollRow и ScrollColumn……………………………………………………………………………….. 376

События активации и деактивации………………………………………………………………………………………… 376

Свойство приложения ActiveWindow……………………………………………………………………………… 376

Активный лист………………………………………………………………………………………………………………….. 377

Число обращений к макросу…………………………………………………………………………………………… 378

Управление выделением области…………………………………………………………………………………… 379

События Activate и Deactivate рабочего листа……………………………………………………………… 379

Двойной щелчок левой кнопкой мыши…………………………………………………………………………… 380

Щелчок правой кнопкой мыши……………………………………………………………………………………….. 381

Введите пароль………………………………………………………………………………………………………………… 382

Событие закрытия книги…………………………………………………………………………………………………. 383

Событие сохранения книги……………………………………………………………………………………………… 384

Глава 12. Операторы даты и времени…………………………………………………… 385

Вывод даты и времени в окно Immediate оператором Debug.Print……………………………………… 385

Печать даты и времени с помощью функции CDate……………………………………………………………… 386

Функции DateSerial и TimeSerial…………………………………………………………………………………………….. 387

Текущие дата и время……………………………………………………………………………………………………………… 387

Текущие дата и время с учетом минут и секунд……………………………………………………………………. 388

Функция Weekday — день недели…………………………………………………………………………………………… 388

Функция Format……………………………………………………………………………………………………………………….. 389

Функция DateDiff……………………………………………………………………………………………………………………… 391

Функция DatePart…………………………………………………………………………………………………………………….. 391

Функция WeekdayName……………………………………………………………………………………………………………. 392

Вывод сообщения на 3 секунды……………………………………………………………………………………………… 393

Метод Application.OnTime………………………………………………………………………………………………………. 394

Автоматическое заполнение ячеек датами методом AutoFill……………………………………………… 395

Подсветка даты………………………………………………………………………………………………………………………… 397

Поиск даты……………………………………………………………………………………………………………………………….. 398

Календарь………………………………………………………………………………………………………………………………… 400

Календарь по месяцам…………………………………………………………………………………………………………….. 402

Календарь по неделям…………………………………………………………………………………………………………….. 405

Определение возраста…………………………………………………………………………………………………………….. 409

Глава 13. Действия с рабочей книгой…………………………………………………… 411

Свойства объекта Workbook…………………………………………………………………………………………………… 411

Методы объекта Workbook……………………………………………………………………………………………………… 412

Событие и метод Open…………………………………………………………………………………………………………….. 413

Открытие рабочей книги методом Workbooks.Open……………………………………………………… 414

Свойство Application.Dialogs для работы со встроенными диалоговыми окнами……. 415

Открытие рабочей книги в диалоговом окне…………………………………………………………………. 416

Открытие приложения Блокнот……………………………………………………………………………………………… 418

Свойство Workbook.Name……………………………………………………………………………………………………….. 419

Создание рабочей книги…………………………………………………………………………………………………………. 420

Имя приложения………………………………………………………………………………………………………………………. 420

Сохранение рабочей книги…………………………………………………………………………………………………….. 422

Метод Workbook.Save………………………………………………………………………………………………………. 422

Метод Workbook.SaveAs………………………………………………………………………………………………….. 422

Метод Workbook.SaveCopyAs………………………………………………………………………………………….. 425

Сохранение всех книг и выход из программы……………………………………………………………….. 426

Сохранение всех книг и выход по запросу……………………………………………………………………. 426

Защита рабочей книги методом Workbook.Protect……………………………………………………….. 427

Объект Worksheet……………………………………………………………………………………………………………………… 427

Свойства объекта Worksheet…………………………………………………………………………………………… 428

Методы объекта Worksheet и семейства Worksheets…………………………………………………….. 428

Защита рабочего листа методом Worksheet.Protect……………………………………………………… 428

Деление рабочего листа на страницы для печати……………………………………………………………….. 432

Глава 14. Файловые операции……………………………………………………………… 435

Форматы файлов Microsoft Excel……………………………………………………………………………………………. 435

Метод CreateTextFile для объекта FileSystemObject…………………………………………………………….. 436

Список файлов указанной папки……………………………………………………………………………………………. 437

Режим доступа Input/Output……………………………………………………………………………………………………. 438

Файлы из Application.AddIns…………………………………………………………………………………………………… 440

Объект FileDialog…………………………………………………………………………………………………………………….. 442

Функция GetAttr……………………………………………………………………………………………………………………….. 444

Документирование информации о файле………………………………………………………………………………. 445

Проверка существования файла…………………………………………………………………………………………….. 447

Оператор Kill для удаления файла………………………………………………………………………………………… 448

Оператор FileCopy для копирования файла…………………………………………………………………………. 449

Переименование файла…………………………………………………………………………………………………………… 450

Перемещение файла………………………………………………………………………………………………………………… 450

Глава 15. Отладка программ и сообщения об ошибках………………………… 453

Возникновение ошибок……………………………………………………………………………………………………………. 453

Выявление и исправление ошибок…………………………………………………………………………………………. 454

Три окна для просмотра ошибок……………………………………………………………………………………………. 456

Окно просмотра Immediate………………………………………………………………………………………………. 456

Окно Locals……………………………………………………………………………………………………………………….. 458

Окно наблюдения Watches………………………………………………………………………………………………. 459

Объект Err…………………………………………………………………………………………………………………………………. 462

Оператор On Error…………………………………………………………………………………………………………………… 462

Оператор On Error Resume Next………………………………………………………………………………………. 463

Оператор On Error GoTo: вариант 1………………………………………………………………………………. 464

Оператор On Error GoTo: вариант 2………………………………………………………………………………. 465

Константы xlDisabled и xlInterrupt свойства Application.EnableCancelKey………………. 466

Массив листов………………………………………………………………………………………………………………….. 467

Команда меню Debug………………………………………………………………………………………………………………. 468

Глава 16. Программирование связей……………………………………………………. 471

Гиперссылки…………………………………………………………………………………………………………………………….. 471

Кнопка гиперссылки………………………………………………………………………………………………………………… 473

Передача данных из Excel в Word………………………………………………………………………………………….. 475

Внедрение документа Word в Excel……………………………………………………………………………………….. 475

Передача данных из Excel в PowerPoint…………………………………………………………………………………. 477

Передача данных из PowerPoint в Excel…………………………………………………………………………………. 479

Приложение 1. Глоссарий терминов Visual Basic for Applications………….. 481

Приложение 2. Глоссарий терминов Visual Basic Editor………………………… 485

Приложение 3. Описание электронного архива……………………………………. 501

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

Комолова Нина Владимировна, кандидат технических наук, доцент. Автор 17 книг, среди которых “Компьютерная верстка и дизайн”, “Adobe Photoshop CS4-CC для всех“, “Самоучитель CorelDRAW X3-X8“, “Программирование на VBA в Excel 2016/2019“, а также более 50 статей в журналах и сборниках.

 

Яковлева Елена Сергеевна, кандидат технических наук, автор книг “Adobe Photoshop CS4-CC для всех“, “Самоучитель CorelDRAW X8“, “Самоучитель Skype. Бесплатная связь через Интернет”, “3D-графика и видео в Photoshop CS4 Extended”, “Программирование на VBA в Excel 2016” и 30 статей в журналах и сборниках.
Опубликовано

Новинка: “Книга Kaggle. Машинное обучение и анализ данных”

Книга Kaggle. Машинное обучение и анализ данных

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

Конкурсы Kaggle – это поле для состязаний, где меряются силами миллионы специалистов по науке о данных (data science), которые сами себя именуют «кэглерами». Участие в таких конкурсах – верный способ профессионально вырасти в области анализа данных, влиться в замечательное сообщество единомышленников и приобрести бесценный опыт для развития карьеры. Авторы книги – грандмастера Kaggle. Они познакомят вас со стратегиями моделирования, которые более нигде не рассмотрены, и подскажут, как удобнее всего обрабатывать изображения, тексты, таблицы, как правильно реализовать обучение с подкреплением. Вы освоите качественные схемы валидации и станете уверенно ориентироваться в самых разных оценочных метриках.

Лука и Конрад рассказали о Kaggle максимально доступно. Оба они – первоклассные профессионалы, пользующиеся большим авторитетом и уважением в сообществе Kaggle. Проштудировав эту книгу, можете смело регистрироваться на Kaggle и рассчитывать на высокие результаты.
Энтони Голдблум, основатель и генеральный директор Kaggle

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

  • Как устроена соревновательная платформа Kaggle
  • Как выжать максимум из ноутбуков, датасетов и форумов Kaggle
  • Как правильно собирать портфолио проектов и идеи для развития карьеры
  • Как проектировать k-мерные и вероятностные схемы валидации
  • Как освоить наиболее распространённые и экзотические оценочные метрики
  • Как устроена бинарная и многоклассовая классификация объектов, а также их обнаружение
  • Как эффективно обращаться с временными рядами и обработкой естественного языка (NLP)
  • Как преуспеть в задачах на имитационное моделирование и оптимизацию

Книгу Kaggle. Машинное обучение и анализ данных ” можно купить со скидкой в интернет-магазине издательства “БХВ“.

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

Составители. 13

Об авторах. 13

О рецензентах. 14

О респондентах. 15

Введение. 18

Для кого эта книга. 19

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

Часть I. Знакомство с соревнованиями. 19

Часть II. Оттачивание соревновательных навыков. 20

Часть III. Использование соревнований в своей карьере. 21

Как получить максимальную отдачу от этой книги. 21

Загрузите файлы с примерами кода. 21

Загрузите цветные изображения. 22

Условные обозначения и соглашения. 22

Часть I. Знакомство с соревнованиями Kaggle. 23

Глава 1. Знакомство с Kaggle и другими соревнованиями
по науке о данных. 25

Появление и рост соревновательных платформ. 26

Соревновательная платформа Kaggle. 28

История Kaggle. 28

Другие конкурсные платформы.. 31

Знакомство с Kaggle. 33

Стадии соревнования. 33

Типы соревнований и примеры.. 36

Отправка решения и таблица результатов. 41

Парадигма каркаса для общих задач. 41

Что может пойти не так. 42

Вычислительные ресурсы.. 44

Kaggle Notebooks 45

Создание команд и нетворкинг. 46

Уровни и рейтинг. 49

Критика и возможности. 50

Резюме. 51

Глава 2. Организация данных. 53

Создание датасета. 53

Сбор данных. 57

Работа с датасетами. 62

Kaggle Datasets и Google Colab. 63

Юридические вопросы. 65

Резюме. 66

Глава 3. Работаем и учимся с Kaggle Notebooks 67

Создание блокнота. 68

Запуск блокнота. 71

Сохранение блокнотов на GitHub. 73

Как получить максимум от Kaggle Notebooks 75

Переход на Google Cloud Platform.. 76

На шаг дальше. 77

Курсы Kaggle Learn. 82

Резюме. 86

Глава 4. Используем форумы.. 87

Как работают форумы. 87

Примеры обсуждений. 92

Сетевой этикет. 97

Резюме. 97

Часть II. Оттачивание соревновательных навыков. 99

Глава 5. Задачи и метрики на соревнованиях. 101

Метрики оценивания и целевые функции. 102

Основные типы задач. 103

Регрессия. 104

Классификация. 104

Задачи ранжирования. 105

Датасет Meta Kaggle. 105

Как быть с незнакомыми метриками. 108

Метрики для задач регрессии. 112

Средний квадрат и R-квадрат.. 112

Среднеквадратичная ошибка. 113

Среднеквадратичная логарифмическая ошибка. 114

Средняя абсолютная ошибка. 115

Метрики для задач классификации. 116

Доля правильных ответов. 116

Точность и полнота. 118

F-мера. 120

Log Loss и ROC-AUC. 120

Коэффициент корреляции Мэтьюса. 122

Метрики для многоклассовой классификации. 123

Метрики для задач детектирования объектов. 129

Отношение площадей ограничивающих рамок. 131

Коэффициент Дайса. 132

Метрики для многоклассовой классификации и построение рекомендаций. 133

MAP@{K}. 133

Оптимизация метрики. 134

Нестандартные метрики и целевые функции. 135

Постобработка предсказаний. 138

Предсказание вероятностей и их корректировка. 139

Резюме. 143

Глава 6. Построение схемы валидации. 144

Подглядывание. 144

Почему важна валидация. 147

Смещение и разброс. 150

Стратегии разделения данных. 152

Контроль на отложенных данных. 153

Вероятностные методы оценки качества. 154

Контроль по k блокам. 154

Случайные разбиения. 162

Бутстрэп. 162

Настройка системы валидации. 166

Применение adversarial validation. 169

Пример реализации. 171

Различные распределения обучающих и тестовых данных. 172

Работа с утечками в данных. 176

Резюме. 180

Глава 7. Моделирование для табличных данных. 182

Tabular Playground Series 183

Начальное состояние случайного генератора и воспроизводимость. 186

Разведочный анализ данных. 188

Понижение размерности методами t-SNE и UMAP. 190

Уменьшение размера данных. 191

Преобразования признаков. 193

Простые производные признаки. 194

Метапризнаки на основе строк и столбцов. 196

Целевое кодирование. 197

Важность признаков и оценка качества. 202

Псевдометки. 205

Удаление шума с помощью автокодировщиков. 207

Нейросети для табличных конкурсов. 210

Резюме. 216

Глава 8. Оптимизация гиперпараметров. 218

Базовые методы оптимизации. 219

Поиск по сетке. 219

Случайный поиск. 221

Поиск сокращением вдвое. 222

Ключевые параметры и их использование. 225

Линейные модели. 225

Машины опорных векторов. 225

Случайные леса и экстремально рандомизированные деревья. 227

Градиентный бустинг над деревьями. 228

LightGBM.. 228

XGBoost 230

CatBoost 231

HistGradientBoosting. 232

Байесовская оптимизация. 235

Использование Scikit-optimize. 236

Настройки байесовской оптимизации. 241

Обобщение байесовской оптимизации на параметры нейронных сетей. 248

Создание моделей с KerasTuner 256

Подход TPE и Optuna. 265

Резюме. 270

Глава 9. Ансамбли: блендинг и стекинг. 271

Краткое введение в ансамблевые алгоритмы. 272

Усреднение. 275

Голосование. 277

Усреднение предсказаний. 279

Взвешенные средние. 280

Усреднение и кросс-валидация. 281

Корректируем усреднение для оценок ROC-AUC. 282

Блендинг и метамодели. 283

Блендинг: лучшие практики. 284

Стекинг. 289

Варианты стекинга. 293

Сложные решения с блендингом и стекингом. 294

Резюме. 297

Глава 10. Моделирование в компьютерном зрении. 299

Стратегии аугментации. 299

Встроенные аугментации Keras 305

Подход на основе ImageDataGenerator 305

Слои предварительной обработки. 308

Пакет albumentations 309

Классификация. 312

Обнаружение объектов. 319

Семантическая сегментация. 333

Резюме. 349

Глава 11. Моделирование для обработки естественного языка. 350

Анализ тональности текста. 350

Вопросы и ответы в открытом домене. 359

Стратегии аугментации текста. 374

Основные приемы.. 375

Пакет nlpaug. 380

Резюме. 383

Глава 12. Соревнования по моделированию и оптимизации. 384

Игра Connect X.. 385

Игра “Камень, ножницы, бумага”. 390

Соревнование Santa 2020. 393

Такие разные игры. 397

Резюме. 402

Часть III. Использование соревнований в своей карьере. 403

Глава 13. Создание портфолио проектов и идей. 405

Создание портфолио с помощью Kaggle. 405

Использование блокнотов и обсуждений. 410

Использование датасетов. 413

Организация своего присутствия в Интернете за пределами Kaggle. 417

Блоги и публикации. 418

GitHub. 421

Мониторинг обновлений и информационных бюллетеней о соревнованиях. 423

Резюме. 425

Глава 14. Поиск новых профессиональных возможностей. 426

Налаживание связей с другими исследователями данных на соревнованиях. 427

Участие в Kaggle Days и других встречах Kaggle. 438

Привлечение к себе внимания и другие возможности трудоустройства. 439

Методика STAR. 440

Резюме (и несколько напутственных слов) 442

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

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

3-е издание: “Электроника для начинающих”

Электроника для начинающих, 3-е издание

В  ходе  практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током  и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию, елочные огни, электронные украшения, устройство преобразования звука, кодовый замок и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий. В третьем полноцветном издании значительная часть текста, схемы и диаграммы обновлены, фотографии пересняты в высоком качестве; число компонентов  и их цена уменьшены; проекты с использованием платы Arduino переработаны, рассмотрены и другие микроконтроллеры.

Электронный архив на сайте издательства содержит спецификации и ссылки на электронные компоненты.

 Для начинающих радиолюбителей

МИРОВОЙ БЕСТСЕЛЛЕР ДЛЯ НАЧИНАЮЩИХ РАДИОЛЮБИТЕЛЕЙ!

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

Создание работающих устройств, от простых до сложных

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

Пошаговые инструкции и более 500 цветных фотографий и рисунков помогут вам легко освоить излагаемый материал.

Новое в третьем издании!

  • Значительная часть текста, схемы и диаграммы обновлены, фотографии пересняты в высоком качестве.
  • Число компонентов и их цены уменьшены.
  • Проекты с использованием платы Arduino переработаны, рассмотрены и другие микроконтроллеры.

Прочитав книгу, Вы сможете:

  • Открыть для себя новый удивительный мир, извлекая уроки из удачных и неудачных экспериментов с электронными компонентами.
  • Создать дома рабочее место, удобное для выполнения проектов и оснащенное приборами и инструментами.
  • Узнать больше об основных электронных компонентах и функциях, которые они выполняют в электрической цепи.
  • За считанные часы сделать охранную сигнализацию, елочные огни, электронные украшения, игру-викторину, устройство преобразования звука, тестер измерения скорости реакции человека и кодовый замок.
  • Получить ясное, доступное для понимания объяснение того, что вы делаете и зачем..

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

Первым проектом Чарльза Платта был телефонный автоответчик, который он сделал в возрасте 15 лет. Впоследствии он был писателем-фантастом, преподавал компьютерную графику и работал ведущим автором в журнале Wired, но всю жизнь сохранял свою любовь к электронике — главному хобби своей жизни. В настоящее время Чарльз работает редактором в журнале MAKE и занимается разработкой новых образцов медицинского оборудования. По его словам, у вас в руках “книга, которую я хотел бы прочитать, будучи подростком”