Краткий обзор книги “Distributed System, 3rd Edition”
Книги Таненбаума мне всегда нравились своим тонким юмором и немного занудной академической подачей материала:) Недавно я после трех месяцев чтения наконец-то дочитал третье издание “Distributed Systems”, которую Эндрю Таненбаум написал вместе с Мартеном ван Стином. Поэтому я не мог не написать краткий обзор этой книги:)
Стоит начать с того, что электронная версия оригинальной книги доступна на сайте книги и каждый желающий может получить себе версию. Также есть русское издание, что в теории хорошо … а на практике нет, так как слишком много ошибок в переводе, которые заставляют перепроверять написанное в оригинале:)
Книга содержит порядка шестисот страниц, разделенных на девять частей, которые приведены ниже
Введение начинается с того, что авторы дают определение распределенной системы (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х годов.
И дальше отдельно рассматривают 2 ключевые характеристики:
collection of autonomous computing elements
— здесь важно то, как эти элементы взаимодействуют между собой и шарят состояниеsingle coherent system
— здесь важно, что система выглядит единой для пользователей
Зачастую для помощи в разработке распределенных систем используют middleware, обычно это выглядит примерно как на рисунке ниже.
Обычно middleware берет на себя часть вопросов, например, communication
, transactions
, service composition
и reliability
.
Дальше рассматриваются цели проектирования распределенных систем, которые должны присутствовать, чтобы имело смысл прилагать усилия для их построения.
Первая цель — это совместное использование ресурсов, которое позволяет более экономически эффективно их использовать, а также совместно работать людям на расстоянии (мессенджеры, телеконференции, программы для совместной работы).
Вторая цель — это сокрытие того факта, что система состоит из большого количества взаимодействующих процессов. Вообще, есть разные виды transparency
, которые приведены на рисунке ниже. Правда степень transparency
может отличаться.
Следующей целью является открытость системы, которая означает, что компоненты системы должно быть просто использовать и интегрировать в другие системы. Для этого компоненты системы должны придерживаться общих правил, которые описывают синтаксис и семантику того, что могут предложить эти компоненты. Общий подход в том, чтобы определять сервисы через интерфейсы с использованием IDL
(Interface Definition Language
). Характеристиками открытости перечислены ниже
Следующий важный принцип, способствующий открытости — отделение механизма от политики (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
). Причем существуют следующие размерности масштабирования системы
При размышлении про size scalability
обычно думают про
Также для анализа capacity
сервиса можно вспомнить теорию массового обслуживания. Представим, что у нас система как показано на рисунке ниже: запросы попадают в очередь, откуда потом они забираются в обработку и дальше возвращается результат. Время ожидания этого результата связано с загрузкой сервиса при помощи формулы Литтла: R = 1/(1-U)
. Это приводит к тому, что при стремлении загрузки к 100% время ожидания стремится к бесконечности. Наверное многие из читателей знакомы с таким эффектом:)
Географическая масштабируемость обусловлена изменением скорости взаимодействия компонентов системы при наличии между ними большого расстояния. А скорость взаимодействия критически важна в синхронных коммуникациях.
И самый интересный вопрос — это административная масштабируемость, в которой решается вопрос как распределить distributed system
по нескольким независимым административным доменам, решая вопросы использования ресурсов, менеджмента и безопасности.
Для масштабирования применяются различные техники, приведенные на рисунке ниже
Дальше приводится список Peter Deutsch с интересным списком ложных предположений, которые многие делают, когда впервые разрабатывают распределенные приложения
Ну и напоследок во введении автор приводит свою классификацию типов распределенных систем и проходится по каждой, чтобы подсветить ее особенности и границы применимости.
На этом заканчивается содержание первой главы книги. Первая глава дает отличное представление о дальнейшем содержании книги, которое еще интереснее. Но рассказать о нем кратко в этом обзоре не получится, поэтому я рекомендую читать эту книгу самому и лучше всего на английском языке.