Высоконагруженные приложения. Программирование, масштабирование, поддержка

Александр Шитик
Александр Шитик

Пишу свои посты и книги, делаю обзоры на фильмы и книги. Эксперт в области космологии и астрономии, IT, продуктивности и планирования.

Высоконагруженные приложения. Программирование, масштабирование, поддержка
Мартин Клеппман
Жанры: Программирование
Год издания: 2018
Год прочтения: 2020
Моя оценка: Наивысшая
Количество прочтений: 1
Количество страниц: 640
Конспект (страниц): 28
Первоначальный язык издания: Английский
Переводы на другие языки: Русский, Испанский, Китайский

Общее описание

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

Краткое изложение

Первая глава описывает такие термины, как сопровождаемость, масштабируемость и надёжность. Автор рассказывает, что это такое и почему это важно. Кстати, ещё со времён колледжа и университета помню, что это далеко не все характеристики, которыми должно обладать ПО.

Во второй главе автор описывает модели данных, а именно классические реляционные базы данных, документные и графовые. Пока ничего конкретного — просто особенности, преимущества и недостатки. Кстати, языки запросов здесь тоже рассмотрены (помимо SQL, автор даже привёл CSS в качестве примера декларативных языков).

Глава три. А вот тут уже начинаются немного более сложные и непривычные для повседневной работы среднестатистического разработчика вещи: B-деревья, SS-таблицы, LSM-деревья, хеш-индексы. Это несложно, но каждый день с этим напрямую не работаешь, и информация быстро вылетает из головы. В лучшем случае из объёма в 50 страниц книги остаётся всего пара мыслей. А вот что здесь упоминается из того, с чем я сталкиваюсь почти каждый день, так это работа с индексами и подсистемы хранения баз данных (на примере InnoDB и MyISAM).

Четвёртая глава посвящена форматам данных, которые используются при передаче. Здесь автору надо отдать должное — он не остановился на обзоре JSON и XML, а покрыл Thrift, Protocol Buffers, Avro. Описал он также и сами подходы к передаче данных, такие как REST и RPC. На этом, кстати, заканчивается первая часть — про основы информационных систем, и начинается другая часть — про распределённые системы.

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

Следующая глава — про секционирование. Тоже описано довольно неплохо. Отличие секционирования от репликации. Рассмотрены секционирование по диапазонам значений ключа, хеш-секционирование, маршрутизация запросов и балансировка нагрузки — это основные темы этой главы. Кстати, секционирование описано в общем виде, без привязки к какой-то технологии или базе, так что всё описанное вполне применимо и в других системах: в MongoDB, Elasticsearch и SolrCloud это называется «шард» (shard), в HBase — «регион» (region), в Bigtable — «сегмент» (tablet), в Cassandra и Riak — «виртуальный узел» (vnode).

Далее идёт глава про транзакции. Она тоже описана и раскрыта довольно неплохо. В основном большая часть главы крутится вокруг ACID, есть также информация про обработку ошибок и прерывание транзакций.

Завершающие две главы раздела посвящены ошибкам, сбоям и проблемам распределённых систем (например, таким как ненадёжность сети или рассинхронизация времени на разных устройствах — «ненадёжные часы»), а также согласованности и консенсусу (речь про линеаризуемость) и работе с распределёнными транзакциями.

Из трёх последующих глав (если не брать в расчёт сверхтеоретическую последнюю — о будущем информационных систем), стоит выделить главы про пакетную и потоковую обработку данных (собственно, так они и называются). Здесь речь идёт о Hadoop, MapReduce, брокерах сообщений. Правда, вся эта информация представлена слегка поверхностно.

Моё мнение

Теоретическая книга по программированию, очень детально раскрывающая такие термины, как типы баз данных, понятие транзакций, репликации, секционирование, проблемы высокой нагрузки и доступности распределённых систем, потоковая и пакетная обработка данных и — главное — какие инструменты и технологии существуют для решения проблем, связанных с этими подходами. Из-за большого объёма страниц её чтение кажется долгим и нудным. Но в целом, если изучение программирования — это собирание мозаики у себя в голове, где каждый пазл — это технология, подход или просто совет, то эта книга безусловно раскрывает большое количество таких пазлов. Так что, хоть книга и была большой и нудной, а конспект — очень огромным, я всё равно поставил ей достаточно высокую оценку.

Вверх