Книги для инфраструктурного инженера, часть 1 - hard skills
Должен признаться – я люблю книги. Сейчас это не модно, потому, что книги отнимают очень много времени для прочтения, а результативность под вопросом. Ту же самую информацию можно получить в Google за 5 минут поиска. Тем не менее я считаю пользу книг сильно недооцененной. Поиск в Google дает ответ на очень узкий конкретный вопрос (и ответ, часто, не оптимальный, а может и вовсе неверный). Хорошая, качественная книга дает обзор проблемы с разных точек зрения и показывает, как части связываются в единое целое.
В этой статье я собрал лучшие (на мой взгляд) книги для хорошего инфраструктурного инженера (cloud engineer, system administrator, devops, site reliability engineer, как вам больше нравится). Топ получился больше, чем я планировал, потому он разделен на 2 части. В первой части будут книги по техническим знаниям, во второй - по нетехническим, но все равно важным. Я специально отсортировал книги по алфавиту по имени автора, чтобы снизить предвзятость своей оценки.
Должен добавить, что я верю в эффект Линди и потому не удивляйтесь, что здесь есть сравнительно не новые книги. Шанс того, что не прошедшая испытание временем книга окажется хорошей, по моему мнению - невысок.
Итак, топ-10 книг для инфраструктурного инженера, hard skills:
Beyer, Jones, Petoff, Murphy - Site reliability engineering
Прекрасный экскурс в то, как работает инфраструктура в действительно больших проектах (на примере Google). Именно с этой книги началось понятие SRE за пределами Google. Авторы рассказывают, как в Google принимаются те или иные решения (на основе метрик), почему нельзя сделать 100% надежную систему (это слишком дорого), как решить, когда остановится (посчитать деньги), как проектировать систему с заданным уровнем надежности… Даже, если ваша инфраструктура намного меньше, чем у Google - вы найдете что-то полезное для себя. Принципы построения инфраструктур, описанных в этой книге - универсальны.
Bovet - Understanding linux kernel
Подавляющее большинство систем, с которыми работает операционный инженер базируется на Linux. Эта книга – наверное, самый полный и подробный справочник по устройству ядра и взаимодействию kernel space - user space. Книга очень большая, но на удивление легко читается. Не менее классический труд Роберта Лава больше ориентирован на разработку и читается не в пример тяжлее. Понимание того, как в целом работает ядро – критически важно для решения проблем с производительностью. Без знания того, как (и что) там тикает внутри – проблемы производительности придется решать или “заливкой деньгами” (классический шаблон стартапов, за который они теперь вынуждены платить) или магическими рецептами, которые могут и не помочь. А могут даже повредить.
Felleisen, Findler, Flatt, Krishnamurthi - How to design programs
Нравится нам это или нет - но современному инфраструктурному инженеру приходится писать код. В основном - инструменты для автоматизации своего труда. Подавляющее большинство из нас пишет код отвратительно, потому, что мы не были профессиональными программистами и просто не знаем, как правильно писать надежный и поддерживаемый код. Эта книга - классический учебник от MIT по проектированию программ. Книга весьма не новая и в качестве иллюстрации использует экзотический язык Racket (это такой Lisp, который хорошо кушал), однако важно не это. Книга очень подробно проводит по всем этапам проектирования программы, начиная от сбора требований и выбора алгоритмов до написания кода и подходов к его поддержки. В отличие от не менее известного SICP (Abelson et al) - эта книга старается использовать максимально инженерный подход с минимумом эзотерики и “просто поверьте на слово”. Из всего списка выше она выглядит самой бесполезной (и, наверное, самой сложной), но это книга, которая стоит прочтения.
Gregg - System performance
Безусловно лучшая книга по производительности UNIX-систем с точки зрения системы. Эта книга рассматривает производительность программы как данность и помогает понять, как измерить и “изогнуть” систему под конкретные задачи. Написана человеком, который занимается производительностью в Linux уже лет 20 и был ведущим инженером в Netflix. Абсолютно точно стоит прочитать после SRE Book, чтобы понять - как измерять производительность и что может на нее повлиять (а повлиять может многое и подчас довольно неожиданное).
Goralski - The illustrated network
Солидный 800-страничный кирпич про устройство сети. Сети рассматриваются с точки зрения стека TCP/IP, ибо победил он с разгромным счетом и не-IP сети сейчас очень большая редкость. Это очень подробное описание принципов, алгоритмов и протоколов сети, начиная с L2 и заканчивая QoS и высокоуровневой маршрутизаций. Обязательна для прочтения сетевыми инженерам (начиная от претендующих на сертификаты с буквой P в названии), но обычному инфраструктурному инженеру тоже вреда не принесет. Как минимум - это поможет в выборе между TCP и UDP и отучит защищаться от DDoS, блокируя адреса на iptables по одному
Humble - Continuous delivery
Полный, подробный справочник по DevOps. В отличие от попсового “проекта Феникс” и “руководства по DevOps” Кима - эта книга написана не для стратегов-менеджеров, а для тех инженеров, которым все это реализовывать “на земле”. Книга подробно описывает, откуда взялась идея DevOps, какую проблему она решает (нет, не любую) и какие там есть ограничения. Не смотря на то, что книга весьма немолода - концепции в ней описаны универсальные. Абсолютно точно необходима DevOps-ам, остальным - для расширения кругозора.
Kleppman - Design of data-intensive apps
Книга “с кабанчиком” известна, наверное, всем. Мало кто ее читал, но все про нее слышали. Это книга из той редкой породы, что выходят раз в десятилетие. Контент - плотное погружение во все основные технологии, что лежат в основе современного высокопроизводительного ПО для обработки данных. Алгоритмы хранения информации (сжатие с потерями и без), поиска (поисковые деревья разных видов), записи данных, поиска консенсуса в гетерогенных системах, защиты от сбоя. Почти тысяча страниц концентрированной информации. Проглотить этот кирпич одним махом невозможно, но это без шуток - настольная книга для любого, кто работает с большими объемами данных. Инфраструктурный инженер должен понимать, какие примитивы лежат в основе систем, с которыми он работает
Schneier - Applied cryptography
Сравнительно короткий и сравнительно простой обзор криптографии. Криптография очень сложная область сама по себе, так что не стоит ждать экспертности после прочтения. Эта книга кратко описывает понятия, которые там вообще есть - виды шифрования (блочное, поточное), виды ключей (симметричные и ассиметричные). Главная мысль книги - никогда не изобретать крипто примитивы самому. Есть миллион способов сделать маленькую сложно уловимую ошибку, которая сделает шифр легковскрываемым, а значит - бессмысленным. Бонусом книга поможет выбрать криптографическое решение для конкретной ситуации и научит оценивать риски. Книга прекрасно подходит для понимания границ незнания в вопросах защиты информации, а заодно приоткрывает процесс дизайна криптографических решений.
Tannenbaum - Structured computer organization
В русском переводе эта книга известна как “Архитектура компьютера” и издавали ее в издательстве Питер, серия Classic computer science. Если Клеппман - это экскурс в алгоритмы и технологии обработки данных, то Танненбаум - это экскурс в устройство компьютеров в целом - микроархитектуры, их виды и влияние на производительность, устройство памяти разных видов, шины и подключение устройств… Фактически эта книга - конспект лекций, которые профессор Таненбаум читает в университете Амстердама (до сих пор, кстати, читает). Книга имеет какой-то сумасшедший для столь узкой сферы тираж и пережила уже 6 переизданий (первая редакция вышла аж 1976 году). Не смотря на то, что считается слегка устаревшей (самое свежее издание - 2012 года) - принципы и концепции остались те же. Книгу точно стоит прочитать - как минимум для общего понимания ландшафта.
Tsoukalos - Mastering go
Golang считается одним из самых популярных языков программирования в среде инфраструктурных инженеров (второе место - Python, Ruby и Perl влачат маргинальное существование). Компактная грамматика (2 страницы текста!), богатейший тулинг и стандартная библиотека, предельно удобная дистрибьюция сделали язык сверх-популярным в среде админов-автоматизаторов. Если How to design programs учит что писать, то эта книга на конкретных примерах показывает как. Она совсем не такая всеобъемлющая, как книга Кернигана, зато практически ориентирована. Книгу можно просто прочитать, как отдельный труд, а можно использовать как справочник при написании кода для конкретных задач
Заключение
Хорошая книга описывает базовые концепции, которые мало меняются со временем. Польза понимания базовых идей еще и в том, что их сравнительно мало, но конкретные реализации (коих много) - строятся на базовых концепциях. Понимание базы даст возможность не только понять, как конкретные кирпичики укладываются в общую картину, но и поможет в изучении новых идей и концепций - базовые принципы универсальны. Читайте книги.