← На главную

American Express: cell-архитектура превращает сбои в простую команду

15.06.2026 22:36 · hackernews

American Express перестроила ядро своей платёжной экосистемы на cell-based architecture. Каждая клетка — полностью независимый блок: со своими микросервисами, базами данных и всем, что нужно для обработки транзакций. Клетка — единый домен отказа: если что-то пошло внутри, ошибка не расползается дальше её границ. Клетки никогда не выходят за пределы одного региона — DNS, базы, сервисы живут локально.

Статические и полустатические данные (курсы валют, коды категорий) реплицируются во все клетки заранее, вне транзакционного пути. Транзакция никогда не дёргает центральный источник синхронно — данные уже есть на месте. Для динамических данных, которые меняются с каждой операцией, репликация не успевает. Вместо этого используется детерминированная маршрутизация: Global Transaction Router на границе направляет транзакцию прямо в ту клетку, где уже хранится актуальное состояние. Клетки общаются только через этот роутер — прямых кросс-клеточных вызовов нет, что жёстко изолирует зависимости.

Когда клетка падает, новые и даже уже выполняющиеся транзакции перенаправляются в здоровую. Транзакция не доделывается на двух клетках — она полностью перезапускается в новой с исходными данными. Точка невозврата — отправка во внешнюю систему (например, эмитенту карты). До этого момента можно безопасно перезапускать, а после — нет. Идемпотентность обеспечивается уникальным идентификатором транзакции, который остаётся тем же при повторных попытках; downstream-системы по нему отсекают дубли.

На границе зависимостей минимум и все вне критического пути. Логирование асинхронное с политикой усечения буфера — если буфер полон, логи дропаются, но транзакции идут дальше. Конфигурация хранится в памяти и обновляется асинхронно — при падении конфигурационного сервиса система живёт с последней известной конфигурацией. Global Transaction Router может переключать трафик между клетками по процентам, позволяя плавно выводить клетку на обслуживание или постепенно проверять восстановленную.

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

Читать оригинал →