Переписать API Gateway банка так, чтобы никто не заметил: Максим Денушев о том, как менять компонент в самом центре платформы

Автор: Максим Денушев (Точка) · Golang Channel

Максим Денушев работает в банке Точка. Доклад с GolangConf 2024, 31 минута. API Gateway — компонент, через который проходит весь трафик платформы. Переписать его — значит заменить двигатель у летящего самолёта: система должна оставаться доступной, а пользователи не должны заметить, что что-то происходит.

Главная сложность такой задачи не техническая, а операционная. Выбрать новый стек и написать код — это меньшая часть работы. Настоящий вызов — как организовать переход так, чтобы в каждый момент времени система работала корректно для всех клиентов. Денушев разбирает подход, который команда применила: постепенное перемещение трафика через новый Gateway параллельно со старым, профилирование под реальной нагрузкой, работа с проблемами обратной совместимости, которые обнаруживаются только когда через систему идут реальные данные. Это не история успеха без шрамов — доклад честный о том, с какими проблемами они столкнулись и что их не предусмотрели заранее.

Кому смотреть: backend-инженерам и архитекторам, которые стоят перед задачей замены критического инфраструктурного компонента — не только Gateway, но и любого, через который проходит весь трафик.

Из этого можно взять в работу: если вы планируете значительное изменение инфраструктурного компонента — составьте список всего, что через него проходит, и определите, какие клиенты заметят изменение первыми. Это первый шаг к плану миграции, который не ломает продакшн.

Сигналы того, что текущий Gateway перестаёт устраивать: производительность под нагрузкой не соответствует требованиям, добавление новых фич требует обходных путей в архитектуре, операционная сложность выросла настолько, что изменения занимают непропорционально много времени. Денушев описывает, как команда диагностировала, что находится именно в этой точке.

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

Инфраструктура вокруг приложения: Gateway — это не только код, это service discovery, конфигурация маршрутизации, сертификаты, логирование, трейсинг. При переписывании всё это нужно переносить или адаптировать. Денушев отдельно разбирает, как они решали эту часть — потому что именно здесь обычно теряется время при замене.

Обнаружение проблем: некоторые несовместимости проявляются только под реальным трафиком — edge cases в заголовках, клиенты с нестандартным поведением, паттерны запросов, которые не предусмотрены спецификацией но работают со старым Gateway. Доклад честен о том, что часть проблем была найдена уже в процессе миграции.