, Распределённые системы для практиков.

Распределённые системы для практиков.

Даймос Раптис

 Состав исполнителей

Автор
Даймос Раптис

 Об авторе

Даймос является инженером- программистом, обладающим опытом проектирования, создания и эксплуатации крупномасштабных распределённых систем. Его первое знакомство с распределённым системами произошло во время его пребывания в Амазон, в то время как ему теперь посчастливилось и у него появилась возможность создавать программное обеспечение для одной из наиболее широко применяемых платформ учёта регистраций под названием Corda. Он является автором данной книги, которая стремится простым и доступным способом пояснить основные понятия, протоколы и алгоритмы вокруг распределённых систем.

 Содержание

Введение
Вступление
Для кого эта книга
Благодарности
Часть I: Основополагающие положения
Глава 1. Предисловие
Что представляют из себя распределённые системы и зачем они нам нужны
Основные заблуждения распределённых вычислений
Почему трудны распределённые системы
Верность в распределённых системах
Модели систем
Рассказ о семантике единственного применения
Отказ в мире распределённых систем
Системы с сохранением состояния и без оного
Глава 2. Основные понятия и теоремы
Разбиение на разделы
Алгоритмы горизонтального разбиения на разделы
Репликация
Репликация с единственным хозяином
Репликация со множеством хозяев
Кворумы в распределённых системах
Обеспечение безопасности в распределённых системах
Транзакции ACID
Теорема CAP
Модели согласованности
Уровни изоляции
Согласованность и изоляция - Отличия и сходства
Зачем все эти формальности
Часть II: Распределённые транзакции и консенсус
Глава 3. Распределённые транзакции
Что представляют из себя распределённые транзакции
Достижение изоляции
Двухфазная блокировка (2PL)
Изоляция моментального снимка посредством MVCC
Достижение атомарности
Двухфазная фиксация (2PC)
Трёхфазная фиксация (3PC)
Протокол фиксации на основе кворума
Как всё это подгоняется друг к другу
Транзакции с длительным временем жизни и Саги
Глава 4. Консенсус
Определение консенсуса
Некие образцы консенсуса
Недостижимость FLP
Алгоритм Паксос
Запутанность Паксос
Паксос на практике
Реплицируемые конечные автоматы через консенсус
Распределённые транзакции посредством консенсуса
Рафт
Стая на плечах гигантов
Часть III: Время и очерёдность
Глава 5. Время
В чём отличие распределённых систем
С практической точки зрения
С теоретической точки зрения
Логические часы
Глава 6. Очерёдность
Общая и частичная упорядоченность
Собственно понятие обусловленности
Часы Лампорта
Векторные часы
Векторы версий и разделяемые точкой версии веторов
Распределённые моментальные снимки
Физическое и логическое время: заключительные соображения
Часть IV: От теории к практике
Глава 7. Примеры для изучения
Распределённые файловые системы (HDFS/ GFS)
Распределённые системы координации (Zookeeper/ Chubby/ etcd)
Распределённые хранилища данных
BigTable/ HBase
Cassandra
Spanner
FaunaDB
Распределённые системы обмена сообщениями (Kafka)
Распределённое управление кластерами (Kubernetes)
Распределённый журнал регистрации (Corda)
Распределённые системы обработки данных
MapReduce
Apache Spark
Apache Flink
Глава 8. Практические приёмы и шаблоны
Шаблоны взаимодействия
Шаблоны координации
Синхронизация данных
Ничего не разделяющие архитектуры
Распределённые блокировки
Шаблоны совместимости
Ведение дел с отказами
Распределённое отслеживание
Глава 9. Заключительные соображения
Заключительные соображения
Ссылки

 Вступление

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

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

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

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

  • постулировании самых основных положений относительно распределённых систем

  • пояснением того, чего возможно, а чего нет достичь

  • объяснении всех основных алгоритмов и протоколов, предоставляя простые для следования им примеры и схемы

  • описанием стоящим за некоторыми решениям проектирования соображений

  • расширением на то как это можно применять на практике и в чём состоят некоторые из проблем, которые могут возникать при осуществлении таким образом

  • избавлением от путаницы вокруг ряда терминов (то есть, непротиворечивости) и поощрению к размышлению о компромиссах при разработке распределённых систем

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

 Для кого эта книга

Данная книга нацелена на инженеров программного обеспечения, которые обладают неким опытом в построении программных систем и не обладают вовсе или имеют лишь небольшой опыт в распределённых системах. Мы не предполагаем никаких знаний относительно понятий и алгоритмов распределённых систем. Эта книга пытается постепенно вводить необходимые термины и пояснять соответствующие основные алгоритмы простейшим возможным способом, предоставляя много схем и примеров. В результате, эта книга может оказаться полезной и тому персоналу, который не разрабатывает программное обеспечение, однако желает получить представление в области распределённых систем. Тем не менее, данная книга не имеет целью предоставить полный анализ или доказательство каждого отдельного алгоритма.Вместо этого наша книга стремится помочь своему читателю получить те интуитивные представления, которые стоят за неким понятием или алгоритмом, в то же время предоставляя необходимые ссылки на первоначальные статьи с тем, чтобы читатель имел возможность более глубоко изучать прочие представляющие его интерес вопросы.

 Благодарности

Как и любая прочая книга, эта книга могла бы быть написана одним человеком, но это было бы невозможно без участия многих других. В результате стоит отдать должное всем моим предыдущим работодателям и коллегам, которые предоставили мне возможность для работы в крупномасштабных распределённых системах и оценить как их возможности и сложности, так и само сообщество распределённых систем, которое всегда было открыто для ответов на любые вопросы. Я также хотел бы поблагодарить Ричарда ГендалаБрауна за обзор тематического исследования Corda, а также за отзывы, которые были очень полезными и способствовали мне внесению ясности и устранению двусмысленности. Естественно, эта книга была бы невозможна без понимания и поддержки моей спутницы по жизни, Марии.

l>