awesome-everything EN
↑ Обратно к восхождению

Распределённые системы

CAP на практике: чтение конфигов и сценариев

Суть Читай реальные конфиги, опции запросов и сценарий разделения; предскажи поведение CP/AP и гарантию согласованности, которую каждый из них реально покупает.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

Выбор CAP/PACELC не абстрактен — он живёт в уровнях согласованности, write concern и настройках кворума. Прочитай каждый конфиг, затем предскажи, как он поведёт себя при разделении.

Цель

Отработай движение, которое делаешь на каждом design review: переведи конфиг уровня согласованности или кворума в его конкретное поведение CP/AP и точную гарантию, которую он даёт читателю во время разделения.

Сниппет 1 — настраиваемая согласованность Cassandra

-- N = 3 реплики на ключ (replication factor 3)
CONSISTENCY QUORUM;  -- W и R требуют по 2 из 3 подтверждений
INSERT INTO orders (id, total) VALUES (?, ?);
SELECT total FROM orders WHERE id = ?;
Викторина

При RF=3 и QUORUM (W=2, R=2) какую гарантию даёт W+R > N и как разделение меняет позицию системы?

Сниппет 2 — write/read concern в MongoDB

db.accounts.updateOne(
  { _id: id },
  { $inc: { balance: -100 } },
  { writeConcern: { w: 1 } }          // подтверждение только от primary
);
// в другом месте, сервис отчётности:
db.accounts.find({ _id: id }).readPreference("secondaryPreferred");
Викторина

Какую опасность для согласованности создаёт эта связка и какое исправление даёт наибольший рычаг?

Сниппет 3 — лог сценария разделения

12:00:01  region=us-east  PUT cart/42  -> 200 OK   (локальная запись принята)
12:00:01  region=eu-west  PUT cart/42  -> 200 OK   (локальная запись принята)
12:00:02  link us-east<->eu-west: 100% потеря пакетов (разделение)
12:03:10  link восстановлен; начинается anti-entropy примирение
12:03:10  cart/42 имеет две расходящиеся версии, равные siblings по векторным часам
Викторина

Оба PUT вернули 200 во время разделения. Что это говорит о хранилище и что должно произойти при примирении?

Сниппет 4 — конфиг кворума Raft/etcd

# Кластер etcd из 3 узлов, один узел в удалённом DC
cluster:
  - { name: n1, dc: primary }
  - { name: n2, dc: primary }
  - { name: n3, dc: remote }   # высоколатентный канал к primary DC
election-timeout: 1000ms
heartbeat-interval: 100ms
Викторина

Удалённый канал к n3 часто скачет выше 1000 мс RTT. Какой режим сбоя провоцирует эта конфигурация и каково исправление?

Итог

Каждое решение CAP/PACELC проявляется как ручка: W+R > N покупает пересечение для read-your-writes, но становится CP при разделении; w:1 плюс чтения с secondary тихо отказываются от долговечности и свежести; два 200 во время разделения — сигнатура AP, чьим siblings нужно настоящее слияние, а не LWW; а election timeout Raft ниже худшего RTT фабрикует логические разделения. Прочитай конфиг, назови гарантию, которую он реально даёт, затем проверь, как он деградирует при обрыве канала.

Продолжить восхождение ↑CAP на практике: построй и раздели реплицированное хранилище
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.