Краткий обзор книги “Distributed System, 3rd Edition”

Alexander Polomodov
5 min readMay 20, 2022

Книги Таненбаума мне всегда нравились своим тонким юмором и немного занудной академической подачей материала:) Недавно я после трех месяцев чтения наконец-то дочитал третье издание “Distributed Systems”, которую Эндрю Таненбаум написал вместе с Мартеном ван Стином. Поэтому я не мог не написать краткий обзор этой книги:)

Рис.1 “Титульная страница книги”

Стоит начать с того, что электронная версия оригинальной книги доступна на сайте книги и каждый желающий может получить себе версию. Также есть русское издание, что в теории хорошо … а на практике нет, так как слишком много ошибок в переводе, которые заставляют перепроверять написанное в оригинале:)

Книга содержит порядка шестисот страниц, разделенных на девять частей, которые приведены ниже

Рис.2 “Содержание книги”

Введение начинается с того, что авторы дают определение распределенной системы (distributed system)

A distributed system is a collection of autonomous computing elements that appears to its users as a single coherent system.

Они говорят о том, что для развития распределенных систем потребовалось реализация двух предпосылок:

Development of powerful microprocessors
Invention of high-speed computer networks

Что и произошло в районе 1980х годов.

Рис.3 “Inventions that made distributed systems possible”

И дальше отдельно рассматривают 2 ключевые характеристики:

  • collection of autonomous computing elements — здесь важно то, как эти элементы взаимодействуют между собой и шарят состояние
  • single coherent system — здесь важно, что система выглядит единой для пользователей
Рис.4 “What is a distributed system?”

Зачастую для помощи в разработке распределенных систем используют middleware, обычно это выглядит примерно как на рисунке ниже.

Рис.5 “A distributed system organized in a middleware layer, which extends over multiple machines, offering each application the same interface.”

Обычно middleware берет на себя часть вопросов, например, communication, transactions, service composition и reliability.

Рис.6 “Examples of middleware services”

Дальше рассматриваются цели проектирования распределенных систем, которые должны присутствовать, чтобы имело смысл прилагать усилия для их построения.

Рис.7 “Design goals”

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

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

Рис.8 “Types of transparency”

Следующей целью является открытость системы, которая означает, что компоненты системы должно быть просто использовать и интегрировать в другие системы. Для этого компоненты системы должны придерживаться общих правил, которые описывают синтаксис и семантику того, что могут предложить эти компоненты. Общий подход в том, чтобы определять сервисы через интерфейсы с использованием IDL (Interface Definition Language). Характеристиками открытости перечислены ниже

Рис.9 “Being open characteristics”

Следующий важный принцип, способствующий открытости — отделение механизма от политики (separating policy from mechanism).

To achieve flexibility in open distributed systems, it is crucial that the system be organized as a collection of relatively small and easily replaceable or adaptable components. This implies that we should provide definitions of not only the highest-level interfaces, that is, those seen by users and applications, but also definitions for interfaces to internal parts of the system and describe how those parts interact.

Последняя цель в том, чтобы система была масштабируемой (being scalable). Причем существуют следующие размерности масштабирования системы

Рис.10 “Dimensions of scalability”

При размышлении про size scalability обычно думают про

Рис.11 “Size scalability”

Также для анализа capacity сервиса можно вспомнить теорию массового обслуживания. Представим, что у нас система как показано на рисунке ниже: запросы попадают в очередь, откуда потом они забираются в обработку и дальше возвращается результат. Время ожидания этого результата связано с загрузкой сервиса при помощи формулы Литтла: R = 1/(1-U). Это приводит к тому, что при стремлении загрузки к 100% время ожидания стремится к бесконечности. Наверное многие из читателей знакомы с таким эффектом:)

Рис.12 “Analyzing service capacity”

Географическая масштабируемость обусловлена изменением скорости взаимодействия компонентов системы при наличии между ними большого расстояния. А скорость взаимодействия критически важна в синхронных коммуникациях.

И самый интересный вопрос — это административная масштабируемость, в которой решается вопрос как распределить distributed system по нескольким независимым административным доменам, решая вопросы использования ресурсов, менеджмента и безопасности.

Для масштабирования применяются различные техники, приведенные на рисунке ниже

Рис.13 “Scaling techniques”

Дальше приводится список Peter Deutsch с интересным списком ложных предположений, которые многие делают, когда впервые разрабатывают распределенные приложения

Рис.14 “Network pitfalls”

Ну и напоследок во введении автор приводит свою классификацию типов распределенных систем и проходится по каждой, чтобы подсветить ее особенности и границы применимости.

Рис.15 “Types of distributed systems”

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

--

--

Technical Director @ Tinkoff, Department of client interfaces, marketing and engagement.