TGViewer
ТехнофITнес | Никита Ульшин ТехнофITнес | Никита Ульшин @tech_fit · 262 subscribers
Post #24 347
Каждый бэкендер должен уметь работать с платежами

Платежи — это отдельный сорт удовольствия в разработке. Работа с ними должна быть гораздо более тщательной и продуманной, потому что ошибки могут стоить невообразимо дорого и сильно ударить по репутации.

Поэтому обработка платежей должна быть надёжной и отказоустойчивой. Как ни странно, многого можно добиться с помощью простого (но очень тщательно настроенного) Retry. В статье автор показывает, как именно это можно реализовать.

⭐️ Интересные идеи

➡️ Статусы платежей нужно хранить в append-only хранилище. Автор предлагает использовать отдельную базу данных, но подойдёт и обычная таблица. Такой подход даёт историю изменений, защищает от порчи существующих данных и хорошо работает в многопоточной среде.

➡️ Важно чётко понимать, когда нужно делать ретрай, а когда — нет. Ретраим таймауты, ошибки доступности систем и срабатывание рейт-лимитов. Не ретраим ошибки бизнес-логики — вроде недостатка средств или некорректных данных карты.

➡️ Если ретраи закончились, ошибка должна попадать в Dead Letters Queue. Это важно, потому что такие ошибки стоит анализировать отдельно. Возможно, там зарыты системные баги или недоработки бизнес-процессов.

➡️ Обеспечьте exactly-once обработку. Клиент вряд ли обрадуется, если с его карты спишется оплата дважды. Поэтому используйте ключи идемпотентности и аккуратно работайте с распределёнными транзакциями.

Приятного чтения!

#systemdesign@tech_fit
➖➖➖➖➖➖➖➖➖➖➖
// Понравился пост? Ставь 💛
// И обязательно подпишись на канал, чтобы не пропустить новые статьи
Systemdesignclassroom Every Backend Engineer needs to know how to deal with payments. A simple introduction to payment retries.
  • 👍 3
  • ⚡ 2
  • 🔥 2
More from @tech_fit
  1. Oct 13, 2025Почему Uber переехал с Postgres на MySQL Интересная статья о том, какие проблемы в Postgre…
  2. Oct 6, 2025Паттерн Bulkhead Продолжаю читать статьи про паттерны отказоустойчивых приложений. На очер…
  3. Oct 1, 2025Как сервера договариваются друг с другом: алгоритм распределённого консенсуса Raft Распред…
  4. Sep 29, 2025Микросервисы не подходят стартапам Интересная статья, которая в очередной раз напоминает о…
  5. Aug 25, 2025Сколько партиций в Kafka мне нужно? Партиции — это одна из важнейших частей Kafka. С их по…
  6. Aug 18, 2025Роадмап архитектора Как вы знаете, иногда я тут делюсь не обзорчиками, а вполне прикладным…
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 →