[Fintech情报局]不可能的网联之五:网联是否也”容错“

金融混业观察, 获得微信公号“双认证”(媒体认证及原创认证),关注请点击图上方小字金融混业观察参加VIP计划请见文尾

观察者言:分布式之所以可以承受巨大流量的前提,是和中心式相比,可以一定程度容错。建设中的网联为了承受巨大的支付流量压力,选择了分布式架构(参见本公告系列文章),那么网联是否也会出现一些时间段内的数据不一致呢?

注:本公号新近推出新栏目“FinTech情报局“供试读,首批文章来自网联的技术专家们,解析网联如何完成“不可能的任务”,今日是最后一篇。日后相关精彩文章请移步财新数据+相关栏目。

财新特约作者  周欢/文

2015年5月27日杭州市萧山区某地光纤被挖断,全国多地网友反映支付宝出现"无法登陆"异常。一时间,民心骚动,腾讯新闻网友“匆匆那些年”抱怨说:“试着登录了半个多小时,还以为被坏人转走了,支付宝赔偿我精神损失。”得到了广大网友的一致声援,可以发现广大百姓皆在担心支付宝不能恢复,或者恢复后个人账户余额与实际存储的不一致而担忧。支付机构如此,银行账务紊乱的例子也时有发生。当然这一切也不是机构或者银行所希望出现的。

网联作为向支付机构提供支付业务转接清算的专业化服务机构,秉持对社会和百姓的责任,致力于提供不重复、不遗漏、不出错的资金清算服务,全力保障数据高一致。为实现该目标,平台重点从数据库、网联内部、平台与机构银行外部三个维度来对数据一致性加以保障。

搭建安全稳定数据库

众所周知,数据库是很成熟的数据存储介质,而丢失数据,首当其冲就是用户的大量投诉。因此,数据库层面必须保障数据强一致性,网联平台从数据库安全到数据库容灾,再到数据库灾难恢复都努力做到这一点。

(一)数据库安全

目前,平台选用MySQL数据库,是目前世界上较为成熟稳定的数据库,且是全球最受欢迎、使用率最高的数据库,足以保障平台的安全、稳定运行。在该数据库下,交易要么成功、要么失败,并且各个交易间相互独立,互不影响,从而保障了清算服务不出差错。平台在设计之初将交易流水号和机构号上设置为唯一,确保了任何一家机构的交易流水号的唯一性,进而保障了清算服务不重复。任何交易的产生都会持久化到磁盘上,保障了数据不遗漏。

为保障数据存储的完整性,[网联使用数据库异常自动切换组件,最大程度的提高可用率。网联数据库集群选用主备架构,在主库出问题时如何保障数据一致性呢?网联选择在成熟的高可用自动切换组件基础上,进行二次开发,保障主备之间强一致性。如果单台数据库出现故障,监控程序会自动探测多次,确认异常后,再交给仲裁探测,双方确认数据库异常后,开始检查主备数据一致性状态,只有数据一致,才会发生自动切换,否则该套数据库停止提供服务。如果主备都异常,会在提交央行大额清算系统前从同城灾备数据库中拉取数据,应用日志也会抓取交易成功数据,全面保障数据最大化和最终一致性。

(二)数据库容灾

在容灾方面,平台整体采用多地多中心的分布式架构,整个数据库集群采用成熟的CDS组件进行分库分表,确保数据相互独立又完整统一。任何一套数据库都包含同机房主库、同机房备库、同城灾备、异地灾备4台机器,某城市出现地震等灾难性故障时,能及时从同城灾备或异地灾备中恢复数据。那么容灾备库是如何保证和主库的一致性呢?为了尽可能减少对业务的影响,网联容灾库选用异步方式同步,仅从数据库角度显然无法保证容灾库的强一致性。为此,网联采取了多项措施,包括从应用日志中恢复数据、交易到清算半同步方式,如果交易主备都宕机,可以从清算库恢复交易数据、兜底等等方式,保证数据最终一致性。

 

完备的内部高一致性

为保障交易清算一致性,网联内部做了大量的方案,通过与市场顶尖专家充分探讨,理论与实践相结合,最终采取按每小时清分一次的方式进行任务处理。当一小时的交易都完成时,系统会首先校验交易和清分数据的一致性,发现异常时及时告警,通知相关人员紧急处理。接着其次,清算系统在发起清算任务前,也会自动检查上个批次交易数据的准确性,如果发现数据不一致,清算任务会自动停止,监控通知人工介入,宁可延迟至下一批次清算,也坚决不能让清算出错。如果在规定时间内,数据恢复一致,会立刻启动对该批次的清分任务,保证了交易清算数据的一致性和最大化。如果恢复时间较长,不能在规定时间内恢复,那么对清算库现已有的数据清分,先保证清算最大化。遗漏的数据通过第2天进行补清分和补对账确保数据一致。

网联会将清算结果生成对账文件,分别发送给相应银行和机构确认,确保网联清算的数据与机构、银行三方一致。那对账文件是何时生成的呢?清结算系统在清分时按原有清分逻辑进行处理,在批次清分汇总任务完成后,清结算系统主动向对账系统生成对账通知:某个批次、某些中心、某些库、总笔数(以库为单位分别统计)、清分状态信息。

 对账系统收到清结算系统通知后,对账子系统按照某个批次、某些中心、某些库、清分状态读取清算库的交易记录,对账子系统根据通知的总笔数进行数据完整性校验,校验完成后生成常规交易对账单,保证清算与对账单数据结果的一致性。

 

参与者一致性

交易以平台状态为主,网联会将清算结果生成对账文件,分别发送给相应银行和机构,让他们确认,确保网联清算的数据与机构、银行三方一致。清结算系统在清分时按原有清分逻辑进行处理,在批次清分汇总任务完成后,清结算系统主动向对账系统通知。对账系统收到清结算系统通知后,对账子系统读取清算库的交易记录,对账子系统根据通知的总笔数进行数据完整性校验,校验完成后生成常规交易对账单,保证清算与对账单数据结果的最终一致性。

为解决交易不一致问题,网联平台建立了交易查询重试、关单机制、终态通知、对账机制、差错处理等多重机制,确保与银行、机构三方数据一致性。具体流程如下:

首先,机构会发起交易,通过报文发给平台渠道,渠道会转发交易模块进行处理,同时调用银行前置接口查询交易状态,如果处于未名状态,则会重试3次,最终会将网联交易状态置为终态,返回支付机构,协议支付整个过程最长持续1分钟,退款和付款10分钟,最后进行关单处理。整个过程在架构和报文上保证了三方一致性。

其次,每个批次清算完成后还会进行对账处理,平台会给机构和银行发送对账文件,机构和银行会与平台进行对比,如果发现不一致,将立刻通知网联,如果平台发现数据存在缺失,会进行补对账处理,重新生成对账文件,发送给机构和银行,确保三方对账一致。

最后,当银行或机构发现自己对账文件和网联对账文件不一致时,银行或机构会始终以网联平台为准,银行或机构将走差错处理。如果出现银行扣款,但用户还未收到商品时,此时银行就会将这笔资金退换给用户,用户就不要再担心多扣款的情况了。

 

综上所述,网联平台会从各个维度去保障数据一致性,即使机构或者银行造成了不一致,网联也会把他们纠正为一致状态。即使极端情况下,出现数据短暂不一致场景,平台也会通过对账、差错处理等措施把数据补上,保障数据最终一致性。■



作者供职于网联



财新更多网联独家报道:

《财新周刊》2016年第34期“网联归位”“

《财新周刊》2017年26期“‘不可能’的任务”

《财新周刊》2017年第32期 “银联打网联 支付三国杀”

财新网即将全网收费阅读。现在按年订阅财新周刊,有机会以惊喜价上升到“财新通”,通览全网精彩内容

[Fintech情报局]不可能的网联之五:网联是否也”容错“

扫码订阅财新数据+ ,能先睹为快 ,并有专享内容。

[Fintech情报局]不可能的网联之五:网联是否也”容错“

特别提示

公号繁似牛毛针,何不就此择精准?请即日加入本公号的VIP组。可直接向“金融混业观察”后台回复:真实姓名+微信号+单位+职务+联系方式(邮箱/手机等,绝对保密)

加入VIP组计划后,您可以专享以下服务:

1、不定期收到VIP组专享特殊文章推荐,专题回复

2、VIP组成员可优先参加“金融混业观察”粉丝线下活动,与行业大佬面对面

3、优先享受财新的内容推广计划

未来还有更多惊喜~ 赶快加入VIP组吧!

金融混业大潮势不可挡,各类金融创新层出不穷,金融混业观察(caixinfinance)秉承新闻专业主义精神,提供客观及时的金融行业报道精粹,分享深度专业的评论点睛。欢迎建议、意见、合作、投稿至jinrongwexin@caixin.com

特别声明:

"金融混业观察"由财新传媒出品。"金融混业观察"所刊载内容之知识产权为财新传媒及/或相关权利人专属所有或持有。未经许可,禁止进行转载、摘编、复制及建立镜像等任何使用;转载请联系yongwang@caixin.com

财新网App5.0版本已全新上线!扫描二维码(可长按或保存到相册进行识别)下载。

[Fintech情报局]不可能的网联之五:网联是否也”容错“