TGViewer
Nikita isn't rushin' | GoLang | DevEx | System Design Nikita isn't rushin' | GoLang | DevEx | System Design @nikitarusin · 167 subscribers
Post #129 214
--dry-run не только CLI паттерн

Поделюсь изящным решением с прода. Шорткат проблемы eventual consistency + low latency.

Цель: курьер завершил заказ — хотим сразу показать экран: «Поднажми, ещё 2 доставки и $20 твои» или «Готово, жди бабло на карту».

Проблема: зачёт заказа асинхронный: условия кампании, антифрод, манипуляции с бонусами. В час пик — далеко не мгновенно. Когда курьер смотрит на экран, его заказ ещё нигде не учтён.

🤡 Взять прогресс и сделать +1 на клиенте. Воркер уже успел — получаем +2. Счётчик скачет, курьер пишет в саппорт.

🤡 Выполнить весь флоу синхронно в ручке. Оборвалась связь на середине — partial state и ручные фиксы в проде.

Решение

Тот же самый код, но с флагом dry-run.

Ручка зовёт боевой процесс зачёта с order_id: заказ ещё не учтён? подходит под цель? сколько будет после? — и возвращает результат. Просто ничего никуда не пишет.

POST /v1/goals/progress { "dry_run_order_id": "o-88231"}

200 OK { "campaign_id": "weekend-20", "order_applied": true, "progress": 8, "target": 10, "reward": {"amount": 20, "currency": "USD"} }


✅ Один код-путь. Прогноз не разойдётся с реальностью, это буквально та же логика. Не надо писать второй калькулятор, который через полгода начнёт врать.

✅ Идемпотентность по order_id закрывает гонку. Воркер успел? dry-run это видит.

✅ Ручку можно ретраить, дёргать сколько угодно, звать из тестов.

⚠️ Логику надо разложить так: сначала весь расчёт, сайдэффекты строго после.
Тогда dry-run — просто ранний return перед ними. Один сайдэффект, уехавший выше точки выхода, и курьеру улетел пуш про бонус, которого нет.

⚠️ Это прогноз, а не гарантия. Антифрод зарубит позже. Поэтому в UI «жди бабло на карту», а не «$20 зачислено».
  • 🤔 3
More from @nikitarusin
  1. Sep 18, 2026Post #131
  2. Aug 17, 2026Post #130
  3. Aug 7, 2026Вот хороший свежий пруф сразу нескольких тезисов из поста. 500 тысяч резерваций остатков п…
  4. Jul 29, 2026Post #127
  5. Jul 25, 2026Post #126
  6. Jul 22, 2026Post #125
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →