Airbnb 如何保证全球数十个支付网关的集成和数据一致性?
Airbnb 家的支付系统遭遇的挑战是全球化服务面临多币种多支付网关,核心问题在异步的,分布式的系统里保障事务的一致性。这个流程中需要注意的地方是要做好追踪,一旦断掉一环,就很有可能出现错误和数据丢失。他们解决方案第一保障数据链完整,第二一旦检测到不一致立马自动修复。
整个交易流程中会遇到买卖方,银行,支付网关等等,每个实体都会往支付数据中注入自己的数据。支付系统需要保证的是帐要绝对算对。这里面遇到的支付方有些甚至奇葩到好几天才能帐目生效。也许网络不好,也许某方bug,也许其它原因,支付链条里只要有一方不响应或停止数据流动,整个事务就坏了(out-of-sync)。
好在这类型系统每一方都提供事务报告(transaction reports),我们可以根据事务报告,源头的帐目文件,以及银行流水。在排除掉重复文件后,我们是有办法检测到是不是有一个事务的链条断掉了。
Airbnb 还提供了一条流水线专门跟踪支付退款等数据,从监控的角度来看,他们基于支付的业务来监控整个系统的可用性。Operation 可以很容易将这种指标纳入监控从而进行快速事故响应。