Высоко-нагруженные приложения. Мартин Клеппман
Высоко-нагруженные приложения [2025] Мартин Клеппман (Designing Data-Intensive Applications).
Отличная книга с кабанчиком
Почему-то многие считают эту книгу сложной и тягомотной, но мне она зашла. По ощущениям, это такой же базовый computer science, как Таненбаум и другие книги, которые читают в универе.
Через всю книгу красной нитью проходит простая идея: мир неидеален, ошибки могут возникать везде. Чем больше система, тем больше в ней частей, которые могут сломаться. Хороший инженер должен уметь строить надёжные системы из ненадёжных компонентов и понимать, на какие компромиссы приходится идти при разработке.
Также важно понимать, какие гарантии даёт система: какую надёжность обеспечивает, как масштабируется и под какие сценарии использования проектируется.
После прочтения книги я совсем не завидую разработчикам распределённых систем. Даже в рамках одного процесса хватает проблем с потоками, синхронизацией и отказоустойчивостью. Сложность вырастает на порядок, когда узлов много, они разбросаны по разным ЦОДам и между ними ненадёжная сеть.
В книге затронуты базовые темы распределённых систем: репликация, секционирование, транзакции, проблема часов, согласованность, консенсус, пакетная и потоковая обработка данных.
Пакетная и потоковая обработка встречаются повсеместно. По сути, любое современное приложение так или иначе занимается обработкой данных. Среди остального я встречал на практике транзакции и проблема часов. Про консенсус книга рассказывает скорее обзорно. Чтобы глубоко разобраться в теме, нужно читать дополнительную литературу. Разработку алгоритмов достижения согласия в условиях, где всё может пойти не так, среднестатистический программист не вывезет.
Для расширения кругозора и прокачки инженерной базы книгу стоит прочитать.