美团配送资金安全治理之对账体系建设

随着美团配送业务的飞速发展,单量已经达到千万级别,同时每天产生的资金额已经超过几千万,清结算系统在保证线上服务稳定可靠的前提下,如何系统化的保障资金安全是非常核心且重要的课题,配送清结算系统经过近3年的建设和打磨,在资金安全保障的多个方面均有一些总结和实践,保障资金安全是值得系统思考的课题,只言片语难以全面概括,需要更多的着墨才能较完整阐述,本文侧重点会阐述“对账”的概念,在支付&清结算领域,这是一个非常重要的专业名词,下文将介绍“对账”在分布式系统建设中的实践和解决方案,力求在系统覆盖度、资金准确性、时效等多个维度为系统资金安全保驾护航,实现更健壮可靠的资金履约。

随着美团外卖配送事业的蓬勃发展,配送清结算业务的复杂性也在不断的增高,总结起来,主要有以下几个特点:

在这样的业务背景下,我们的系统可谓险象环生。因业务高度复杂,稍有不慎就会出现问题,面对千万级的日单量,同时还要确保结算金额的准确,这就让我们对问题的容忍度变得极低。这也给我们的资金安全保障造成了巨大的挑战。下面我们列举了一些系统日常运行过程中出现的问题。

可以看出,这些都是一些上下游交互的边界场景,以及遇到的问题。当然不仅限于这些场景,凡是有系统交互、数据交互边界的场景,都会出现此类问题,我们称之为“一致性问题”。经粗略统计,我们清结算系统建立以来有70%左右的问题都属于一致性问题。

导致一致性问题的原因有很多,诸如:

目前配送的日结算金额已达到千万级别,每个一致性问题都有可能给我们整个美团造成巨大的损失。因此如何解决系统的一致性问题成为我们保障资金安全的重中之重。关于一致性问题,业内已经论述的非常成熟了,搜索引擎中搜索“一致性问题”,随处可见此概念的定义、问题阐述、意义以及解决思路,诸如:

下面开始正式介绍美团配送清结算对账体系的构建经验。

对账的概念随着金融、互联网行业的发展,定义上也经历了几个阶段的变化,如下:

配送结算做为核心交易履约系统,上游对接了订单、奖惩、活动等十多个外部系统,下游又承担了对接支付平台、财务系统的职责,不仅“承上启下”,而且涉及业务复杂。而系统内部又历经定价、计费(清算)、记账、汇总账单、付款等多个环节,系统的高度复杂性给对账的全面性和准确性造成了极大的困难,如图:

为了系统更加专业化的实现对账、做好对账,我们对支付、清结算等资金领域进行了体系化的调研和学习,并结合业务的自身的特点,总结了一套对账系统构建的思路方法,并基于该思路进行了较完整的系统化实现。

从整体来看,按照时序维度的先后,系统对账主要分为三阶段的工作。分别是数据准备、数据核对和差错处理。在对账专业概念中,数据核对和差错处理又叫轧账和平账。三个环节紧密相连,从前期准备、问题发现、问题处理三个角度展开对账工作。

数据准备,顾名思义,我们需要把对账所需的全部数据,接入到我们的对账系统。该模块主要实现两个目标:

在数据接入层,我们会针对不同的数据接入方提供三种不同的数据接入模式。

数据核对是对账中最核心的一个阶段。其目标是发现问题数据。数据核对阶段我们的两个目标是保障数据核对的覆盖度和准确性。经过总结和梳理,数据核对过程可以分为以下5个环节。

1.问题梳理

由于数据核对的目标是发现问题,那么我们进行数据核对就要从问题出发,首先明确我们要通过对账发现哪些问题,只有这样才能保证数据核对的覆盖度。经过梳理,我们发现在数据流转中过程中数据的不一致问题可以统一归结为三类,分别是漏结、重复结、错结。我们可以从这三个角度去统一进行问题梳理。下面介绍一下这三种错误类型的具体含义。

2.对账方式

对账方式主要分为两种,单向对账和双向对账。

显而易见,双向对账更能够全面的发现问题。因此在条件允许的情况下,我们会优先选择双向对账。

3.对账粒度

对账粒度也分为两种,分别是明细对账和总数对账。

因此,推荐的做法应该是以明细对账为主,定位具体问题。以总数对账为辅,对明细对账的结果进行复核兜底。

4.对账口径

对账口径,也就是具体的对账逻辑的设计。我们会提供固定的对账模板,供不同的对账场景选取。如果某些特殊场景对账模板不能覆盖,也可以采取对账逻辑自定义的方式进行对账。

经过总结我们发现,对账的形式无非就是两方比对和自身异常检测两种。两方比对又可以细分为一对一、多对一、一对多。比对方法也主要是分为条目匹配和金额匹配。自身异常检测主要是重复性和异常状态的检测。我们把这些通用的对账逻辑模板化,减少重复的开发工作。

5.对账时机

数据核对的最后一步就是对账时机的选择。分为离线对账和在线对账。离线对账主要是通过固定的周期进行对账。最短周期为T+1。它的好处是适用性较强,基本可以覆盖所有的对账场景。而在线对账又分为实时对账和准实时对账。实时对账和准实时对账的区别主要是实时对账耦合在结算链路中,可以在发现问题数据时,对结算流程进行拦截,而准实时对账是异步进行的,不具备拦截能力。在线对账有一定的局限性,一方面它依赖于对账数据是否能实时的准备好,另一方面也比较占用系统资源。因此我们的做法应该是以周期对账为主,在某些实时性要求比较高,且条件满足的场景使用在线对账。

差错处理主要是对数据核对过程中发现的问题数据进行处理。我们会建立一个统一结构的差错记录,将数据核对发现的问题进行统一存储。差错记录中的数据会进行二次核对,避免由于日切等原因造成的问题错报。对于那些真实存在问题的数据我们会提供两种解决模式,如果是常见的问题,且有一套标准的解决方案的话,我们会把它系统化,采取系统自动修复的方式;如果系统无法自动修复,那么我们会进行系统报警,并进行人工处理。

综上所述,对账体系的整体架构,分为三个模块,分别是离线对账平台,在线对账平台和平账中心。完全是按照我们上面的对账思路设计的。三个模块互相协作,一体化的完成数据准备、数据核对、问题处理三部分工作。由于我们整个清结算系统是围绕不同的费用项建立的,因此费用项也是我们设计对账、执行的对账一个最小粒度的单元。

具体介绍下三个模块。

离线对账分为三个子模块,分别是数据接入层、对账管理层和对账执行层。

在数据接入层我们提供拉取和推送两种模式,经历一个数据适配的过程,将数据存储到我们统一的对账数据池当中。

在对账管理层当中,我们抽象出了一个对账场景的概念,我们基于对账场景进行对账属性的配置:首先要选取对账双方的数据源;然后进行对账口径编辑,这里提供了自定义和模板选择两种方式;最后配置对账的周期。这里我们是通过cron表达式来进行周期配置的。

右边两图分别是分别是异步对账和同步对账的实例。在异步对账的实例中,是运单和结算单元的对账。

①异步对账:我们分别监听运单和结算单元的Binlog,通过Kafka->Storm的经典架构,进行对账策略的执行。实际的流程比较复杂,这里只是一张简图,大概就是:(细节可以忽略)

收单运单消息后,我们会把对于的运单以List的形式存储到Squirrel(Redis)中,当结算消息来了以后,就把对应运单记录Delete掉。如果有运单记录一直停留在List当中,也就是说明结算消息没有来,应该是发生了漏结算。我们通过过定时任务轮询运单List将问题数据输出。

②同步对账:示例中是结算内部的流程,经历结算单、账单、付款几个流程。因为付款是最后一个流程,如果这个时候数据存在问题,那么就会造成实际的资金损失。因此我们会在付款环节之前,对前面的数据进行对账。如果发现账单和结算单的数据不一致,我们就会进行数据拦截。

按照计划实施后,系统的各个节点都会有行之有效的对账手段覆盖,实现资金安全、数据一致性的保障,示意图:

外卖配送是个挑战与机遇并存、荣誉与艰辛同在的业务,优秀的项目也同样需求优秀的同学,配送订单调度、清结算系统长期招聘资深工程师、技术专家、架构师等岗位,欢迎各位志同道合、能力优秀的人加入。如果有意向,请发简历至zhanghongwei#meituan.com

THE END
1.机器学习:在线学习和离线学习区别机器学习中的在线学习(Online Learning)和离线学习(Offline Learning)是两种不同的学习方式,它们在数据处理和模型更新方面有着明显的区别。以下是它们的主要区别: 数据获取方式: 在线学习:在在线学习中,模型是不断地从数据流中接收新的样本并进行学习。这意味着模型会随着时间的推移不断更新,以适应新的数据。 https://blog.csdn.net/weixin_41194129/article/details/132998721
2.在线设备和离线设备的区别在线设备是可以搜索的出来的。离线设备指的是处于不在线的设备,也就是说没有登录的设备,离线设备可能https://edu.iask.sina.com.cn/jy/lNn2tLLRZf.html
3.最后纪元离线和在线区别是什么最后纪元离线在线有什么不同在离线版里玩家是不能喝其他玩家进行组队或者交易的,只能一个人进行单机游戏。而在线版的玩家就可以邀请其他玩家一起组队冒险,还可以在集市里与其他玩家进行交易。接下来九游小编就给大家带来最后纪元离线在线有什么不同。 最后纪元离线和在线区别是什么? 能不能联机的区别。https://www.9game.cn/news/9901357.html
4.双人成行离线和在线有什么区别双人成行二号玩家加入方法3、游戏的玩法不同。双人成行离线玩法需要玩家一个使用键盘,另一个使用摇杆才可以玩。而双人成行在线则不需要区分,两者都可以使用键盘。 以上就是双人成行双人成行离线和在线的区别以及二号玩家加入的方法了,想要了解更多相关攻略的小伙伴可以持续关注游侠网,这里每天会为大家推送最新最全的攻略,一定不要错过哦。https://gl.ali213.net/html/2022-6/860745.html
5.案例9:使用计算—离线和在线使用的主要区别在离线仿真与在线仿真中递归计算(计算中某个输出位号作为自身的函数)的行为是不一样的。行为的不同是因为嵌入离线仿真和嵌入在线系统的设计差异导致的。本教程的目的是着重介绍这一差异。 ?在离线仿真器中,k时刻的值被用于初始化k+1时刻的仿真。如果你有计算[A] =[A]+1且[A]=0,那么开始时产生的顺序是1https://www.jianshu.com/p/28da66d9eafb
6.离线LowE玻璃和在线LowE玻璃两者概念有何不同?知识库在线Low-E玻璃是在浮法玻璃生产线上,采用专用的设备,通过化学气相沉积工艺和专用材料在浮法生产线上的玻璃带表面形成一层具有低辐射性能的功能膜。这种工艺生产的Low-E玻璃称为在线Low-E玻璃,其膜层材料为半导体氧化物,产品颜色仅有冷灰、无色透明等少数品种。离线Low-E玻璃采用专用的真空磁控溅射镀膜设备和工艺技术http://www.alwindoor.com/zsk/ask.asp?id=13323
7.在线式巡更和离线式巡更的不同之处二.离线式巡更:顾名思义此系统无需布线,只要将巡更巡检点安装在巡逻位置,巡逻人员手持巡更巡检器到每一个巡更巡检点采集信息后,将信息通过数据线传输给计算机,就可以显示整个巡逻巡检过程(如需要再由打印机打印,就形成一份完整的巡逻巡检考察报告)。 相对于在线式电子巡更巡检系统离线式电子巡更巡检系统的缺点是不能http://hkjum897140.51sole.com/companynewsdetail_161449825.htm
8.由于当前在线组态数据与离线组态数据不同,因此无诊断数据可用新建的程序文件,里面没程序的,正在组态,用的博图V15的,除了主CPU1511正常的,其他的所有模块包括PS模块都显示由于当前在线组态数据与离线组态数据不同,因此无诊断数据可用,请教一下什么原因 【方案】服务智能物流,华北工控RPC-610M整机支持自动分拣系统应用 只看该作者 | 赞[0] | 踩[1] | 引用 | 回复 | http://bbs.gkong.com/archive.aspx?id=477495
9.在线LowE玻璃和离线Low在线Low-E玻璃和离线Low-E玻璃由于膜层不同、工艺不同等原因,使两者的产品性能参数不尽相同,甚至存在较大差异。下面按光学性能、节能特性、可加工性、成本构成、电磁屏蔽、品种颜色可选择性等几方面进行对比说明。 光学性能是一项主要性能,可以说光学性能决定了Low-E玻璃效能好坏及颜色的不同。对Low-E玻璃而言,无论https://www.douban.com/note/757012330/
10.云盘扩容,离线扩容和在线扩容有什么区别,扩容时需要关机吗?阿里云提供了两种方式进行云盘扩容:在线扩容和离线扩容。在线扩容的优点在于扩容完成后无需重启实例,这https://developer.aliyun.com/ask/570725
11.在对齐AI时,为什么在线方法总是优于离线方法?澎湃号·湃客该团队采用了与 Gao et al. (2023) 类似的设置,基于一组开源数据集进行了实验,结果表明:在同等的优化预算(相对于 SFT 策略的 KL 散度)下,在线算法的性能表现通常优于离线算法。 图1 给出了在线和离线算法在四个不同的开源数据集上表现出的 KL 散度与策略性能之间的权衡。图中的每个数据点代表了在训练过程https://www.thepaper.cn/newsDetail_forward_27434433
12.电工技能:“UPS电源和EPS电源”的工作原理及两者之间的区别!3、后备式和在线式UPS工作原理 1)后备式UPS(离线式UPS) 在市电正常时由市电直接向设备供电,当市电断开时由蓄电池逆变供电。 其特点是:结构简单,体积小,成本低,但输入电压范围窄,有切换时间,不适用于对电源质量要求高的设备,通常用于个人计算机。 2)在线互动式UPS https://www.swpu.edu.cn/eelab/info/1090/2326.htm
13.微信在线不在线的区别是什么?有什么方法知道好友是否在线?几年前,我们常用的聊天软件是qq,而现在,微信的风头几乎已经改过了qq。微信在很多功能方面和qq类似,不过,也有些不一样的功能。比如,微信在线与不在线,很多人都不知道这两者有什么区别,下面,我们来看看具体的情况。 其实微信是不能看好友在不在线的,这是微信的一个特点,就是没有在线与离线。也就是说,在线与不https://www.kaitao.cn/article/20180906115708.htm
14.蚂蚁金服核心技术:百亿特征实时推荐算法揭秘通过真实线上数据仿真,它能接近离线频次过滤的效果,其λ是随每次特征进入时动态计算的。它的缺陷是: 当t越小时,事件发生在t内的次数的variance越大,所以会以一定概率误加或丢弃特征。 未来总的训练步数T在在线学习中是未知的。 频次过滤与优化器相分离,导致不能获得优化器的统计信息。 https://maimai.cn/article/detail?fid=1010621115&efid=mIQCHnkj0zjxlpygUmo5mg