美国运通采用细胞架构打造弹性支付系统
速览
美国运通宣布采用细胞架构以增强支付系统的弹性与韧性。该架构旨在通过模块化设计提高系统的稳定性和容错能力。此举有助于应对日益复杂的支付环境并保障业务连续性。
AI 深度解读
American Express:基于单元架构构建高韧性支付系统
背景
American Express(美国运通)的核心支付生态系统是一个全球性平台,服务于世界各地的持卡人和合作伙伴。该平台每天处理海量的实时支付交易,对高可用性、低延迟以及可预测的性能有着极高的要求。
在2018年,美国运通启动了一项旨在现代化其核心支付生态系统的旅程。这一平台处理实时的卡片和支付交易,对于持卡人和合作伙伴而言至关重要。在现代化改造过程中,“韧性”(Resiliency)始终被作为首要的设计要求。团队需要一种即使个别组件发生故障也能继续可靠处理交易的架构。这一决策深受其历史设计模式的影响,虽然这些模式早于“基于单元的架构”(Cell-Based Architecture)这一术语的出现,但二者共享许多相同的原则。
随着平台转向云原生技术,美国运通必须重新思考如何为韧性和可扩展性进行设计。基于单元的架构通过隔离故障、保持低延迟处理以及在不扩大故障域的情况下扩展容量,成为实现这一目标的关键手段。
核心内容
什么是基于单元的架构?
基于单元的架构是一种在云原生分布式系统领域日益流行的架构模式。其核心理念是将相关的微服务、数据库和其他组件分组为独立的实例,称为“单元”(Cells)。每个单元能够独立运行,不依赖其他单元。
这种架构的主要优势在于减少故障的“爆炸半径”(Blast Radius)。由于每个单元都是独立的,如果一个单元出现问题,不会影响其他单元。其权衡在于,基于单元的架构通常会增加管理开销和架构复杂性,因为需要精心设计以确保单元真正独立,并适当本地化数据。然而,对于支付这类关键任务系统,减少爆炸半径和提高韧性的收益远大于增加的复杂性。此外,实施良好的基于单元的架构还能通过减少外部依赖和网络跳数来降低延迟,并通过引入额外的独立单元来改善扩展能力。
美国运通如何实施基于单元的架构
美国运通核心支付生态系统的每个实例都被设计为一个单元,具备以下特征:
- 独立部署单元:能够独立处理支付交易。
- 独立组件集合:拥有自己的微服务、数据库和其他组件。
- 单一故障域:如果一个单元出现问题,故障不会蔓延到单元边界之外。
- 独立维护:可以在不影響整体系统或与其他单元协调的情况下,将单元移出轮转以进行维护或应对故障。
- 无同步跨单元依赖:在交易处理的关键路径中,不存在同步的跨单元依赖。
单元是由其故障边界定义的,而不是特定的基础设施构造。在实践中,单元从不跨越多个区域——处理交易所需的一切(DNS、数据库、微服务和支撑服务)都保留在该边界内。
数据与处理本地化原则
支付处理需要数据,如汇率、商户类别代码等。美国运通根据数据的静态与动态特性采取不同的策略:
静态与半静态数据复制 对于汇率和商户类别代码等静态或半静态数据,美国运通将其复制到每个单元。
- 预填充策略:不在交易处理期间依赖回退读取到集中式的记录系统,而是提前在每个单元中预填充这些数据。
- 优势:这保持了参考数据在交易到达前的本地化,避免了处理过程中的缓存未命中延迟,并保留了关键路径的隔离性。
- 非关键路径:复制工作发生在交易路径之外,从而在不引入同步跨单元依赖的情况下保持数据的本地可用性。
动态数据路由 并非所有数据都是静态的,也不是所有数据都能预填充。对于随每次交易变化的动态数据,数据复制可能不够快,无法确保每个单元在正确的时间拥有正确的数据。为了避免将交易路由到没有最新数据的单元(这会增加延迟并可能导致处理失败),美国运通采用确定性路由(Deterministic Routing)。
- 全局交易路由器(Global Transaction Router):在文章《Migrating the Payment Network Twice with Zero Downtime》中介绍的全局交易路由器负责管理连接并将交易路由到适当的单元。它基于对支付规范的理解,根据交易数据做出路由决策。
- 路由依据:可以根据合作伙伴、市场或支付类型进行路由。关键在于,当交易间需要强数据一致性时,选择性地将交易路由到所需数据所在的位置。
- 异步复制:故障转移数据通过基于消息的复制在单元间同步,该复制在交易路径之外异步进行,因此不会影响延迟或可用性。没有在途交易需要等待复制完成;如果需要最新状态,全局交易路由器会将交易发送到该数据已具备权威性或可用性的单元。
强制执行入口和出口边界
全局交易路由器不仅是路由工具,也是“仅本地处理”策略的关键执行者。
- 入口强制:交易必须通过全局交易路由器进入单元。
- 重路由强制:如果单元无法处理交易且需要将其重路由到其他单元,也必须通过全局交易路由器。
- 通信限制:微服务之间的通信被限制在单元 Kubernetes 网络内的 Pod 到 Pod 交互,确保所有处理都保持在单元边界内。
- 数据库访问限制:仅允许微服务访问本地化的数据库实例,以保持可预测的延迟并避免不必要的网络跳数。
关键要点
- 故障隔离:基于单元的架构通过将故障限制在定义的边界内,显著减少了故障的爆炸半径,确保单个单元的故障不会级联影响整个平台。
- 数据本地化:静态和半静态数据通过预填充复制到每个单元,消除了交易处理期间的同步远程查找,降低了延迟。
- 确定性路由:对于动态数据,利用全局交易路由器根据交易特征(如合作伙伴、市场)进行确定性路由,将交易发送到拥有权威数据状态的单元,避免数据不一致和额外延迟。
- 异步复制:数据复制和状态同步在交易关键路径之外异步进行,确保交易处理的高可用性和低延迟,无需等待复制完成。
- 严格边界:通过强制所有入口和出口流量经过全局交易路由器,并限制微服务仅与本地数据库通信,实现了严格的处理本地化,消除了跨单元的同步依赖。
- 独立运维:每个单元作为独立的故障域,允许在不影响整体系统的情况下进行维护或故障隔离,提高了系统的可维护性和韧性。
意义与影响
美国运通的核心支付生态系统通过采用基于单元的架构,成功地在云原生环境中实现了高韧性、低延迟和可扩展性。这一架构不仅解决了传统集中式系统在故障传播和处理延迟方面的痛点,还为全球规模的关键任务系统提供了可靠的处理能力。
该实践表明,对于支付等对可用性和性能极其敏感的系统,牺牲一定的架构复杂性以换取更强的故障隔离和更低的延迟是值得的。通过数据本地化、确定性路由和严格的边界控制,美国运通构建了一个能够抵御局部故障、保持高性能并易于扩展的支付平台。这不仅提升了持卡人和合作伙伴的体验,也为其他大型分布式系统提供了宝贵的架构参考。
