美国运通核心支付平台韧性设计:细胞架构Cell-Based如何让支付系统在故障时稳如泰山
美国运通核心支付平台采用细胞架构,通过将微服务、数据库等组件封装为独立细胞,实现故障隔离、低延迟处理和弹性扩展。文章阐述了数据本地化、确定性路由、边界强制和边缘依赖最小化等原则,展示了如何将重大故障转化为可控路由决策,支撑全球支付系统的高韧性运行。
细胞架构撑起支付系统不垮台
支付系统要是垮了,那可不是闹着玩的。美国运通每天处理海量真实交易,必须保证高可用、低延迟、性能稳。他们搞了一套细胞架构,把故障圈在固定边界里,恢复起来又快又准。这套打法的核心就一句:别让一个点炸了全盘崩,每个细胞自己管自己,挂了就换一个顶上。
核心支付生态系统的现代化之路
二零一八年,美国运通启动了一个大项目,要把核心支付平台彻底翻新。这个平台处理的是实时卡交易和支付交易,对持卡人和合作伙伴来说属于命根子级别的服务。在翻新过程中,韧性不是后来补的,而是从设计第一天就写进需求里的。他们需要一种架构,哪怕某个零件坏了,系统还能接着处理交易,不能停摆。
这个思路其实受了他们历史设计模式的影响。那时候还没“细胞架构”这个时髦词,但很多想法已经相通了。新平台要用云原生技术,那就不能按老一套想问题,得重新琢磨怎么搞韧性和扩展性。接下来要聊的,就是他们在核心支付生态里遵循的几个设计原则。这些原则不光让支付更靠谱,还顺手把延迟降下来,扩展起来也更顺手。
细胞架构到底是个啥东西
细胞架构在云原生分布式系统圈子里越来越火。它的想法挺直白:把相关的微服务、数据库和其他零件打包成一个个独立的实例,管这个叫细胞。每个细胞都能自己转,不靠别的细胞活着。
拿图来说,每个细胞里有自己的服务和数据,所以故障就闷在自己肚子里,不会扩散到整个平台去。细胞架构最大的好处就是缩小故障爆炸半径。每个细胞独立,一个出问题,别的该干嘛干嘛。代价是管理开销变大,架构也变复杂了,因为得精心设计确保细胞真能独立,数据也得放对地方。
但对支付这种关键系统,爆炸半径缩小和韧性提升带来的好处,比多出来的复杂程度值多了。他们发现,只要搞得好,细胞架构还能帮平台降低延迟,因为外部依赖和网络跳数少了,扩展也简单,多加几个独立细胞就行。
我们是怎么落实细胞架构的
美国运通核心支付平台的每个实例就是一个细胞。这个细胞得满足几个条件:自己能部署,自己能处理支付;有自己的微服务、数据库和其他零件;它是一个故障域,出问题不会往外蔓延;可以单独拎出来维护或者应对故障,不影响全局,也不用跟别的细胞商量;在处理交易的紧要路径上,不能有跨细胞的同步依赖。
细胞是按故障边界定义的,不是按什么基础设施构造。实际上,细胞从来不会跨区域,处理交易要用的所有东西,DNS、数据库、微服务、支持服务,全都待在边界里头。为了做到这点,他们搞了一套核心原则来指导设计,确保细胞真独立、真有韧性。
数据和处理的本地化是默认选项
处理支付离不开数据:汇率、商户类别码等等。有些数据是固定的,有些每一笔交易都在变。对于汇率和商户类别码这种静态或者半静态数据,他们提前复制到每个细胞里。这样一来,处理交易的时候就不用临时去中心系统查了,数据提前备好,避免了缓存未命中的延迟,也保住了关键路径的隔离。
复制数据的活儿走在交易路径外面,所以数据在本地随时可用,又不会引入同步的跨细胞依赖。动态数据就不一样了,每笔交易都在变,复制可能赶不上趟。他们不想把交易路由到没有最新数据的细胞,那会增加延迟甚至导致处理失败。
他们的办法是确定性路由,把交易送到已经有正确数据的细胞去。有个全局事务路由器专门管连接和路由,它只要看懂交易数据里的一点信息就能做决定。比如按合作伙伴、市场或者支付类型来路由,具体怎么分看交易数据和场景。关键是当交易之间需要强数据一致性时,能有选择地把交易送到该去的地方。
这样一来,动态数据路由和复制就分开了:路由器把交易发给已经存有权威动态状态的细胞,复制则在关键路径外面异步进行。他们还把微服务通信限制在细胞内部的Kubernetes网络里,确保所有处理不出界。
跨细胞的故障转移数据同步也是异步的,不影响延迟和可用性。正在处理的交易不用等复制完成,如果需要最新状态,路由器直接把交易送到数据已经权威的地方去。微服务只跟本地数据库实例说话,
延迟可预测,网络跳数也省了,但这就要求路由决策必须算得准。
入口和出口的边界必须 enforce 住
全局事务路由器不光管路由,还是“本地处理”原则的关键 enforcing 角色。交易进细胞必须走路由器;如果细胞处理不了要转到别的细胞去,也得通过路由器。这么一来,路由器就成了一个支付网格,把全球的细胞串起来。
所有跨细胞的流量都 funnel 到全局事务路由器,严格守住细胞边界。随着平台长大,防止跨细胞依赖越来越难。通过路由器严控跨细胞通信,细胞之间没法自己搭上关系,因为只有路由器能跨细胞传话。这有时候会导致服务重复,本来可以共用实现的地方也得各自搞一套,但细胞独立性保住了,跨细胞网络跳数少了,延迟也降了。
可观测性也是同样道理。每个细胞先把日志、指标、追踪发到本地的可观测组件,这样就算可观测栈坏了一块,也就少看一个细胞的视角,整个平台不受影响。全局大盘、告警和全舰队分析还是有的,但那是异步汇总的,不在交易关键路径上。
细胞挂了就挂,别的细胞顶上
把交易 reroute 到别的细胞,是韧性策略的关键一环。故障发生了,影响就关在出事那个细胞里,交易自动转到健康的细胞重新处理。他们不光 reroute 新进来的交易,正在出事细胞里处理到一半的交易也 reroute。
支付处理子系统用的是编排式微服务架构,一个编排微服务管整个工作流,调用其他微服务干具体活。下游服务开始出问题时,编排器检测到故障就停下处理,把交易送回全局事务路由器,让它 reroute 到别的细胞。
他们不尝试在跨细胞的情况下恢复处理到一半的交易,而是在另一个细胞里用原始交易数据重新开始处理。这个重启只有在交易还在核心支付生态内部时才安全。一旦交易发到外部系统比如发卡行,那就是不归点,之后就不能 reroute 了。
卡授权交易的结构让不归点靠近处理流程的末尾。如果交易在不归点之前失败,就能安全 reroute 重新处理,不用担心重复交易或数据一致性问题。其他支付类型则靠事务标识符管理幂等性,每次交易带一个唯一标识,重试和 reroute 都不变。下游系统用这个标识来发现和压制重复请求,让重试和 reroute 安全进行,不会搞出数据不一致。
重启模型强调了一个重点:细胞之间不能共享状态。共享状态会带来同步问题和一致性风险,尤其在故障转移时。细胞之间通信一断,可能影响全球交易处理,这在支付系统里是绝对要避免的。他们的架构里,细胞是松耦合的,每个细胞有自己的数据库集群,微服务只跟本地数据库通信。细胞挂了,影响就闷在里面,别的细胞正常干活。reroute 的交易不依赖之前细胞的状态。
任何时候,一个细胞都可以被摘出轮转。自动或者手动摘出来后,别的细胞补上。这不是说必须一次性切完,路由器可以按百分比调流量,慢慢把细胞腾空做维护,或者让恢复中的细胞带点负载验证一下,出事故时响应也更从容。
边缘的依赖要压到最少
全局事务路由器在边缘,是个关键服务,管连接、路由和韧性。为了保证它自己靠谱,系统里的依赖得尽量少。越靠近边缘,依赖越要精简。不光是减少依赖数量,还要把它们挡在关键路径外面。
日志基础设施要是挂了,不能影响交易处理。他们用异步日志记录器,配了缓冲区截断策略,缓冲区满了就丢日志,不阻塞交易。配置服务要是挂了,就用最后一次拿到的配置继续跑。内存里维护一份配置,异步更新,配置服务不可用时就用老配置顶着,等它恢复了再拉最新的。
边缘路径保持精简和有韧性,日志和配置都异步处理,不让这些依赖挡住交易。把依赖赶出关键路径,故障点就少了。这需要主动做取舍:接受非关键功能降级,比如日志和指标,来保住交易处理。
总结
在分布式支付系统里,韧性不是靠监控和重试堆出来的,而是靠定义清晰的故障边界,并通过设计 enforce 住这些边界。通过把核心支付生态组织成一个个隔离的、能独立恢复的细胞,系统把重大故障变成了可控的路由决策。
本地化、确定性路由、幂等处理和严格的边界 enforcement 协同工作,确保系统的增长和变化不会增加风险。
这套规则是细胞架构的基石,支撑着全球支付平台以低延迟和高韧性运行,这些原则也在持续引导着系统的演进。
American Express 核心支付生态系统团队