open atlas
↑ К треку
Разборы System Design SDC · 05 · 07

Данные и деньги: обзор с выбором ответа

Обзор с выбором ответа по кейсам данных-и-денег: кардинальность, exactly-once против опоздания, идемпотентность и двойная запись, потерянное обновление, детерминизм биржи и гонка двойного бронирования.

SDC Senior ◷ 13 min
Уровень
ОсновыJuniorMiddleSenior

Шесть вопросов, что режут поперёк юнита. Каждый — решение, что ты принимаешь в дизайн-ревью, где выход — деньги или критичные к корректности данные — не определение для зубрёжки, а рассуждение, что предотвращает двойное списание, OOM от кардинальности или двойное бронирование.

Подтверди, что умеешь засечь бомбу кардинальности, отделить exactly-once от поздних событий, применить ключ идемпотентности, побить потерянное обновление, обосновать однопоточное ядро биржи и предотвратить двойное бронирование.

Викторина

Команда метрик добавляет лейбл `user_id` (миллионы значений) к высокотрафиковой метрике. Что ломается и почему?

Викторина

В агрегации кликов клик приходит на 30 минут позже; его event-time окно закрылось давно. Exactly-once включён. Посчитан ли он, и как всё-таки выставить в счёт?

Викторина

Клиент списывает с карты, PSP успешен, но ответ теряется; клиент повторяет. Что предотвращает двойное списание, и откуда должен прийти ключ?

Викторина

Два конкурентных дебета ($70, $60) оба читают баланс кошелька $100, оба проходят проверку, оба пишут обратно, и кошелёк уходит в минус. Что это и чистейшая одношардовая починка?

Викторина

Ядро матчинга биржи однопоточно над секвенсированным потоком. Инженер предлагает несколько потоков матчинга «чтобы быстрее». Почему это неверно?

Викторина

Два гостя бронируют последний номер на ту же ночь в пределах секунды; оба видели «1 доступен» и оба получили подтверждения. Что это и верная починка для многоночного проживания?

Вспомните перед уходом
  1. 01
    Почему exactly-once — не ответ на позднее событие?
  2. 02
    Что общего между потерянным обновлением и двойным бронированием?
Итог

Угрозы юнита — именованный чеклист, что прогоняешь в любом дизайн-ревью, где выход — деньги или критичные к корректности данные. Бомба кардинальности: число рядов — произведение кардинальностей лейблов, так что неограниченный лейбл OOM’ит TSDB — держи лейблы ограниченными. Exactly-once против опоздания: exactly-once останавливает двойное применение, не поздние события, под которые размеряешь watermark, а восстанавливает пакетная сверка. Ключ идемпотентности: клиентом отчеканенный, атомарный check-and-store, так что ретрай после потерянного ответа возвращает исходный результат вместо двойного списания. Потерянное обновление и двойное бронирование — та же гонка read-modify-write — чинятся тем, чтобы сделать check-and-act одной атомарной операцией (на баланс или на ночь всё-или-ничего). И детерминизм биржи: единый секвенсированный тотальный порядок через однопоточное ядро, так что реплики и реплей согласны — никогда не параллель одну книгу. У каждой угрозы точная атомарная починка, и распознавание, с какой ты столкнулся, — senior-навык, что строит этот юнит.

Связанные уроки

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

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

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

Trademarks belong to their respective owners. Editorial reference only.