Senior Distributed Systems Engineer English: Consensus, CRDTs, and CAP Theorem Vocabulary (англійською)

Consensus, Raft vs Paxos, split-brain, CRDT, CAP theorem — англійський словник для старших інженерів розподілених систем в оглядах дизайну і обговореннях архітектури.

Розподілені системи мають словник, який відокремлює інженерів, які працювали в області від тих, хто читав про це. У проектних оглядах, архітектурних обговореннях і пост-мртових записах, старші інженери використовують цю мову точно - і неточне використання відразу ж помітно для колег.

У цій статті описано словниковий запас, який вам потрібен для впевненого обговорення розподілених систем англійською мовою, з використанням колокації і шаблонів речень, які використовують носії рідної мови.


Консенсусні алгоритми

** Консенсус ** у розподілених системах означає згоду — зокрема, здатність кластера вузлів погоджуватися щодо єдиного значення або рішення, навіть якщо деякі вузли не працюють або повідомлення затримуються.

«Головна проблема розподіленого консенсусу полягає в тому, щоб отримати вузли, щоб погодитися на порядок операцій без єдиного джерела правди.»

** Алгоритм консенсусу ** є протоколом, який досягає цієї згоди. Два з них, які ви почуєте майже в кожній дискусії про розподілені системи, це Raft і Paxos.

** Raft ** був розроблений для того, щоб його було легше зрозуміти, ніж Paxos. Він використовує ** лідер ** вузол, який координує реплікацію журналу. Якщо лідер програє, то на виборах обирається новий. Інженери часто кажуть, що Raft є * більш доступним * або * більш зрозумілим *, ніж Paxos.

«Ми обрали etcd над ZooKeeper частково тому, що etcd використовує Raft, який легше обґрунтувати, коли ви зневаджуєте проблему виборів лідера»

** Paxos ** — це оригінальний алгоритм консенсусу, запропонований Leslie Lamport. Це номінально важко реалізувати правильно. Інженери, які працюють з ним, часто використовують фразу * “зрозуміти Paxos правильно” *, щоб описати цю складність.

«Multi-Paxos є тим, що більшість виробничих систем насправді реалізують, а не версією з одним указом з оригінальної статті»

** Кворум ** це мінімальна кількість вузлів, які повинні погодитися, щоб рішення було чинним. У кластері з п’яти вузлів, кворум зазвичай становить три.

“Ми можемо терпіти до двох невдач вузлів і все ще підтримувати кворум. Втратити третій, і кластер стає недоступним, а не непослідовним.”


Недоліки модифікації

** Розділений мозок ** — це сценарій аварії, у якому мережевий розділ спричиняє дві частини кластера, які працюють незалежно, кожна з яких вважає, що вона є єдиною авторитетною. Обидві сторони можуть прийняти запис, що призведе до конфліктного стану.

“Цей інцидент був класичним сценарієм розділення мозку. Мережевий розділ тривав 90 секунд, і обидва первинні приймали записи. Ми витратили шість годин на примирення розбіжних даних»

Використовуйте cause, trigger, result in, або lead to з split-brain: “Несправність асиметричної мережі викликала стан split-brain.”


Модель послідовності

Теорема CAP (Consistency, Availability, Partition tolerance) стверджує, що розподілена система може гарантувати тільки дві з трьох властивостей одночасно, коли відбувається мережевий розділ. Інженери кажуть, що система є CP (послідовною і толерантною до розділів) або AP (доступною і толерантною до розділів).

«Cassandra є системою AP — вона приоритизує доступність над сильною послідовністю. Якщо вам потрібні лінійні читання, Cassandra — неправильний вибір»

«Люди часто неправильно застосовують CAP. Реальний компроміс на практиці є послідовність проти затримки, а не послідовність проти доступності»

** Послідовність можливих змін ** означає, що за достатньо тривалого часу без нових оновлень всі репліки будуть збігатися до одного значення. Процеси читання можуть повертати застарілі дані.

«Корзинка з часом стає послідовною — якщо два клієнти додають товари одночасно, обидва додавання з часом будуть відображені, але є вікно, де один клієнт не побачить зміни іншого»

** Сильна послідовність ** (або * лінійність *) означає, що кожне читання відображає останній запис, так, ніби система є єдиним вузлом. Це більш дорого.

“Ми потребуємо сильної послідовності для балансів рахунків. Ми не можемо показати користувачеві застарілий баланс до того, як вони розпочнуть платіж»


Часописи і брошури

** CRDT ** (Conflict- free Replicated Data Type) — це структура даних, розроблена таким чином, що одночасні оновлення з декількох вузлів завжди можна об’ єднати без конфліктів. Математичні властивості структури гарантують, що всі репліки зрештою збігатимуться в один і той же стан.

«Ми використовуємо CRDT для редактора документів для співпраці. Незалежно від того, скільки клієнтів редагують одночасно, стан завжди збігається детерміністично»

«CRDT не є вільними — вони накладають обмеження на модель даних. Контр-CRDT може тільки збільшувати, ніколи не зменшувати, без втрати гарантії безконфліктності»

Вимовляйте CRDT як окремі літери: “C-R-D-T.”

** Векторний годинник ** це механізм для відстеження причинного порядку подій у розподілених вузлах. Кожен вузол підтримує лічильник, а вектор лічильників у всіх вузлах показує, які події відбулися раніше за інші.

“Ми використовуємо векторні годинники, щоб виявити порушення причинно-наслідкового порядку в журналі аудиту. Якщо векторний годинник події B не домінує над подією A, ми знаємо, що вони одночасні»

** Lamport timestamp ** є простішим логічним годинником (один лічильник), який встановлює часткове впорядкування подій між вузлами — достатньо для багатьох випадків використання, де повне причинне відстеження не потрібно.

«Временові штампи Лампорта дають нам послідовний порядок відтворення подій, але вони не говорять нам про причинність — дві події з різними штампами часу все ще можуть бути одночасними»


Фрази для дизайн-оглядів і архітектурних дискусій

Використовуйте ці ключові слова під час інтерв’ ю з розробниками систем, на радах з перегляду архітектури і технічних оглядах:

  • “За розділенням, ця конструкція належить до категорії AP — ми допускаємо застарілий зчитування для підтримки доступності.”
    • “Риск розщеплення мозку є головною проблемою тут. Нам потрібно забезпечити, щоб кворум запису був строго виконаний.»*
  • “Ми використовуємо CRDT для індикаторів присутності — він обробляє одночасні оновлення з декількох пристроїв без координації.”
  • “Рафт дає нам простішу ментальну модель для вибору лідерів, але нам все ще потрібно уважно роздумувати про числа термінів і репродукцію журналу.”
  • “Посмертное обследование выявило корневую причину как неправильную конфигурацию кворума - кластер принимал записи с подтверждением только одной реплики.”

Ключові слова

CollocationExample
achieve consensus”The algorithm achieves consensus in two rounds under normal conditions.”
maintain quorum”We cannot maintain quorum with fewer than three nodes.”
trigger a split-brain”The network partition triggered a split-brain condition.”
guarantee eventual consistency”The CRDT guarantees eventual consistency without coordination.”
reason about consistency”It’s easier to reason about consistency with Raft than with Paxos.”
tolerate node failures”The system tolerates up to two node failures without data loss.”

Practice

Розглянемо будь- яку проблему проектування системи — розподілене сховище ключів і значень, таблицю лідерів або текстовий редактор для спільної роботи. Напишіть короткий абзац (від чотирьох до шести речень), у якому ви поясните вибір моделі несуперечності за допомогою словника, наведеного у цьому повідомленні. Включіть принаймні: одне посилання на теорему CAP, одну модель послідовності (eventual або strong) і один механізм (quorum, CRDT або vector clock). Прочитайте його вголос колегі або записайте його самостійно — чи звучить лексика природно, чи ви все ще перекладаєте у голові?

Навигація по нюансах: практичний підхід до термінології розподілених систем

Будьмо чесними - “консенсус”, “CRDT”, і навіть “теорема CAP” можуть звучати загрозливо, коли ви намагаєтеся побудувати міцну, масштабовану систему. Це не просто про те, щоб знати * визначення *; Це про розуміння того, як ці концепції перекладаються на реальні рішення під час перегляду коду, обговорення архітектури або розмов Slack. Часто молодші інженери використовують технічний жаргон неправильно, що призводить до плутанини і переробки. Як старший інженер, ваша роль не просто виправити їх - хоча це важливо - але ніжно керувати розмову до ясності і точності. Ключовим є впровадження цих концепцій у релевантні сценарії. Наприклад, при обговоренні «розділення мозку» під час перегляду дизайну, більш вплинувчим буде сказати: «Якщо ми не маємо сильного механізму консенсусу, існує ризик, що наша система може ефективно розділитися на дві незалежні частини, що призведе до невідповідностей даних - уявіть один сервер, який все ще вважає себе основним, а інший повністю ігнорує його».

Крім того, розпізнавання контексту дискусії драматично впливає на спілкування. Під час перегляду коду, замість того, щоб просто сказати « Нам потрібен консенсус », ви можете сказати: « Давайте переконаємося, що ця зміна відповідає нашій загальній стратегії для послідовності даних — конкретно, як ми обробляємо потенційні мережеві розділи і підтримуємо єдине джерело правди. » Повідомлення Slack, що пояснює складне архітектурне рішення, може починатися з: « Роздумуючи про потенціал тимчасових відключень мережі … CRDT здається, що тут добре підходить, тому що … » Цей підхід показує, що ви не просто кидаєте навколо модних слів, а застосовуєте їх до реальної проблеми. Ключовим є завжди прагнути до * дійсного * спілкування, перекладаючи теоретичні концепції на практичні роздуми. Також важливо визнати обмеження кожної концепції - теорема CAP не є чарівною кулею, і розуміння того, коли пріоритет доступності над послідовністю (і навпаки) є ключовим.

Щоб проілюструвати цю точку зору, розглянемо простий приклад з використанням etcd, розподіленого сховища ключів- значень, яке часто використовується для досягнення консенсусу:

# Example etcd command - simulating a raft protocol update
etcdctl set /my/key value="New Value" --fast-health --consistent

Це не тільки про саму команду; це про те, як ми * обговорюємо * її. Ми могли б говорити про необхідність реплікації, виборів лідерів і перевірок послідовності даних - всі елементи безпосередньо пов’язані з такими поняттями, як консенсус і CRDT. Команда etcdctl є матеріальним представленням абстрактних ідей, які ми обговорюємо. Це конкретний інструмент, який втілює принципи проектування розподілених систем.

В кінцевому підсумку, оволодіння цим словником не стосується запам’ятовування; це стосується розробки спільної мови для вирішення складних завдань в інженерії розподілених систем - побудованої на розумінні, контексті і ясному спілкуванні.

Поширені запитання

Про що ця стаття "Senior Distributed Systems Engineer English: Consensus, CRDTs, and CAP Theorem Vocabulary (англійською)"?

Consensus, Raft vs Paxos, split-brain, CRDT, CAP theorem — англійський словник для старших інженерів розподілених систем в оглядах дизайну і обговореннях архітектури.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "Senior Distributed Systems Engineer English: Consensus, CRDTs, and CAP Theorem Vocabulary (англійською)"?

Приблизно 9 min.