О какой системе речь
FuelProcessing — система топливных карт. По каждой карте задан лимит: сколько топлива можно заправить. Лимиты хранятся у нас в базе и должны постоянно совпадать с личными кабинетами поставщиков топлива — ВИНК (Газпром нефть, Роснефть, Татнефть и др.). Если наша база и кабинет поставщика разъезжаются — карты начинают работать не так, как ждёт клиент. Почти все обращения этих трёх дней — именно про такие расхождения.
Пять обращений по порядку
Каждая история — поступивший запрос и что по нему сделано.
«Баланс пополнил, а лимиты слетели»
22 июня, вечерЗапросКлиент СТК‑75 (договор А1353): после пополнения баланса карты перестали работать. Поручено разобрать ситуацию по базе прода и логам.
«Лимиты не срабатывают»
23 июня, утроЗапросЖалобы: лимиты не срабатывают по Роснефти (карта 7826…033) — требуется проверка. План работ: 1) не отправлять ошибочные нули; 2) логировать отправку лимитов; приоритет — договор А1353.
«Стёрлись лимиты — нужно восстановление»
23 июня, деньЗапросПо ООО «Лайт Скай» стёрлись лимиты ГПН — проверить наличие лимитов и подготовить восстановление. Дополнительно: написать скрипт, который по всем картам Лайт Ская опрашивает ГПН и синхронизирует лимиты.
«Проверь синхронизацию — всё висит»
23 июня, вечерЗапросПроверить текущую синхронизацию с Роснефтью. При обнаружении затыка — перезапуск контейнера и MR, чтобы отправка не висела.
«Настрой логи и дашборд, проверь конкретные карты»
24 июня, утроЗапросНастроить сбор логов с привязкой к хранилищу и ротацией, проверить поток логов и оформить MR; сделать отдельный дашборд. Плюс точечные проверки конкретных карт ГПН и Татнефти («почему 1 литр», «кто и когда поставил лимит»).
Что попутно улучшили
Кроме тушения пожаров, по ходу дела сделали ещё много полезного.
- Обработку лимитов разнесли по поставщикам — затык у одного не вешает остальных
- Защита от зависаний (жёсткий таймаут) — у всех 10 поставщиков сразу
- Дашборд‑сверка по поставщикам + отчёт «что изменилось»
- Сквозной сбор обращений к поставщикам в общее хранилище логов
- Отдельный дашборд активности + ротация логов
- Логирование отправки лимитов — теперь видно, что и когда ушло
- Окончательная защита от дублей лимитов + перенос данных
- Свежий тестовый стенд и приведённые в порядок тесты
- Татнефть: «мёртвый» адрес посредника вынесен в настройку
- Увеличены внутренние пулы под пиковую нагрузку
Инструмент, который помогает с такими разборами
Параллельно дорабатывается внутренний инструмент fuel‑architect — чтобы разборы вроде описанных выше делать быстрее и точнее.
fuel‑architect превращает большую и сложную систему топливных карт в понятную карту: на экране — интерактивная схема всей архитектуры, видно, что из чего вызывается и как связаны между собой части системы. Но главная ценность — команда из 11 «доменных экспертов»: каждый знает свой кусок системы (лимиты, биллинг, интеграции с поставщиками, карты, контракты и т.д.) и умеет читать реальный код. Инженер задаёт вопрос или просит найти ошибки — эксперт читает нужные файлы, указывает на проблему с конкретной строкой кода и предлагает готовую правку. Применять её или нет — решает человек.
Хронология трёх дней
- Обращение СТК‑75 (А1353): карты перестали работать после пополненияобращение
- Остановили очередь Роснефти, поставили защиту в кодрешение
- Выкат: устранён корень дублей; обработка разнесена по поставщикамвыкат
- Жалоба: лимиты не срабатывают по Роснефти (А1353)обращение
- Выкат «предохранителя» от ошибочного нулявыкат
- Система сама выровняла лимиты (~9 карт/мин)итог
- Обращение «Лайт Скай»: стёрлись лимиты ГПНобращение
- Зависший запрос заморозил синхру Роснефти на 3,5 чсбой
- Перезапуск разблокировал синхронизациюрешение
- Выкаты: таймаут всем поставщикам + защита от дублей + перенос 762 849 записейвыкат
- Выкат: сквозной сбор логов + дашборд активностивыкат
- Точечные проверки карт; финальная «уборка» по Роснефти в фонеитог
Ключевые решения
Главное — правильные лимиты
Фокус на корректности лимитов в системе. Почему карта заблокирована — отдельный вопрос к клиенту, не цель этих работ.
Просто и надёжно «здесь и сейчас»
Двухэтапный подход вместо переусложнения: сначала рабочее и безопасное решение, потом улучшения.
Не восстанавливать вслепую
Сначала сверка с реальным кабинетом поставщика. Заливка из устаревшей истории создала бы неверные лимиты.
Чинить класс, а не случай
Защиту от зависаний и изоляцию поставщиков выдали сразу всем 10, а не только проблемной Роснефти.
Сделано и что осталось
✅ Закрыто
- Роснефть: лимиты доезжают, отправка не зависает, дубли убраны
- 6 выкатов на прод — все через тесты и сборку
- Лайт Скай: инструмент сверки и резервная копия готовы, корень устранён
- Все 10 поставщиков защищены таймаутом и изолированы друг от друга
- Появились сквозные логи и дашборд активности
- Татнефть: «мёртвый» адрес заменён рабочим
○ В работе / на потом
- Пара улучшений по логам ещё в ревью
- Полная «уборка» по Роснефти (~19 600 карт) доезжает в фоне
- Отправку транзакций после простоя стоит распараллелить