23 Ноября 2021
Reading time: 2 min
Сегодня гостями нашей книжной рубрики "IT-библиотека HWdTech LLC" становятся Эндрю Таненбаум и Мартин ван Стеен со своей книгой “Распределенные системы. Принципы и парадигмы”. Мы вам покажем не только первое издание этой книги, которое есть у нас в библиотеке, но и расскажем о последнем, третьем, издании (а также подскажем, где его можно добыть). Опишем сразу две книги и расскажем, почему стоит почитать любую из них.
Пара слов об авторах
Итак, перед нами труд профессоров Амстердамского университета, в котором обсуждаются принципы и парадигмы распределенных систем. Эндрю Таненбаум получил степень бакалавра в MIT и докторскую степень в Калифорнийском университете в Беркли. Во время написания первого издания он возглавлял отделение вычислительной техники в Амстердамском свободном университете. Таненбаум выполнял свои исследования вместе с коллегой - Мартином ван Стееном, доцентом того же университета, доктором математики и философии. Их совместная книга издается уже порядка 20 лет, она стала классикой введения в распределенные системы.
Почему стоит прочитать?
Ценность книги состоит в том, что она содержит базовые алгоритмы, описывает основные элементы распределенных систем и задачи, которые приходится для них решать.
Одна из самых сложных задач в распределенных системах - это синхронизация времени отдельных узлов. Целая глава в этой книге посвящена данной проблеме (в новом издании она называется “Координация”). Представлен ряд алгоритмов, которые позволяют решать задачу синхронизации, все детально расписано, есть информация про физические и логические часы. Достаточно подробно авторы знакомят нас с отметками времени Лампорта. Это важно, потому что на основе этих временных отметок построено очень много алгоритмов синхронизации в современных системах. В том числе тех, которые используются в облачных решениях и в отказоустойчивых кластерах.
Для справки: Отказоустойчивость - это свойство системы при котором она сохраняет способность выполнять задачи, на которые она рассчитана, даже при выходе некоторых ее узлов из строя.
Кроме того, в книге рассматриваются способы обмена информацией между различными компонентами распределенной системы, в том числе, и очереди обмена сообщениями. Также решается задача именования компонентов распределенной системы, уделяется очень много внимания вопросам согласованности и отказоустойчивости. Здесь можно почитать про алгоритмы, которые находятся в основе всех современных систем хранения данных.
Актуальность
Алгоритмы, которые описаны в этой книге используются, к примеру, в таких системах как Apache Kafka, Apache Mesos, Google Cloud, Amazon Web Services, Microsoft Azure Cloud, CouchDB, Docker и т.д. Можно сказать, что если эта система популярна и она работает в кластере, то, наверняка, при ее разработке использованы идеи, описанные в данной книге. Если вы хотите улучшить свое понимание их внутренних процессов, то “Распределенные системы…” будут вам очень полезны.
Можно сказать, что первое издание 2003 года сегодня немного устарело (однако, на основные принципы это не повлияло), но достаточно недавно вышло обновленное издание, которое содержит дополнительную информацию, полученную в последние 20 лет со времен первого выпуска книги.
У нас в HWdTech LLC сейчас проводятся занятия на курсе по распределенным системам: материал этой книги значительно используется как база для курса.
Для кого эта книга?
По мнению авторов, книга предназначена для студентов старших курсов и дипломников по компьютерным дисциплинам. Вообще, ее можно рекомендовать всем программистам, потому что понимание распределенных систем важны для любого разработчика. Здорово, если вы изучите этот труд будучи студентом. Но, если вы уже выпустились, прочитать его не поздно: для вашего профессионального роста эти знания вам будут крайне полезны.
Личные впечатления
QUOTE
“Читал эту книгу давно, уже не будучи студентом, когда готовился к курсу “Распределенные системы”. Это было как раз в 2003 году. Книга очень сильно перевернула представление о том, как вообще взаимодействуют сложные системы. Важно, что здесь описано много вещей, которые интуитивно неочевидны. Можно долго думать над тем, что у вас в имеется баг, искать способы борьбы с ним, а потом обнаружить, что это естественное ограничение вашей системы и избежать его не получится, как ни крути. Считается, что опытный программист и так знает о таких вещах, а если не знает, то сообразит. Но в данном случае речь идет о контр-интуитивных, сложных вещах, о которых на практике не догадаешься, что вообще так может быть. Много знаний, которые невозможно просто так получить, если вам никто про них не расскажет. В целом, все это переворачивает представления о системах с ног на голову. Можно сравнить с тем, как человек, будучи ребенком, воспринимает мир идеальным: все углы прямые, все линии ровные и т.д. Вырастая, человек понимает, что в природе нет ничего ровного и прямого. Данная книга создает такое же ощущение в связи с распределенными системами. Оказывается, что это очень сложная, нетривиально устроенная вещь, но тем она и интереснее. Получить два одинаковых проекта очень сложно просто потому, что та предметная область, в которой взаимодействуют задачи, непосредственно влияет на складывающуюся архитектуру. Вердикт о книге: голову сносит будь здоров. Она для этого и нужна”, -
Где добыть
Первое издание данной книги вы, скорее всего, можете увидеть только в библиотеках, например, в нашей библиотеке HWdTech LLC она есть - приходите почитать! А вот третье, самое современное издание, продается в интернете и даже стоит недорого. Для примера вот вам ссылка (это не реклама, мы не призываем вас заказывать книгу по ссылке, но хотим показать, как она выглядит и к какой ценовой категории относится, надо сказать - очень недорогая книга для литературы такого класса).
Читайте также