Сеть döner с 4 филиалами в Измире одновременно подключена к Getir Yemek, Trendyol GO и Yemeksepeti. Вместо трёх отдельных меню используется thMenu как master record; списания со склада идут из одного места, а webhook fan-out обновляет три платформы.
Архитектура master record
Колонка products.stock_quantity в D1_MENU — единственный канонический источник. При подтверждении заказа: UPDATE products SET stock_quantity = stock_quantity - 1 WHERE id = ? AND stock_quantity > 0. 0 затронутых строк = нет на складе.
В случае успеха событие уходит в Cloudflare Queue. Три воркера параллельно патчат API. Средняя задержка fan-out 340 мс.
Разрешение конфликтов
Сценарий: 5 лахмаджунов на складе. В одну секунду приходит 5 заказов с трёх платформ. Атомарный UPDATE сериализует — последний находит 0 и отклоняется. Финальное состояние 0, три "out of stock".
В D1 нет явных row lock, но WHERE stock > 0 выполняет ту же роль. Ноль over-sell за 6 месяцев.
Сверка drift
Webhook Yemeksepeti с задержкой 30 с, Trendyol мгновенный, Getir опрашивает каждые 5 с. Часовой cron сверяет три платформы с master.
- Yemeksepeti 5, Getir 3: master на 5, PATCH Getir
- Master 0, платформа 2: немедленный PATCH 0
- Drift > 3: alert Slack
FAQ
Нужно ли вручную заводить меню на каждой платформе? Нет, master record + fan-out автоматизируют всё.
Кто получает приоритет в race? FIFO по timestamp; проигравший получает 422.
Cron автоматический? Да, ежечасно с alert Slack при большом drift.
Было полезно? Поделитесь.
Похожие статьи
Что такое QR-меню? Полное руководство для ресторанов
QR-меню позволяет гостям мгновенно получить доступ к вашей карте блюд со смартфо…
Переход с бумажного меню на цифровое QR-меню: пошаговое руководство
Хотите перейти на QR-меню, но не знаете с чего начать? Это руководство охватывае…
Геотаргетированные QR-меню: разные языки по IP посетителя
Как 180-местный all-inclusive отель в Анталье направляет один QR на турецкое, не…