Распределённые системы для практиков.
Copyright © 2020 Ruboss Technology Corporation
Опубликовано leanpub,
Ruboss Technology Corporation
1321 Blanshard Street
Suite 301
Victoria, British Columbia, Canada
V8W 0B6
|
Данный документ предоставляется по лицензии Creative Commons Attribution 3.0 License, за исключением разделов со специальными оговорками. |
Первая публикация на английском языке: Май 2020
Library of Congress Control Number: n/a
ISBN-13 n/a
ISBN-10 n/a
ASIN: B086551JHY
2020-06-10
Даймос является инженером- программистом, обладающим опытом проектирования, создания и эксплуатации крупномасштабных распределённых систем. Его первое знакомство с распределённым системами произошло во время его пребывания в Амазон, в то время как ему теперь посчастливилось и у него появилась возможность создавать программное обеспечение для одной из наиболее широко применяемых платформ учёта регистраций под названием Corda. Он является автором данной книги, которая стремится простым и доступным способом пояснить основные понятия, протоколы и алгоритмы вокруг распределённых систем.
- Введение
- Часть I: Основополагающие положения
- Глава 1. Предисловие
- Что представляют из себя распределённые системы и зачем они нам нужны
- Основные заблуждения распределённых вычислений
- Почему трудны распределённые системы
- Верность в распределённых системах
- Модели систем
- Рассказ о семантике единственного применения
- Отказ в мире распределённых систем
- Системы с сохранением состояния и без оного
- Глава 2. Основные понятия и теоремы
- Разбиение на разделы
- Алгоритмы горизонтального разбиения на разделы
- Репликация
- Репликация с единственным хозяином
- Репликация со множеством хозяев
- Кворумы в распределённых системах
- Обеспечение безопасности в распределённых системах
- Модели согласованности
- Уровни изоляции
- Согласованность и изоляция - Отличия и сходства
- Зачем все эти формальности
- Часть II: Распределённые транзакции и консенсус
- Глава 3. Распределённые транзакции
- Что представляют из себя распределённые транзакции
- Достижение изоляции
- Двухфазная блокировка (2PL)
- Изоляция моментального снимка посредством MVCC
- Достижение атомарности
- Двухфазная фиксация (2PC)
- Трёхфазная фиксация (3PC)
- Протокол фиксации на основе кворума
- Как всё это подгоняется друг к другу
- Транзакции с длительным временем жизни и Саги
- Глава 4. Консенсус
- Часть III: Время и очерёдность
- Часть IV: От теории к практике
- Глава 7. Примеры для изучения
- Распределённые файловые системы (HDFS/ GFS)
- Распределённые системы координации (Zookeeper/ Chubby/ etcd)
- Распределённые хранилища данных
- Распределённые системы обмена сообщениями (Kafka)
- Распределённое управление кластерами (Kubernetes)
- Распределённый журнал регистрации (Corda)
- Распределённые системы обработки данных
- Глава 8. Практические приёмы и шаблоны
- Глава 9. Заключительные соображения
- Ссылки
Распределённые системы становятся вездесущими в нашей повседневной жизни: начиная с того как мы взаимодействуем со своими друзьями, вплоть до того как мы совершаем свои покупки и многие прочие вещи в реальном масштабе времени. Это может быть порой прозрачными для нас, однако для удовлетворения наших потребностей многие компании применяют чрезвычайно сложные программные системы. Используя системы такого вида, компании имеют возможность значительных свершений, например, отправления сообщений друзьям, находящимся в тысяках миль за какие- нибудь миллисекунды, доставляя наши заказы несмотря на выход из строя центров обработки данных целиком или поиск по всему Интернету с обработкой более миллиона Терабайт сведений менее чем за секунду. Если рассматривать всё это в перспективе, легко осознать то значение, которое распределённые системы привносят в наш современный мир и зачем инженерам- программистам полезно разбираться в распределённых системах и применять их.
Тем не менее, насколько простым и увлекательным это не представлялось, область распределённых систем достаточно сложна во множестве разнообразных моделях исполнения и режимов отказов. В результате, просто для того чтобы разобраться с тем как применять библиотеку стороннего разработчика или проверить верность создаваемой распределённой системы вначале необходимо переварить огромный объём сведений. В последние десятилетия распределённые системы были и в самом деле достаточно горячей академической темой и был достигнут колоссальный прогресс, хотя, как правило, благодаря большому числу статей, обычно строящихся одна поверх другой. Это делает достаточно высоким входной порог для новичков и практиков, которые всего лишь желают разобраться с основными строительными блоками с тем, чтобы быть уверенными в выстраиваемых ими системах без каких бы то ни было потуг в изобретении новых алгоритмов или протоколов.
Окончательная цель данной книги заключается в том чтобы помочь таким людям в том чтобы приступить к работе с распределёнными системами простым и интуитивно понятным образом. Она родилась из посвящения меня этой теме, которое содержало множество переходов между волнением, растерянностью и просветлением.
Естественно, было бы невозможно затронуть все имеющиеся в области распределённых систем задачи. Итак, данная книга сосредоточится на:
-
постулировании самых основных положений относительно распределённых систем
-
пояснением того, чего возможно, а чего нет достичь
-
объяснении всех основных алгоритмов и протоколов, предоставляя простые для следования им примеры и схемы
-
описанием стоящим за некоторыми решениям проектирования соображений
-
расширением на то как это можно применять на практике и в чём состоят некоторые из проблем, которые могут возникать при осуществлении таким образом
-
избавлением от путаницы вокруг ряда терминов (то есть, непротиворечивости) и поощрению к размышлению о компромиссах при разработке распределённых систем
-
предоставления большого числа дополнительных ресурсов для тех, кто желает затратить больше времени для более глубокого понимания теоретических разделов
Данная книга нацелена на инженеров программного обеспечения, которые обладают неким опытом в построении программных систем и не обладают вовсе или имеют лишь небольшой опыт в распределённых системах. Мы не предполагаем никаких знаний относительно понятий и алгоритмов распределённых систем. Эта книга пытается постепенно вводить необходимые термины и пояснять соответствующие основные алгоритмы простейшим возможным способом, предоставляя много схем и примеров. В результате, эта книга может оказаться полезной и тому персоналу, который не разрабатывает программное обеспечение, однако желает получить представление в области распределённых систем. Тем не менее, данная книга не имеет целью предоставить полный анализ или доказательство каждого отдельного алгоритма.Вместо этого наша книга стремится помочь своему читателю получить те интуитивные представления, которые стоят за неким понятием или алгоритмом, в то же время предоставляя необходимые ссылки на первоначальные статьи с тем, чтобы читатель имел возможность более глубоко изучать прочие представляющие его интерес вопросы.
Как и любая прочая книга, эта книга могла бы быть написана одним человеком, но это было бы невозможно без участия многих других. В результате стоит отдать должное всем моим предыдущим работодателям и коллегам, которые предоставили мне возможность для работы в крупномасштабных распределённых системах и оценить как их возможности и сложности, так и само сообщество распределённых систем, которое всегда было открыто для ответов на любые вопросы. Я также хотел бы поблагодарить Ричарда ГендалаБрауна за обзор тематического исследования Corda, а также за отзывы, которые были очень полезными и способствовали мне внесению ясности и устранению двусмысленности. Естественно, эта книга была бы невозможна без понимания и поддержки моей спутницы по жизни, Марии.