open atlas
↑ К треку
Распределённые системы DIST · 00 · 01

С нуля: что такое распределённая система на самом деле

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

DIST Основы ◷ 10 min
Уровень
ОсновыJuniorMiddleSenior
Уже знаешь этот юнит? Пройди быструю проверку за минуту →

Запрос к базе данных занимает 2 мс на твоём ноутбуке. Затем кто-то говорит «нужно выдержать десять миллионов пользователей» — и вдруг одной машины не хватает. Ты добавляешь вторую, потом третью — и всё, что было простым, ломается способами, которых ты не ожидал. Запись доходит до узла A, но не до B, пока сеть не подвисает. Узел C считает себя лидером — и узел D тоже. Пользователь читает свои же данные и получает актуальное, а секунду спустя — снова устаревшее. Никто не упал. Ничто не «лежит». Просто… расхождение. Добро пожаловать в распределённые системы — дисциплину о том, как заставить много компьютеров кооперироваться так же надёжно, как один, когда сеть между ними нельзя доверять, а любая машина может отказать в любой момент. Этот урок — карта перед тем восхождением.

Единственная проблема, которую решают распределённые системы

У одной машины есть жёсткий потолок: конечные CPU, RAM и диск. Выше потолка — два пути: купить машину мощнее (вертикальное масштабирование, у которого тоже есть предел) или добавить машин и разделить работу (горизонтальное масштабирование). Распределённые системы — это второй путь, доведённый до строгой дисциплины. Они решают и вторую проблему: одна машина — это единственная точка отказа. Разложи данные по трём машинам — и можешь потерять одну, не потеряв сервис.

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

Восемь слов, которые остальной трек считает знакомыми

Senior-уроки дальше используют эти термины, не останавливаясь на определениях. Вот они, по одному предложению — что это и зачем оно.

СловоЧто этоЗачем оно
Узел (node)Одна машина (сервер, процесс или виртуалка) в системе.Чтобы был базовый блок для рассуждений о работе и отказе — из него строится всё остальное.
Партиция (network partition)Сбой, при котором одни узлы перестают достигать других по сети.Потому что сети ненадёжны — партиция не баг, который чинят, а условие, которое нужно пережить.
Репликация (replication)Хранение копий одних и тех же данных на нескольких узлах.Чтобы данные пережили отказ узла и чтение обслуживалось локально, не пересекая всю сеть.
Согласованность (consistency)Гарантия, что все узлы видят одни и те же данные в один момент.Чтобы пользователь не читал устаревшее или противоречивое — но сильная согласованность стоит задержки и доступности.
Доступность (availability)Гарантия, что каждый запрос получает ответ даже во время сбоев.Чтобы система продолжала обслуживать пользователей — но ответ может содержать слегка устаревшие данные.
Задержка (latency)Время, которое сообщение тратит на путь между двумя узлами.Потому что сетевые прыжки суммируются — задержка это налог, который платит каждый распределённый дизайн, и она никогда не равна нулю.
Частичный отказ (partial failure)Состояние, когда одни узлы работают, а другие отказывают — одновременно.Потому что распределённая система может быть наполовину сломана так, как одна машина никогда не бывает; это нужно обрабатывать явно.
Консенсус (consensus)Протокол, по которому узлы соглашаются на одном значении вопреки сбоям (например, Raft, Paxos).Чтобы система могла избрать лидера, зафиксировать транзакцию или принять любое решение — не давая единственному узлу полной власти.

Как они складываются вместе

Прочитанные по порядку, слова рассказывают одну историю. Ты распределяешь работу и данные по узлам ради масштаба и отказоустойчивости. Используешь репликацию, чтобы хранить копии данных на нескольких узлах — и ни один отказ не уничтожил всё. Но теперь партиция может разбить узлы на два острова, которые не видят друг друга. В этот момент ты сталкиваешься с вынужденным компромиссом: продолжать обслуживать запросы (приоритет доступности) или отказать в ответе до восстановления сети (приоритет согласованности)? В любом случае задержка — это налог: каждое сообщение между узлами стоит времени, а часы на разных машинах расходятся. Частичный отказ означает, что одни запросы проходят, а другие нет в один и тот же момент — это сложнее полного отказа. Алгоритмы консенсуса — это то, чем узлы пользуются, чтобы договориться о фактах (кто лидер, что зафиксировано) вопреки всему этому. Этот компромисс между согласованностью и доступностью во время партиции — теорема CAP — именно то, что изучает следующий Unit 01.

Почему это работает

Почему не использовать одну очень мощную машину? Можно, до определённой точки — и для многих сервисов эта точка дальше, чем кажется. Дисциплина распределённых систем не в том, что они нужны всем, а в том, что после пересечения порога (слишком много данных для одного диска, слишком много трафика для одного CPU, слишком большой риск в одном домене отказа) тебе нужен строгий словарь для проблем, которые появятся. Выучить словарь первым — значит, что senior-уроки лягут чисто.

Викторина

Что делает частичный отказ особенно сложным в распределённой системе?

Расставь шаги по порядку

Упорядочи понятия от самого фундаментального до самого сложного компромисса:

  1. 1 Узел — одна машина, базовый блок системы
  2. 2 Репликация — хранение копий данных на нескольких узлах
  3. 3 Партиция — сетевой разрыв, изолирующий одни узлы от других
  4. 4 Согласованность против доступности — вынужденный выбор при партиции
Вспомните перед уходом
  1. 01
    В одном дыхании: какую проблему решают распределённые системы и какой новый класс проблем они вносят?
  2. 02
    В чём компромисс между согласованностью и доступностью, и когда он даёт о себе знать?
Итог

Распределённая система — это много компьютеров, кооперирующихся как один, — соединённых сетью, которой нельзя доверять, и населённых машинами, которые отказывают независимо. Это сочетание вносит класс проблем, отсутствующих на одной машине: частичные отказы, когда одни узлы работают, а другие нет; задержку, которая никогда не равна нулю; часы, которые расходятся; и неизбежный компромисс между согласованностью и доступностью при разделении сети. Ты распределяешь работу и данные по узлам с помощью репликации, координируешь решения с помощью протоколов консенсуса и принимаешь, что доставка ровно-один-раз и идеальная согласованность не бесплатны — они стоят задержки, сложности или доступности. Восемь слов из этого урока — узел, партиция, репликация, согласованность, доступность, задержка, частичный отказ, консенсус — это словарь, который предполагает каждый senior-урок. Теперь, когда встретишь фразу «партиция вынудила выбирать между согласованностью и доступностью», ты будешь знать, что за каждым словом стоит — и почему этот компромисс не ошибка проектирования, а физика. Далее: Unit 01, теорема CAP на практике.

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources4
expand
  1. 01
  2. 02
  3. 03
  4. 04

Trademarks belong to their respective owners. Editorial reference only.