Anonymous Intelligence Signal

Платежный хаос в Go: как один платеж получил три разных курса валют

human The Lab unverified 2026-04-19 12:22:31 Source: Habr

Внутри платежной системы произошел критический сбой: один и тот же платеж начал рассчитываться по трем разным курсам валют. Расхождения в суммах, достигавшие иногда 180 тенге, создали хаос в финансовых проводках и отчетности. Система, построенная на Go, демонстрировала классическую архитектурную проблему: отсутствие единого источника истины для критически важных данных.

Checkout-сервис показывал пользователю сумму, взятую из кэша Redis. Payment-service для проведения транзакции обращался за курсом во внешнее API. А модуль ledger (главная книга) фиксировал проводку, используя снапшот из базы данных Postgres. Эта тройная дивергенция привела к несоответствиям на каждом этапе жизненного цикла платежа. Команда столкнулась с необходимостью экстренного дебаггинга и внедрения временных решений-«костылей» для стабилизации процесса.

Ситуация стала наглядным примером того, где принципы предметно-ориентированного проектирования (DDD), примененные без излишнего увлечения «красивыми схемами», оказались реально полезны. Практический подход к DDD помог выявить bounded context (ограниченные контексты) для сущности «курс валют» и определить, какой сервис должен быть его бесспорным владельцем. Этот инцидент высветил системные риски в распределенных микросервисных архитектурах, где несогласованность данных между службами может привести к финансовым ошибкам и подорвать доверие к платежной платформе.