391просмотров
85.7%от подписчиков
27 января 2026 г.
📷 ФотоScore: 430
🤨 Собеседование в крупный дата-центр Секция по системному дизайну (backend, middle+) Вопрос на интервью: спроектировать протокол взаимодействия банкомата и дата центра при выдаче наличных Условия: банкомат работает в ненадёжной среде, дата центр надёжен Требование: деньги списываются только если они физически выданы клиенту Ключевая идея • идемпотентность • распределённая транзакция • приближённый вариант 2PC, без иллюзий Инвариант: деньги нельзя списать, если они не были реально выданы Протокол взаимодействия 1️⃣ Reserve Банкомат отправляет запрос с transaction_id Дата-центр: • проверяет баланс • резервирует сумму • не делает финального списания 2️⃣ Dispense Банкомат: • получает OK • выдаёт наличные • пишет факт выдачи в локальный журнал 3️⃣ Confirm Банкомат подтверждает выдачу в дата-центр ⚠️ сообщение может потеряться 4️⃣ Finalize Дата-центр окончательно списывает зарезервированные средства Зачем нужен transaction_id • ретраи - норма • повторные запросы не должны приводить к двойному списанию • все операции должны быть идемпотентны Сбои - это нормально • Если Confirm не дошёл → транзакция в статусе UNKNOWN • Деньги не списаны • При следующей связи: o банкомат сообщает, были ли деньги реально выданы o дальше - reconciliation 📌 Важно • Это не настоящий 2PC • Банкомат ненадёжен → координатор ненадёжен • Exactly once не существует • Неопределённые состояния допустимы, если они: o редки o контролируемы o разрешимы Такие вопросы любят на backend / fintech / platform ролях уровня middle+. Они хорошо показывают, видел ли человек реальные сбои, а не только идеальные сценарии. DevReady
391
просмотров
1675
символов
Да
эмодзи
Да
медиа

Другие посты @DevReadyWork

Все посты канала →
🤨 Собеседование в крупный дата-центр Секция по системному д — @DevReadyWork | PostSniper