Данные и деньги: обзор с выбором ответа
Обзор с выбором ответа по кейсам данных-и-денег: кардинальность, exactly-once против опоздания, идемпотентность и двойная запись, потерянное обновление, детерминизм биржи и гонка двойного бронирования.
Шесть вопросов, что режут поперёк юнита. Каждый — решение, что ты принимаешь в дизайн-ревью, где выход — деньги или критичные к корректности данные — не определение для зубрёжки, а рассуждение, что предотвращает двойное списание, OOM от кардинальности или двойное бронирование.
Подтверди, что умеешь засечь бомбу кардинальности, отделить exactly-once от поздних событий, применить ключ идемпотентности, побить потерянное обновление, обосновать однопоточное ядро биржи и предотвратить двойное бронирование.
Команда метрик добавляет лейбл `user_id` (миллионы значений) к высокотрафиковой метрике. Что ломается и почему?
В агрегации кликов клик приходит на 30 минут позже; его event-time окно закрылось давно. Exactly-once включён. Посчитан ли он, и как всё-таки выставить в счёт?
Клиент списывает с карты, PSP успешен, но ответ теряется; клиент повторяет. Что предотвращает двойное списание, и откуда должен прийти ключ?
Два конкурентных дебета ($70, $60) оба читают баланс кошелька $100, оба проходят проверку, оба пишут обратно, и кошелёк уходит в минус. Что это и чистейшая одношардовая починка?
Ядро матчинга биржи однопоточно над секвенсированным потоком. Инженер предлагает несколько потоков матчинга «чтобы быстрее». Почему это неверно?
Два гостя бронируют последний номер на ту же ночь в пределах секунды; оба видели «1 доступен» и оба получили подтверждения. Что это и верная починка для многоночного проживания?
- 01Почему exactly-once — не ответ на позднее событие?
- 02Что общего между потерянным обновлением и двойным бронированием?
Угрозы юнита — именованный чеклист, что прогоняешь в любом дизайн-ревью, где выход — деньги или критичные к корректности данные. Бомба кардинальности: число рядов — произведение кардинальностей лейблов, так что неограниченный лейбл OOM’ит TSDB — держи лейблы ограниченными. Exactly-once против опоздания: exactly-once останавливает двойное применение, не поздние события, под которые размеряешь watermark, а восстанавливает пакетная сверка. Ключ идемпотентности: клиентом отчеканенный, атомарный check-and-store, так что ретрай после потерянного ответа возвращает исходный результат вместо двойного списания. Потерянное обновление и двойное бронирование — та же гонка read-modify-write — чинятся тем, чтобы сделать check-and-act одной атомарной операцией (на баланс или на ночь всё-или-ничего). И детерминизм биржи: единый секвенсированный тотальный порядок через однопоточное ядро, так что реплики и реплей согласны — никогда не параллель одну книгу. У каждой угрозы точная атомарная починка, и распознавание, с какой ты столкнулся, — senior-навык, что строит этот юнит.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.