Distributed Systems — the friendly introРаспределённые системы — дружелюбное введение

No jargon, just plain ideas and everyday analogies. Start here, then move up to Intermediate and Advanced. Без жаргона: простые идеи и аналогии из жизни. Начни здесь, потом переходи к «Среднему» и «Продвинутому».
🟢 BeginnerНовичок 🟡 IntermediateСредний 🔴 AdvancedПродвинутый

1. What is a distributed system?1. Что такое распределённая система?

A distributed system is just several computers working together to do one job, talking to each other over a network. To the user it looks like one app; behind the scenes the work is spread over many machines.

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

AnalogyАналогия One cook in a tiny kitchen can make a few meals. A big restaurant has many cooks, stations, and waiters working at once. The food still arrives as one order, but lots of people made it happen together. That's a distributed system. Один повар в маленькой кухне приготовит пару блюд. В большом ресторане — много поваров, станций и официантов работают одновременно. Заказ всё равно приходит как одно блюдо, но над ним работали вместе. Это и есть распределённая система.

2. Why not just use one big computer?2. Почему не взять один большой компьютер?

  • Too much work for one. Millions of users or billions of events won't fit on a single machine.
  • One machine can break. If everything lives on one computer and it dies, your whole app is down.
  • Speed and location. Users are all over the world; having machines closer to them is faster.
  • Слишком много работы для одного. Миллионы пользователей или миллиарды событий не влезут в одну машину.
  • Одна машина может сломаться. Если всё на одном компьютере и он умирает — падает всё приложение.
  • Скорость и расположение. Пользователи по всему миру; держать машины ближе к ним — быстрее.
TakeawayВывод We use many computers for scale (handle more) and reliability (survive failures). But splitting work creates new problems — that's the rest of this page. Много компьютеров берут ради масштаба (тянуть больше) и надёжности (переживать сбои). Но разделение работы рождает новые проблемы — о них дальше.

3. The three hard truths3. Три суровые истины

Almost everything in distributed systems exists to deal with these three facts.Почти всё в распределённых системах придумано, чтобы справляться с этими тремя фактами.

① Things fail — all the time① Всё ломается — постоянно

With thousands of machines, something is always broken: a disk dies, a server reboots, a cable is unplugged. Failure isn't a rare emergency; it's the normal background state.

Когда машин тысячи, что-то всегда сломано: умер диск, перезагрузился сервер, выдернули кабель. Сбой — не редкое ЧП, а нормальный фон.

② Messages get lost, duplicated, or delayed② Сообщения теряются, дублируются или опаздывают

Computers talk over a network, and the network is unreliable. A message might never arrive, arrive twice, or arrive much later than expected.

Компьютеры общаются по сети, а сеть ненадёжна. Сообщение может не дойти, прийти дважды или прийти намного позже, чем ждали.

AnalogyАналогия You text a friend "running late". Maybe it doesn't send. Maybe it sends twice. Maybe it arrives an hour later. You can't be sure they got it — so you might call to confirm. Computers have the same problem. Ты пишешь другу «опаздываю». Может не отправиться. Может отправиться дважды. Может дойти через час. Ты не уверен, что он получил — поэтому можешь перезвонить. У компьютеров та же проблема.

③ There is no shared clock③ Нет общих часов

Each machine has its own clock, and they drift apart. So you can't always say which of two events happened "first" just by comparing timestamps.

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

The big oneГлавное If a machine stops answering, you cannot tell whether it crashed or is just slow. This single uncertainty is the root of most distributed-systems difficulty. Если машина перестала отвечать, ты не можешь понять, упала она или просто тормозит. Именно эта неопределённость — корень большинства сложностей.

4. Copies = Replication4. Копии = Репликация

Since machines fail, we keep several copies of the data on different machines. If one is lost, the others still have it. Keeping copies in sync is called replication.

Раз машины ломаются, мы держим несколько копий данных на разных машинах. Если одна потеряна — у других данные есть. Поддержание копий в синхроне называется репликацией.

AnalogyАналогия Write an important phone number in three notebooks kept in three places. Lose one notebook and you're fine. But now if you change the number, you must update all three — or they'll disagree. That "keeping them equal" is the hard part. Запиши важный номер в три блокнота в трёх местах. Потеряешь один — не страшно. Но если меняешь номер, надо обновить все три — иначе они разойдутся. Вот это «держать их одинаковыми» и есть сложность.
Word to knowСлово на заметку Replication = keeping copies of data on multiple machines for safety and availability. Репликация = хранение копий данных на нескольких машинах ради сохранности и доступности.

5. Splitting = Partitioning (sharding)5. Разбиение = Партиционирование (шардирование)

When data is too big for one machine, we split it into pieces and put each piece on a different machine. Each piece is a partition (or shard).

Когда данных слишком много для одной машины, мы делим их на части и кладём каждую часть на отдельную машину. Каждая часть — это партиция (или шард).

AnalogyАналогия A huge phone book won't fit on one shelf. Put names A–F on shelf 1, G–M on shelf 2, and so on. To find "Ivanov" you go straight to the right shelf. Splitting by a rule lets many shelves (machines) share the load. Огромная телефонная книга не влезет на одну полку. Имена А–Е — на полку 1, Ж–М — на полку 2, и так далее. Чтобы найти «Иванов», идёшь сразу к нужной полке. Деление по правилу позволяет многим полкам (машинам) делить нагрузку.
Watch out: hotspotsОсторожно: горячие точки If everyone wants the same shelf (say one super-popular name), that one machine gets swamped while others sit idle. Splitting evenly is the trick. Если всем нужна одна полка (например, одно супер-популярное имя), эта машина перегружена, а остальные простаивают. Хитрость — делить равномерно.
Two ideas, often togetherДве идеи, часто вместе Partition to share the load + replicate each partition for safety. Real systems do both. Партиционируй, чтобы делить нагрузку, + реплицируй каждую партицию ради сохранности. Реальные системы делают и то, и другое.

6. The big choice: be correct, or be available?6. Главный выбор: быть точным или доступным?

Imagine the network breaks and two machines can't talk. A request comes in. You have two options:

Представь: сеть оборвалась, и две машины не могут общаться. Приходит запрос. У тебя два варианта:

  • Refuse to answer until you're sure the data is correct (you stay consistent, but you're temporarily unavailable).
  • Answer anyway with maybe-slightly-old data (you stay available, but you might be inconsistent for a moment).
  • Отказаться отвечать, пока не уверен, что данные верны (остаёшься согласованным, но временно недоступен).
  • Ответить всё равно, может быть, слегка устаревшими данными (остаёшься доступным, но на миг можешь быть несогласованным).
AnalogyАналогия Two shops share one stock list, but the phone line between them is cut. A customer wants the last item. Shop A can say "sorry, I can't confirm right now" (correct but unhelpful) — or sell it and risk Shop B selling the same last item too (helpful but maybe wrong). You can't have both during the outage. Два магазина ведут один список товара, но связь между ними оборвана. Покупатель хочет последнюю единицу. Магазин A может сказать «извините, не могу подтвердить сейчас» (точно, но бесполезно) — или продать и рискнуть, что магазин B продаст ту же последнюю единицу (полезно, но, возможно, неверно). Во время обрыва оба сразу не получится.
This is the famous "CAP" ideaЭто и есть знаменитая идея «CAP» When the network is split, you pick Consistency (always correct) or Availability (always answers) — not both. When the network is healthy, you can have both. You'll meet "CAP" by name in the Intermediate page. Когда сеть разорвана, ты выбираешь Согласованность (всегда верно) или Доступность (всегда отвечает) — не оба. Когда сеть здорова, можно и то, и другое. С названием «CAP» познакомишься на странице «Средний».

7. "Safe to do twice" = Idempotency7. «Безопасно сделать дважды» = Идемпотентность

Remember truth ②: messages can arrive twice. So a good system makes sure that doing the same thing twice has the same result as doing it once. This property has a fancy name: idempotency.

Вспомни истину ②: сообщения могут прийти дважды. Поэтому хорошая система следит, чтобы сделать одно и то же дважды давало тот же результат, что и один раз. У этого свойства есть умное название: идемпотентность.

AnalogyАналогия A light switch set to "ON" is idempotent: flip it to ON twice, it's still just ON. But "add one cookie to the jar" is not — do it twice by accident and you have an extra cookie. Designs prefer "set to this value" over "add one". Выключатель в положении «ВКЛ» идемпотентен: переведи в ВКЛ дважды — всё равно просто ВКЛ. А «добавь одно печенье в банку» — нет: сделаешь случайно дважды, и печенья лишнее. В дизайне предпочитают «установить значение» вместо «прибавить один».

The usual trick: give each request a unique id. If the system sees the same id again, it knows "I already did this" and safely ignores the duplicate. Combined with retries (try again if unsure), you get reliability without double-counting.

Обычный приём: давать каждому запросу уникальный id. Если система снова видит тот же id, она понимает «я это уже сделала» и безопасно игнорирует дубль. Вместе с ретраями (повторить, если не уверен) получается надёжность без двойного счёта.

Why it mattersПочему это важно "Retry until it works" is the main way to survive lost messages. Idempotency is what makes retrying safe. They go together. «Повторяй, пока не сработает» — главный способ пережить потерю сообщений. Идемпотентность делает повтор безопасным. Они идут в паре.

8. How machines agree: voting8. Как машины договариваются: голосование

Sometimes a group of machines must agree on one answer — for example, "who is in charge right now?". They do it by voting: the choice that gets more than half the votes (a majority) wins. This is called consensus.

Иногда группе машин надо договориться об одном ответе — например, «кто сейчас главный?». Делают это голосованием: вариант, набравший больше половины голосов (большинство), побеждает. Это называется консенсус.

AnalogyАналогия A group of friends picks one restaurant by majority vote. If the group splits into two rooms that can't talk, only the room with more than half the people can decide — the smaller room has to wait. That's why you can't end up with two different decisions. Компания выбирает один ресторан большинством голосов. Если компания разделилась на две комнаты без связи, решать может только та, где больше половины людей — меньшая комната ждёт. Поэтому не выйдет двух разных решений.
Why odd numbers (3, 5)Почему нечётные (3, 5) An odd number of voters means there's always a clear majority and no ties. If the group is split by a network break, only one side can have "more than half" — so only one side acts. No two bosses. Нечётное число голосующих гарантирует чёткое большинство без ничьих. Если группу разорвало сетью, «больше половины» может быть только у одной стороны — действует только она. Двух начальников не будет.

9. Fast vs complete: live data and latecomers9. Быстро vs полно: «живые» данные и опоздавшие

There are two ways to process data:

Есть два способа обрабатывать данные:

  • Batch: wait, collect a lot, then process it all at once. Slower, but you have the full picture. (Like doing all the laundry once a week.)
  • Streaming: process each item the moment it arrives. Fast and live, but you might not have everything yet. (Like washing each sock as it appears.)
  • Батч (Batch): подождать, собрать много, потом обработать всё разом. Медленнее, но видишь полную картину. (Как стирать всё бельё раз в неделю.)
  • Стриминг (Streaming): обрабатывать каждый элемент в момент прихода. Быстро и «вживую», но может быть ещё не всё. (Как стирать каждый носок по мере появления.)
The latecomer problemПроблема опоздавших Remember truth ②: data can arrive late. Imagine counting today's votes, but some ballots arrive by mail two days later. Do you publish the count now (fast, maybe slightly off) or wait for the stragglers (slow, but complete)? Systems set a cutoff and sometimes correct the number afterwards. That cutoff is called a watermark. Вспомни истину ②: данные могут опоздать. Представь, что считаешь голоса за сегодня, но часть бюллетеней приходит почтой через два дня. Опубликовать сейчас (быстро, чуть неточно) или ждать опоздавших (медленно, но полно)? Системы ставят «отсечку» и иногда потом поправляют число. Эта отсечка называется watermark.

10. Mini-glossary (you're ready for Intermediate)10. Мини-словарь (ты готов к «Среднему»)

WordPlain meaning
NodeOne computer/server in the system.
ReplicationKeeping copies of data on several nodes.
Partition / ShardA piece of the data, split across nodes. (Also: a network split.)
ConsistencyEveryone sees the same, up-to-date data.
AvailabilityThe system keeps answering requests.
IdempotencyDoing it twice = doing it once. Makes retries safe.
ConsensusMachines agreeing on one value by majority vote.
LatencyHow long one request takes (waiting time).
ThroughputHow much work per second the system handles.
WatermarkThe cutoff for "I think I've seen all the data up to here".
СловоПростой смысл
Нода (Node)Один компьютер/сервер в системе.
РепликацияХранение копий данных на нескольких нодах.
Партиция / ШардКусок данных, разнесённый по нодам. (Ещё: разрыв сети.)
СогласованностьВсе видят одинаковые, свежие данные.
ДоступностьСистема продолжает отвечать на запросы.
ИдемпотентностьДважды = один раз. Делает ретраи безопасными.
КонсенсусМашины договариваются об одном значении большинством голосов.
Задержка (Latency)Сколько длится один запрос (время ожидания).
Пропускная способность (Throughput)Сколько работы в секунду тянет система.
WatermarkОтсечка «кажется, все данные до этого момента я уже видел».

11. Quick self-check11. Быстрая самопроверка

Answer in your head, then tap to flip.Ответь про себя, потом нажми, чтобы перевернуть.

Why use many computers instead of one?Зачем много компьютеров вместо одного?
tapнажми
For scale (handle more work/users) and reliability (keep working when a machine fails). One machine is a limit and a single point of failure.Ради масштаба (тянуть больше работы/пользователей) и надёжности (работать, когда машина падает). Одна машина — это потолок и единая точка отказа.
A machine stops replying. Crashed or slow?Машина не отвечает. Упала или тормозит?
tapнажми
You can't tell — and that's the whole challenge. The system must behave correctly either way (e.g. retry safely, don't let a "maybe-dead" boss cause damage).Ты не можешь понять — и в этом вся сложность. Система должна вести себя верно в обоих случаях (например, безопасно ретраить и не дать «возможно-мёртвому» начальнику навредить).
Replication vs partitioning?Репликация vs партиционирование?
tapнажми
Replication = copies of the same data (for safety). Partitioning = splitting data into different pieces (for scale). Systems usually do both.Репликация = копии одних и тех же данных (ради сохранности). Партиционирование = разбиение данных на разные куски (ради масштаба). Обычно делают и то, и другое.
Why is "set to ON" better than "add one"?Почему «установить ВКЛ» лучше «прибавить один»?
tapнажми
Because messages can arrive twice. "Set to ON" done twice is still ON (idempotent). "Add one" done twice over-counts. Idempotency makes retries safe.Потому что сообщения могут прийти дважды. «Установить ВКЛ» дважды — всё ещё ВКЛ (идемпотентно). «Прибавить один» дважды — перебор. Идемпотентность делает ретраи безопасными.
During a network split: correct or available?При разрыве сети: точность или доступность?
tapнажми
You can only pick one (the CAP idea). Refuse to answer = consistent but unavailable; answer anyway = available but maybe stale. When the network is fine, you get both.Можно выбрать только одно (идея CAP). Отказать = согласованно, но недоступно; ответить = доступно, но, возможно, устарело. Когда сеть в порядке — доступно и то, и другое.
Why odd numbers of voters?Почему нечётное число голосующих?
tapнажми
So there's always a clear majority and no ties. If the group splits, only one side can have more than half — so you never get two bosses making conflicting decisions.Чтобы всегда было чёткое большинство без ничьих. Если группа разделилась, «больше половины» может быть лишь у одной стороны — и не будет двух начальников с противоречивыми решениями.