Архитектура на клетках: как American Express обеспечивает отказоустойчивость платёжных систем

American Express опубликовала подробный разбор архитектуры своей платёжной системы. Вместо традиционной модели, где сбой в одной части может скосить всю систему, компания разделила её на независимые "ячейки" (cells). Каждая ячейка обрабатывает платежи самостоятельно, не зависит от остальных и содержит собственные сервисы, базы данных и всё необходимое для работы. Если одна ячейка выходит из строя, остальные продолжают работать, а транзакции автоматически перенаправляются в здоровые ячейки.
Ключевые факты
- Система American Express обработала в 2018 году переход на облачную архитектуру, сохранив требование максимальной надёжности
- Cell-based подход снижает "радиус взрыва" сбоя: локальные отказы не распространяются дальше границ ячейки
- Статические данные (курсы валют, коды категорий) реплицируются во все ячейки заранее, чтобы не требовать синхронных запросов во время обработки платежа
- Динамические данные маршрутизируются: Global Transaction Router направляет платежи в ячейку, где уже есть нужное состояние
- При сбое транзакция не возобновляется с того же места в другой ячейке, а перезапускается полностью, чтобы избежать конфликтов состояния
Ред. В платёжных системах мудрость в том, что проще перезапустить, чем синхронизировать.
Почему это важно
Платёжные системы это самое основание цифровой экономики. Когда они падают, падают не просто проценты конверсии, падают доходы компаний-партнёров, нарушается доверие пользователей. Исторически компании либо наращивали мощь центрального сервера, либо рисковали каскадными сбоями. Cell-based архитектура переворачивает эту логику: вместо "слабое звено может сломать весь квартал" система говорит "локальный сбой обслуживается локально". Это радикально меняет отношение к отказоустойчивости в распределённых системах, где масштаб и надёжность исторически были враги.
Ред. Парадокс: чем больше система, тем она должна быть проще внутри.
Кому это важно
Инженеры инфраструктуры платёжных компаний, банков, финтеха, всем, кто строит систему, где падение одного компонента стоит денег и репутации. Но не только финтех: любой высоконагруженный сервис, где нужна гарантия "работает хотя бы где-то", может взять эти принципы. Облачные провайдеры, провайдеры хранилища, системы обмена данных везде, где вы имеете дело с миллионами одновременных операций и не можете себе позволить падение. Даже маленькие стартапы, которые думают, что им это не нужно, находят себя в ситуации, когда одна ошибка в развёртывании убивает всех пользователей сразу.
Ред. "Нам это не нужно" это то, что говорят до первого инцидента в субботу в 3 утра.
Как это применить
Если вы проектируете высоконагруженный сервис, начните с вопроса: где граница ячейки? Это может быть регион, поп (point of presence), или логическое разделение по типу данных. Затем для каждой ячейки определите, какие данные она должна держать локально (создать копию заранее), а какие приходят динамически (строить маршрутизацию). Не делайте синхронных кросс-ячеечных зависимостей в критическом пути. Если транзакция нуждается в состоянии из другой ячейки, маршрутизируйте туда. Когда сбой всё же случится, убедитесь, что вы можете перезапустить операцию целиком, не завися от её промежуточного состояния. Для этого каждая операция должна быть идемпотентна: уникальный идентификатор позволяет нижестоящей системе заметить дубль и подавить его.
Ред. Идемпотентность это волшебство, которое стоит всего одного поля в таблице.
Можно ли доверять
American Express это не стартап, который рассказывает о своём видении. Это один из крупнейших платёжных процессоров в мире, который обрабатывает триллионы долларов в год. Когда такая компания публикует архитектурный разбор, за ним стоит производственный опыт десятков лет. Но важный нюанс: статья говорит об идеальном состоянии. В реальности такие системы живут в постоянном компромиссе между независимостью ячеек и практичностью: часто дублируются сервисы, которые логически можно было бы шарить, усложняется операционная работа, растут накладные расходы. American Express может себе это позволить. Могу ли вы?
Ред. Никакая архитектура не стоит денег, которые она экономит только в теории.
Риски и подводные камни
Cell-based архитектура блокирует синхронные кросс-ячеечные запросы, что значит, что любая логика, требующая немедленного консенсуса между ячейками, становится невозможной. Если вам нужно гарантировать, что две ячейки "видят" одни и те же данные в один момент времени, такая архитектура вас разочарует. Реplication асинхронна, что означает окна в несколько секунд, когда одна ячейка уже обновилась, а другая нет. Для платежей это решаемо (реplication идёт вне критического пути), но для других типов данных это может быть критично. Кроме того, операционная сложность растёт нелинейно: мониторить нужно не один сервис, а десять независимых копий; развёртывать нужно везде одновременно или избегать мертвых зон несовместимости. И самое тонкое: точка невозврата. Как только платёж уходит во внешнюю систему (эмитент карты), его нельзя перезапустить. Попасть на эту границу слишком рано означает потерять гибкость.
Ред. Распределённые системы это искусство перемещения проблем из одного угла в другой.
«Each cell is able to function independently without reliance on other cells.»
— American Express