Каждый бэкендер должен уметь работать с платежами
Платежи — это отдельный сорт удовольствия в разработке. Работа с ними должна быть гораздо более тщательной и продуманной, потому что ошибки могут стоить невообразимо дорого и сильно ударить по репутации.
Поэтому обработка платежей должна быть надёжной и отказоустойчивой. Как ни странно, многого можно добиться с помощью простого (но очень тщательно настроенного) Retry. В статье автор показывает, как именно это можно реализовать.
⭐️ Интересные идеи
➡️ Статусы платежей нужно хранить в append-only хранилище. Автор предлагает использовать отдельную базу данных, но подойдёт и обычная таблица. Такой подход даёт историю изменений, защищает от порчи существующих данных и хорошо работает в многопоточной среде.
➡️ Важно чётко понимать, когда нужно делать ретрай, а когда — нет. Ретраим таймауты, ошибки доступности систем и срабатывание рейт-лимитов. Не ретраим ошибки бизнес-логики — вроде недостатка средств или некорректных данных карты.
➡️ Если ретраи закончились, ошибка должна попадать в Dead Letters Queue. Это важно, потому что такие ошибки стоит анализировать отдельно. Возможно, там зарыты системные баги или недоработки бизнес-процессов.
➡️ Обеспечьте exactly-once обработку. Клиент вряд ли обрадуется, если с его карты спишется оплата дважды. Поэтому используйте ключи идемпотентности и аккуратно работайте с распределёнными транзакциями.
Приятного чтения!
#systemdesign@tech_fit
➖➖➖➖➖➖➖➖➖➖➖
// Понравился пост? Ставь 💛
// И обязательно подпишись на канал, чтобы не пропустить новые статьи
Post #24
347