Рецензии на прочитанные книги: 27-ой десяток

14 февраля 2022

Пришло время для рецензий на очередные десять книг. Я решил немного отдохнуть от электроники и радио. Поэтому книги в этот раз будут об операционных системах, СУБД, алгоритмах, и всяком таком. Как обычно, предыдущие мои рецензии вы найдете по тэгу «Литература».

Database Internals: A Deep Dive into How Distributed Data Systems WorkDatabase Internals: A Deep Dive into How Distributed Data Systems Work
Alex Petrov

Книга 2019-го года на 300 страниц. Классификация современных СУБД, обзор использованных в них алгоритмов и структур данных, а также принятых дизайнерских решений и компромиссов. Из книги вы узнаете, как работают LSM-деревья и различные вариации B-деревьев (B*-деревья, FD-деревья, BW-деревья, и прочие), зачем нужны WAL и MVCC, в чем отличие линеаризуемости от sequential consistency, а также что такое 2PC, Paxos, Raft, PACELC и CRDT. Своего рода конспект самого главного, что нужно знать о современных базах данных. Для более глубокого изучения приводятся ссылки на соответствующие публикации.

Database Internals чем-то напомнила мне Designing Data-Intensive Applications («книгу с кабанчиком»), написанную Martin Kleppmann. Только Martin пишет про разработку бэкендов и распределенных систем, а Alex — про базы данных. Книга понравилась, рекомендую.

Дополнение: BW-деревья наглядно объясняются в лекции OLTP Indexes [Part I] (CMU Databases / Spring 2020). См также пейпер Building a Bw-Tree Takes More Than Just Buzz Words [PDF], в котором показано, что BW-деревья проигрывают простым B+деревьям.

Effective C: An Introduction to Professional C ProgrammingEffective C: An Introduction to Professional C Programming
Robert Seacord

Учебник по языку C, написанный специалистом по стандарту языка C. В том числе, речь идет о новых стандартах C17 и C2x. Книга в первую очередь интересна объяснением нетривиальных ошибок. Например, немногие программисты заметят ошибку в коде #define ABS(x) ((x) < 0 ? -(x) : (x)). Также немногие знают, что в C зарезервированы все макросы и ключевые слова, начинающиеся с подчеркивания, за которым следует большая буква. Как следствие, программа, использующая переменную или макрос с именем _Hello, в будущем может перестать компилироваться. Профессиональным разработчикам на C книгу определенно следует прочитать. Как учебник по языку C ее можно рекомендовать, только если вы уже разрабатываете на каком-то другом языке.

The Internals of PostgreSQLThe Internals of PostgreSQL
Hironobu Suzuki

Бесплатная онлайн-книга о внутреннем устройстве PostgreSQL.

Из нее вы узнаете, что такое OID, TID, LSN и relfilenode, для чего нужны free space map, visibility map и как работает buffer manager. В книге также описаны физический формат страниц и кортежей, что такое HOT и pruning, какие бывают фоновые процессы (background writer, checkpointer, logger, …) и что они делают. Еще вы узнаете, как пользоваться pg_freespacemap и pageinspect.

Книга отлично подойдет как опытным пользователям PostgreSQL, так и начинающим контрибьюторам.

The Linux Kernel Module Programming GuideThe Linux Kernel Module Programming Guide
Peter Jay Salzman, Michael Burian, Ori Pomerantz, Bob Mottram, Jim Huang

Бесплатная онлайн-книга о разработке модулей ядра Linux. Вы узнаете, в чем отличие block device от character device, как запустить kthread и какие есть примитивы для их синхронизации, как помигать светодиодом, зачем нужны tasklets, work queues и как написать обработчик прерывания, а также что в ядре Linux есть готовые реализации AES и SHA256.

Книга написана хорошо, читается лего и интересно, но слегка сыровата. В коде были найдены баги, а также неточности уровня что все системные вызовы работают через int 0x80, что неверно.

Linux Driver Development with Raspberry Pi --- Practical LabsLinux Driver Development with Raspberry Pi
Alberto Liberal

Здесь приводится примеры модулей ядра Linux с объяснением используемых ими интерфейсов, подробными комментариями к коду и демонстрацией работы. Предполагается, что вы уже знаете, что такое GPIO и I2C, и чем виртуальная память отличается от физической. Все примеры протестированы на Raspberry Pi 3 Model B / 3 Model B+ / 4 Model B на базе Broadcom BCM2837 / BCM2711 и TLS-версии ядра 5.4. Поддержка последнего прекратится в декабре 2025.

Субъективно, примеры могли бы быть лучше. Классический пример создания символьного устройства создает его, но не позволяет ничего прочитать или записать из/в него. Плюс к этому, дается много информации, которая избыточна для начинающих. Так, код первого модуля ядра приводится только на 63-ей странице, после подробного объяснения Device Tree Specification и того, что делает бутлоадер. Есть и другие минусы. Для повторения некоторых примеров помимо малинки требуется довольно эзотерическое железо, типа отладочной платы Curiosity PIC32MX470. Почему бы не использовать что-то более общедоступное и понятное, вроде ЖКИ 1602 и Arduino, осталось для меня загадкой.

Примеры к книге доступны на GitHub.

Linux Kernel TeachingLinux Kernel Teaching

Еще одна бесплатная онлайн-книга. Представляет собой сборник лекций, состоящий из двух частей. Первая часть посвящена теории операционных систем в целом, вторая часть — разработке модулей ядра Linux.

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

Systems Performance: Enterprise and the Cloud, Second EditionSystems Performance: Enterprise and the Cloud, Second Edition
Brendan Gregg

«Systems Performance: Enterprise and the Cloud» — одна из лучших книг, которые я когда-либо читал. Узнав, что в декабре 2020-го года вышло второе издание, я поспешил с ним ознакомиться.

Упор во втором издании делается на Linux, как на что-то, чем пользуются большинство людей, и с чем работает сам Brendan. Особое внимание уделяется виртуализации, облакам, а также контейнерам, не исключая Docker и Kubernetes. Вы узнаете, как читать вывод всяких vmstat и iostat, что такое tracepoints, kprobes, uprobes и USDT, как пользоваться perf, BPF / bcc-tools, bpftrace и ftrace, а также про такие инструменты, как LTTng и Performance Co-Pilot. Большая часть материала посвящена внутреннему устройству Linux и доступным ручкам для его тюнинга. Также из книги вы узнаете, как работают современные жесткие диски и прочее железо.

Книгу решительно одобряю.

BPF Performance ToolsBPF Performance Tools
Brendan Gregg

Чуть более ранняя книга (2019 год) того же автора. На нее идет много отсылок из второго издания «Systems Performance: Enterprise and the Cloud».

Книга всецело посвящена BPF, BCC, bcc-tools и bpftrace. Для меня особый интерес представлял последний. Фактически, это полноценный аналог DTrace для Linux. В книге вы найдете подробное описание синтаксиса bpftrace, а также немало примеров как однострочников, так и сравнительно больших скриптов на нем.

Algorithmic Thinking: A Problem-Based IntroductionAlgorithmic Thinking: A Problem-Based Introduction
Daniel Zingaro

Относительно новая книжка (2021 год) об алгоритмах и структурах данных, а также их реализации на языке C. Списки, деревья поиска, хэш-таблицы, min- и max-кучи, алгоритмы сортировки, алгоритмы на графах, а также менее широко известные вещи, такие как treaps, segment trees и union-find. Алгоритмы описываются не просто так, а в контексте небольших задачек, вроде тех, что дают на собеседованиях.

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

Здесь вы не найдете реализацию AVL-деревьев или RB-деревьев. Skip-lists, структуры данных на диске, фильтр Блума, алгоритмы работы с большими числами, алгоритм A*, нейронные сети и генетические алгоритмы не упоминаются в принципе. Это определенно не учебник по алгоритмам. Скорее, туториал по решению алгоритмических задач на конкретных примерах.

TLS MasteryTLS Mastery
Michael Lucas

Небольшая книга про TLS от автора «Absolute FreeBSD», «SSH Mastery», и других книг. Позиционируется, как все, что нужно знать сисадмину про TLS. Из «TLS Mastery» вы узнаете, чем TLS 1.2 отличается от TLS 1.3, чем DV-сертификат отличается от OV- и EV-сертификатов, как перекодировать сертификат между форматами PEM и DER, как работать с PKCS12-архивами при помощи утилиты openssl, как отлаживать проблемы с TLS при помощи openssl s_client, как настроить Dehydrated (ACME-клиент, аналогичный Certbot), как работают HSTS и CAA-записи, и всякое такое.

Книга понравилась. «TLS Mastery» не повредит прочитать, даже если вы совсем немного работаете с TLS. Например, используете его для своего бложика или почтового сервера на VDS.

 

На сегодня это все. Следующие десять книг, которые я планирую прочитать, снова будут о радио и электронике. Следите за обновлениями.

Дополнение: Рецензии на прочитанные книги: 28-ой десяток

Метки: .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.