百度交易中台之系统对账篇

公众号封面.jpeg

作者 | 天空

导读
introduction

百度交易中台作为集团移动生态战略的基础设施,面向收银交易与清分结算场景,赋能业务、提供高效交易生态搭建。目前支持百度体系内多个产品线,主要包括:度小店、小程序、地图打车、文心一言等。本文主要介绍了百度交易中台的交易链路系统数据一致性的对账系统,主要从准实时对账和大数据离线对账两个方向进行介绍。

01 前言

交易中台为百度小程序、百度地图打车、百度健康、百度文库、百度电商等业务提供了支付、订单、结算等交易服务能力,随着交易业务的飞速发展,交易订单量逐日增加,同时每日产生的交易GMV和清结算资金也是一个很大的体量。主要涉及交易订单、支付通道账单、交易营销、交易履约、数据中心、结算中心、商家资金池、银行打款、数据账房以及百信银行等交易内部10+的链路系统的交易数据,本篇的系统对账主要介绍了如何去实现和保障交易数据的准确性和一致性。

02 系统介绍

交易系统链路核心包括收银台、交易订单、交易营销、交易履约、数据中心、结算中心、资金池及数据账房:

  • 收银台:提供聚合支付能力,支持微信、支付宝、银联对公、银联对私、度小满支付、百度闪付、汇付天下和京东支付等通道,产生收银台支付单和收银台退款单;

  • 交易订单:打通用户、商家、商品、库存、售后等关键业务,是驱动交易全流程运转的核心。而订单系统承上启下,作为入口,涵盖了订单流程管理、库存与营销管理、算价引擎、履约子流程、售后以及退款信息管理等,产生交易订单和退款订单;

  • 交易营销:提供了营销预算、营销库存以及营销活动的能力,旨在通过促销活动和特定的交易条件来吸引顾客并推动销售增长,产生营销订单;

  • 交易履约:按照商家签约商品的约束关系,兑现或取消已兑换交易商品提供的对应服务,产生履约订单和取消履约订单;

  • 数据中心:收拢交易订单、退款订单、履约订单和取消履约订单,补充结算协议及商家供应商等结算中心依赖的关键数据,产生凭证订单;

  • 结算中心:依据结算协议规则将凭证订单的货款结算至对应的商家供应商。产生结算账单,最终汇入商家资金池;

  • 资金池:提供商家资金余额、商家资金流水以及商家打款的能力。提供商家资金池交易流水、商家资金池余额和商家付款凭证;

  • 数据账房:交易中台数据的统一出口,涵盖订单、结算账单和资金池流水等,商家通过该系统可直接查询收入/其他款项/支出等流水信息,提供按天/月/年的财务对账。

整体概括如下图:

image.png

交易中台链接外部核心系统有百信银行和聚合支付渠道:

  • 百信银行:承接了交易中台交易的收单、清分以及清算,从而实现了"一清"。提供“一清成交”、“一清核销”、“一清收入”以及“一清打款”的指令账单;

“一清成交”:交易中台与百信银行交互的收款账单和退款账单的指令。

“一清核销”:交易中台与百信银行交互的核销资金流水账单的指令。

“一清收入”:交易中台与百信银行交互的收取结算服务通道费用的指令。

“一清打款”:交易中台与百信银行交互的商家资金池自动打款至银行卡的指令。

  • 聚合支付渠道:包括微信、支付宝、银联对公、银联对私、中行数币支付、度小满支付、百度闪付、汇付天下和京东支付等,提供渠道支付账单。

03 背景&问题

随着交易中台支付业务的多元化,交易订单量迅速增长且蓬勃发展,交易支付及结算业务的复杂性也在不断的提高,总结下来,有以下几个特点:

1.交易场景多:有带货场景(分销带货和自带货)、购物车场景、多方分账场景、宿主营销场景以及跨境支付业务场景等,每种场景都有独特的交易和结算模式。

2.交易链路长:从支付到清算,需要跨收银台—>交易—>履约—>数据中心—>结算中心—>资金池—>账房,需要保障链路系统的数据一致性。

3.单量大:日订单量,月结算金额等快速增长,月交易数据体量也在不断扩张,达到了TB级别。

在这样的交易背景下,我们要保障交易数据的准确性和时效性,同时还需要保障履约、结算、资金账单以及商家付款的时效性和数据一致性,这就给我们的对账系统带来了巨大的挑战。简单介绍下交易系统运行过程中出现过的问题,如下图:

image.png

从上边的问题可以看出,基本上都是系统间数据不一致导致的,当然不仅限于这些场景。凡是有系统交互,数据交互的场景,都会出现此类问题,也就是“数据一致性”的问题。

“数据不一致”的原因有很多,如下:

1.高并发处理不当,接口幂等问题。

2.网络环境故障:机房网络抖动、数据库网络异常、消息中间件服务异常等。

3.线上代码bug, 业务方接入流程不完善等。

“数据不一致”带来的影响,如下:

1.影响用户支付下单,进而给业务方带来用户和订单的损失。

2.结算不及时,带来高客诉,更严重的可能带来资损。

3.影响财务结账,需投入大量人力来解决不一致的数据问题。

关于一致性问题,业内的解决方案已经非常成熟,从百度搜索“一致性问题”,随处都是此类问题的阐述、概念的定义、解决思路以及解决方案,比如:

1.强一致性协议: 两阶段提交、三阶段提交、TCC (Try-Confirm-Cancel)等。

2.最终一致性: 主动轮询、异步确保、可靠消息、消息事务等。

这些方案的目标都是在事中避免问题的发生,但是在现实交易的场景中,无论是系统内部,还是系统与外部环境的交互都是复杂多变、不可预知,很难完全避免“数据不一致”问题的发生。因此在事后对数据问题的发现并及时修复也非常重要。这也是本篇文章要讲述的“对账系统”的核心功能。

本篇介绍的对账系统涵盖了“准实时”对账和“T+1”离线对账两种能力:

1.“准实时”对账系统:监听交易链路系统数据库的binlog文件,上游系统针对下游系统会有数据推送,下游系统会针对上游系统推送的数据进行处理,处理结束之后进行回调或通知。

2.“T+1”离线对账系统:使用大数据计算完成对账,依托ETL工具进行数据同步,SPARK、SPAKR-SQL、AFS等大数据技术完成系统间数据的对账,及时发现数据差异、差异数据预警以及差异数据的自动修复能力。

04 对账系统

4.1 “准实时”对账系统

4.1.1 系统概况

“准实时”旨在提供一套可以及时发现数据问题并及时对问题进行修复的自动化对账系统,开发专用平台,实时针对系统间的数据同步问题进行追溯和处理。设计思路如下图:

image.png

4.1.2 系统实现

  1. 通过DTS平台监听交易链路系统中数据库的binlog文件,将binlog消息发送至BP。

  2. 消费BP数据,采集上下游系统的数据集,抽象上下游系统间的数据结构,一次上游系统的推送和下游系统的接收作为一对元信息,进行存储。

  3. 依据监控配置信息,定时监控未成对出现的对账元信息,自动调用修复接口并完成异常对账元信息的预警。

  4. 对账结果可视化,依托自助化sugar报表平台,完成对账结果的可视化分析报表。

整体架构图如下:

image.png

对账服务:

对账配置:实现上下游系统间对账的自动化接入;

生产者服务:完成BP消息上游系统生产数据的解析和处理;

消费者服务:完成BP消息下游系统生产数据的解析和处理;

对账元数据:生成者和消费者产生的成对数据,每一对元数据代表上下游系统之间的一次交互;

对账服务:完成元数据的对账,依据监控配置信息,定时监控未成对出现的对账元信息,自动调用修复接口并完成异常元信息的预警;

可视化报表:基于Sugar报表平台,提供对账结果的可视化分析报表,包括差异数据统计,对账差异率及自动修复结果等。

4.2 “T+1”离线对账系统

4.2.1 系统概况

“T+1”指的是从交易日往后顺延1日,即“T+1”对账是指T+1日完成截止至T日的数据对账。对账系统分为交易链路系统内部对账和交易中台与外接系统对账,主要包括数据准备、数据核对、数据平账以及数据报表等模块。

image.png

  • 数据准备:顾名思义,获取对账系统依赖的全部数据。

  • 数据核对:采用数据比对手段,双方数据未匹配成功的视为差异。

  • 数据平账:完成差异数据的二次对账,消除跨账期差异,实现最终差异数据自动修复和预警。

  • 数据报表:完成对账结果的数据分析及统计,提供数据报表的可视化展示界面。

4.2.2 交易链路系统内部对账

图片

  • 数据准备

通过ETL数据同步工具,T+1日完成T日交易数据到离线AFS文件系统的同步,完成afs文件和hive meta表的绑定。使用Pingo平台完成同步数据任务的调度并例行执行。

  • 问题发现

对账系统的目标是发现系统问题,通过系统对账发现数据流转过程中的数据不一致问题,可以归结为丢数据、重复推送、结算协议问题、系统线上功能bug等。

  • 数据核对

1.交易链路系统的数据量较大,对账系统依赖的数据量可以达到TB级别,常规服务的对账根本无法完成,基于spark、spark-sql、afs等大数据技术实现系统的对账能力。

2.采用单向对账的方式,以上游系统数据为基准,上游产生了数据,一定会同步到下游,下游会有一条数据与之成对匹配,未完成匹配的订单则为异常订单。

  • 差错处理

下游系统提供数据检查和数据修复接口。数据核对完成之后,启动差错处理,调用数据修复接口之后,再次调用数据检查接口,最终完成数据修复;差错处理设置重复3次,处理3次仍未修复的数据会自动进入预警系统,以邮件和短信的方式预警到团队和个人,最终由人工处理解决。

4.2.3 交易中台与外接系统对账

图片

  • 数据准备

1.例行下载支付通道、百信银行的交易账单。不同支付通道配置对应的账单模版,依据账单模版解析账单数据,操作账单数据同步到AFS文件系统,同时记录账单同步完成的标记文件。

2.例行同步交易中台交易数据到AFS文件系统,使用ETL数据同步工具完成数据同步,同时记录数据同步完成的标记文件。

  • 问题发现

对账的目标是保障双方数据一致,通过系统对账发现:与外接系统的数据不一致可以归结为数据跨账期、外接系统处理异常、状态不一致、丢数据等。

  • 数据核对

1.对账系统依赖的数据量较大,数据量达到了TB级别,采用spark、spark-sql、afs等大数据技术实现系统的对账能力。

2.采用双向对账的方式:

①以百度交易中台数据为基准,百度交易中台产生了数据,外接系统应有一条数据与之成对匹配,未完成匹配的数据则为异常数据(百度单边)。

②以外接系统交易数据为基准,匹配百度交易中台的交易数据,包括交易数据金额、交易数据状态等,未完成匹配的数据则为异常数据(外接系统单边)。

③平账服务,消除因为跨账期产生的差异订单。

a.消除百度单边差异,参与平账的外接系统交易账单去除账期的限制,采用近1年的全部账单进行平账。

b.消除外接系统单边差异,参与平账的百度交易数据去除账期限制,同样采用近1年的全部交易数据进行平账。

  • 差错处理

多次平账之后仍未消除的差异视为异常数据,异常数据会自动进入预警系统,以邮件和短信的方式预警到团队和个人,最终由人工处理解决。

05 结束语

百度交易中台聚合了订单、支付、履约以及结算等交易能力,随着接入的业务方越来越多,交易场景也在多元化,有流量主带货交易、直播带货交易、宿主带货交易、多方分账交易等等。多元化的交易场景带来了复杂的结算流程,交易结算的时效性、准确性需要稳定可靠的交易数据流来保障,百度交易中台的对账系统会不断进行完善和升级,在以保障交易数据流的稳定为前提,输出给业务方稳定、可靠的交易对账后台,助力业务持续发展。

参考注释:

“一清”:央行规定只有银行类机构(银联、网联、银行等)和取得人民银行支付业务许可证的支付机构(第三方支付机构)才能开展收单业务以及进行资金的清算。我们称以上机构为“一清机构”。在互联网支付业务中依托上述拥有支付牌照的机构,在资金结算给商户的过程当中只发生了一次清算,该过程即为“一清”。“一清”业务是合法的,有央行监管的,客户的资金是有保障的。

“DTS平台”:数据库传输服务,提供数据迁移、数据同步、数据订阅于一体的数据库数据传输服务。

“Sugar平台”:智能 BI 及数据可视化工具。Sugar BI 基于百度 Echarts 提供丰富的图表组件,无需SQL、全流程智能化操作,让用户不写一行代码,分钟级即可完成自助 BI 报表分析和可视化大屏。

“Pingo平台”: 是基于Spark引擎提供的集数据导入、数据计算以及工作流服务、交互式开发环境和资源管理服务为一体的大数据处理平台。

“TDS平台”: 是基于图灵的数据建设解决方案,提供 数据开发、数仓管理、监控运维、资源管理等一站式服务的数据开发平台。

“AFS”:AFS(Andrew File System)是一个分布式文件系统,它为大规模数据存储和处理提供了高效、可靠和可扩展的解决方案。

——————END——————

参考资料:

百度交易中台之订单系统架构浅析

百度交易中台之账房系统架构浅析

推荐阅读:

揭秘百度数仓融合计算引擎

教不会你算我输系列 | 手把手教你HarmonyOS应用开发

漫谈数据分布可视化分析

一文详解静态图和动态图中的自动求导机制

千万级高性能长连接Go服务架构实践

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/279466.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HighTec_TC4 编译器移植 Aurix ADS

ADS 是英飞凌推出的针对 AURIX 芯片的开发平台,该开发环境基于业内流行的 Eclipse 打造而成。 HighTec 作为英飞凌的全球重要合作伙伴和 PDH,作为专业的编译器供应商和嵌入式产品方案提供商,HighTec 早已经为英飞凌最新一代 AURIX TC4XX 芯片…

windows 多网卡情况dns解析超时问题的排查

最近遇到一个问题 多网卡,多网络环境下,dns解析总是超时。 排查之后发现是dns配置的问题,一个有线网络配置的内网dns,一个无线网络配置的公网dns 访问公网时莫名的时不时出现超时现象 初步排查是dns解析的耗时太长,…

AI助手 - 月之暗面 Kimi.ai

前言 这是 AI工具专栏 下的第四篇,这一篇所介绍的AI,也许是截至今天(204-03-19)国内可访问的实用性最强的一款。 今年年初,一直看到有人推荐 Kimi,不过面对雨后春笋般的各类品质的AI,说实话也有…

添加与搜索单词 - 数据结构设计

题目链接 添加与搜索单词 - 数据结构设计 题目描述 注意点 addWord 中的 word 由小写英文字母组成search 中的 word 由 ‘.’ 或小写英文字母组成1 < word.length < 25 解答思路 为了加快查询速度&#xff0c;可以使用字典树存储单词&#xff0c;基本结构是&#xf…

STM32通信协议

STM32通信协议 STM32通信协议 STM32通信协议一、通信相关概念二、通信协议引脚作用三、通信方式四、采样方式五、电平信号六、通信对象 一、通信相关概念 通信接口 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统 通信协议&#xff1a;制定…

基于Spring Boot+Vue的智慧图书管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 一、项目简介 如今社会上各行各业&…

Linux课程_____网络管理

一、查看接口信息 1. ifconfig 查看所有活动网络接口的信息 ifconfig -a 查看所有网络接口信息 ifconfig 直接加网络接口 查看指定网络接口信息 1.1查看指定接口IP [rootlocalhost ~]# ip addr show ens160 1.2设置网络接口的IP地址 # ifconfig eth0 192.168.152.133 …

服务器硬件基础知识和云服务器的选购技巧

概述 服务器硬件基础知识涵盖了构成服务器的关键硬件组件和技术&#xff0c;这些组件和技术对于服务器的性能、稳定性和可用性起着至关重要的作用。其中包括中央处理器&#xff08;CPU&#xff09;作为服务器的计算引擎&#xff0c;内存&#xff08;RAM&#xff09;用于数据临…

图片不想要的部分怎么去除?

图片不想要的部分怎么去除&#xff1f;随着数字摄影技术的发展&#xff0c;我们拍摄的照片数量越来越多。然而&#xff0c;有时候我们会发现在一张照片中有一些不想要的元素或者杂乱的背景。那么如何去除图片中的这些不想要的部分呢&#xff1f;首先&#xff0c;我们可以使用图…

BetterDisplay Pro for Mac(显示器校准软件) v2.0.11激活版

BetterDisplay Pro是一款由waydabber开发的Mac平台上的显示器校准软件&#xff0c;可以帮助用户调整显示器的颜色和亮度&#xff0c;以获得更加真实、清晰和舒适的视觉体验。 软件下载&#xff1a;BetterDisplay Pro for Mac v2.0.11激活版 以下是BetterDisplay Pro的主要特点&…

Python内置对象

Python是一种强大的、动态类型的高级编程语言&#xff0c;其内置对象是构成程序的基础元素。Python的内置对象包括数字、字符串、列表、元组、字典、集合、布尔值和None等&#xff0c;每种对象都有特定的类型和用途。 01 什么是内置对象 这些对象是编程语言的基础构建块&…

Covalent Network借助大规模的历史Web3数据集,推动人工智能发展

人工智能在众多领域中增强了区块链的实用性&#xff0c;反之亦然&#xff0c;区块链确保了 AI 模型所使用的数据的来源和质量。人工智能带来的生产力提升&#xff0c;将与区块链系统固有的安全性和透明度融合。 Covalent Network&#xff08;CQT&#xff09;正位于这两项互补技…

Django单表数据库操作

单表操作 测试脚本 当你只想测试django某一个py文件的内容,可以不用书写前后端的交互,直接写一个测试脚本即可 单表删除 数据库操作方法: 1.all():查询所有的数据 2.filter():带有过滤条件的查询 3.get():直接拿数据对象,不存在则报错 4.first():拿queryset里面的第一个元素…

Python分析无人驾驶汽车在桂林市文旅行业推广的问卷

【项目背景】 通过市场调研、文本分析、访谈和问卷调查等方法&#xff0c;探讨&#xff1a; 网民对无人驾驶汽车出行服务的态度。无人驾驶安全员的行业背景。不同人群在旅游时的交通选择偏好。游客及当地居民对桂林市文旅路线的交通满意度。乘客对无人驾驶汽车的满意度。桂林…

Android Studio实现内容丰富的安卓民宿酒店预订平台

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看民宿 3.民宿预订 4.民宿预订支付&#xff0c; 5.支付订单 6.评论管…

LabVIEW NV色心频率扫描

LabVIEW NV色心频率扫描 通过LabVIEW软件开发一个能够实现对金刚石氮空位&#xff08;Nitrogen-Vacancy&#xff0c;NV&#xff09;色心的频率扫描系统。系统通过USB协议与硬件设备通信&#xff0c;对NV色心进行高精度的频率扫描&#xff0c;满足了频率在2.6 GHz到3.2 GHz范围…

使用Redis做缓存的小案例

如果不了解Redis&#xff0c;可以查看本人博客&#xff1a;Redis入门 Redis基于内存&#xff0c;因此查询速度快&#xff0c;常常可以用来作为缓存使用&#xff0c;缓存就是我们在内存中开辟一段区域来存储我们查询比较频繁的数据&#xff0c;这样&#xff0c;我们在下一次查询…

fs方法举例

fs.readFile() 读取文件 const fs require(node:fs) const path require(node:path) const s path.resolve(__dirname, ./hello.txt) const buf fs.readFileSync(s) console.log(buf.toString())输出的Buffer对象 用toString()方法转字符串之后 fs.appendFile() 创建新…

反射 Reflection

反射 反射的概念 反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息(比如成员变量&#xff0c;构造器&#xff0c;成员方法等等)&#xff0c;并能操作对象的属性及方法。反射在设计模式和框架底层都会用到加载完类之后&#xff0c;在堆中就产生了一个Class类型…

自定义类型:联合和枚举

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文(平均质量分78.8)&#xff0c;分…