Пришло время для рецензий на очередные десять книг. Я решил немного отдохнуть от электроники и радио. Поэтому книги в этот раз будут об операционных системах, СУБД, алгоритмах, и всяком таком. Как обычно, предыдущие мои рецензии вы найдете по тэгу «Литература» .
Database 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 Programming
Robert Seacord
Учебник по языку C, написанный специалистом по стандарту языка C. В том числе, речь идет о новых стандартах C17 и C2x. Книга в первую очередь интересна объяснением нетривиальных ошибок. Например, немногие программисты заметят ошибку в коде #define ABS(x) ((x) < 0 ? -(x) : (x))
. Также немногие знают, что в C зарезервированы все макросы и ключевые слова, начинающиеся с подчеркивания, за которым следует большая буква. Как следствие, программа, использующая переменную или макрос с именем _Hello, в будущем может перестать компилироваться. Профессиональным разработчикам на C книгу определенно следует прочитать. Как учебник по языку C ее можно рекомендовать, только если вы уже разрабатываете на каком-то другом языке.
The 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 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 0 x 80, что неверно .
Linux 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 Teaching
Еще одна бесплатная онлайн-книга . Представляет собой сборник лекций, состоящий из двух частей. Первая часть посвящена теории операционных систем в целом, вторая часть — разработке модулей ядра Linux.
Помимо прочего, здесь вы найдете всю необходимую информацию для написания своей файловой системы или реализации простого сетевого протокола, похожего на UDP. Все четко и по делу, без лишней воды. Книга очень понравилась.
Systems 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 Tools
Brendan Gregg
Чуть более ранняя книга (2019 год) того же автора. На нее идет много отсылок из второго издания «Systems Performance: Enterprise and the Cloud».
Книга всецело посвящена BPF, BCC, bcc-tools и bpftrace. Для меня особый интерес представлял последний. Фактически, это полноценный аналог DTrace для Linux. В книге вы найдете подробное описание синтаксиса bpftrace, а также немало примеров как однострочников, так и сравнительно больших скриптов на нем.
Algorithmic Thinking: A Problem-Based Introduction
Daniel Zingaro
Относительно новая книжка (2021 год) об алгоритмах и структурах данных, а также их реализации на языке C. Списки, деревья поиска, хэш-таблицы , min- и max-кучи, алгоритмы сортировки, алгоритмы на графах, а также менее широко известные вещи, такие как treaps, segment trees и union-find. Алгоритмы описываются не просто так, а в контексте небольших задачек, вроде тех, что дают на собеседованиях.
Из книги вы узнаете, что рекурсия с мемоизацией и динамическое программирование примерно эквиваленты. Динамическое программирование начинает с решения простых задач и находит решение конкретной, более сложной, задачи по принципу снизу вверх, как правило, в императивном стиле (на циклах). Рекурсия с мемоизацией делает то же самое, только ищет решение по принципу сверху вниз, начиная с более сложной задачи, и как правило, декларативно (как в функциональном программировании). Автор пишет, что сам предпочитает рекурсию с мемоизацией, но в целом это дело вкуса.
Здесь вы не найдете реализацию AVL-деревьев или RB-деревьев. Skip-lists, структуры данных на диске, фильтр Блума, алгоритмы работы с большими числами , алгоритм A* , нейронные сети и генетические алгоритмы не упоминаются в принципе. Это определенно не учебник по алгоритмам. Скорее, туториал по решению алгоритмических задач на конкретных примерах.
TLS 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-ой десяток