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

2023-10-27

导读:百度交易中台作为集团移动生态战略的基础设施,面向收银交易与清分结算场景,为赋能业务提供高效交易生态搭建。目前支持百度体系内多个产品线,主要包含:小程序,地图打车,百家号,招财猫,好看视频等。本文主要介绍了百度交易中台的商户财务对账相关的帐房系统,主要从业务模型以及系统设计来介绍该系统。

全文5184字,预计阅读时间14分钟

一、系统介绍

帐房系统是建立在百度交易系统[1]下,收拢聚合了商家/平台/宿主等接入方的收入/支出流水的对账系统。商家通过该系统可直接看到自己的收入/其他款项/支出等流水信息,实现按天/月/年的财务对账。

二、业务场景

针对不同业务背景,交易清结算系统产生了不同的流水类型。目前主流的业务场景包含:1.直播带货等场景下的流量主带货[2]。2.小程序宿主内的宿主带货。3.地图打车等业务场景下的平台分帐。

图(2-1) 交易中台业务背景

这些业务场景下,交易流水产生的过程如图(2-2)所示。一个订单经过支付、支付通知(购物车拆子订单)、订单维度结算、结算流水推送商家资金池,最后资金池流水才会到帐房系统,交易流水产生在图(2-2)中的商家订单结算过程中,一个订单会产出多条交易流水,推送到下游资金池系统进行商家账户记账,同时产生了对应的资金池流水,帐房系统的数据来源就是资金池的流水记录。目前商家结算产出流水类型有以下几种:

图(2-2) 交易流水产生流程

  1. 分帐流水(货款):对于入驻交易的平台方,平台方为商家提供了平台上的功能,平台方期望从商家售卖的货款中收取一定的佣金,作为平台的收入。基于这种业务场景,产生了平台的分帐流水。对应图(2-2)商家结算中的分帐方式产出,分帐方式包含:按照固定比例,按照固定金额,自主比例分帐以及多方分帐,接入方根据实际的业务场景选择对应的分帐方式。

  2. 技术服务费:技术服务费为交易中台(网讯主体)对使用收银台支付的商家,会收取一定比例的钱作为技术服务费,因此产生了对应的技术服务费流水,对应图(2-2)商家结算中的分帐方式的佣金模式产出,佣金模式包含:固定比例、固定金额以及按照渠道收取。对应商家的其他款项数据。

  3. 小程序带货流水:小程序带货流水为流量主收取的带货佣金,流量主为商家通过文章、视频、直播带货后,卖出的货款会分一部分给带货的流量主,从而产生了小程序带货流水。与分帐流水不同的时,分帐的流水是给入驻的平台,而带货流水最后的结算对象是个人。

  4. 宿主带货流水:业务背景是智能小程序开源联盟,为宿主和小程序共建生态。宿主为小程序提供分发流量及展现入口,有效提升小程序的使用时长及频次,基于此,宿主产生对在其APP上发生的交易进行抽佣的诉求,从而实现宿主新商业变现模式拓展,带动宿主商业收入增长。 宿主带货流水的产生方式与小程序带货类似,区别是宿主在交易进行和入驻,属于企业/公司类型。一个商家属于一个平台,也可以和宿主进行绑定,与二者同时进行分账。

  5. 打款流水:打款流水为给商家银行卡打款的流水。

  6. 调整款流水:指打款银行退汇的流水。

帐房系统将以上的流水划分为3个类别:收入、支出以及其他款项。

  • 收入:指分帐流水

  • 其他款项:包含交易中台收取的技术服务费、打款退回的流水、小程序带货流水以及宿主带货流水

  • 支出:指打款流水

商家整体财务数据核对收支平衡的公式为: 

总体对账公式:商家余额 = 收入 + 其他款项 - 支出

若公式成立则收支流水数据准确无误。若商家想要核对账期内的财务数据,则需要看两个账期之间的收入和支出是否一致。例如商家每隔7日进行一次打款(即是支出),则商家只需要核对这7天内的流水数据是否满足以下公式即可。

结算账期对账公式:收入 + 其他款项 - 支出= 0

例子说明

交易中台所支持的业务场景中,一个订单会产生多条流水,每一条流水的结算对象也不一样,因此,这里举例简单说明流水属于的对象。

例子:针对小程序带货的场景,一个订单金额为100元,带货流量主分佣10%,平台分帐5%,交易中台收取6‰技术服务费。因此各个对象的流水金额如下:

从表中可以看出最后的总金额只有84.4+10+5=99.4元,缺少的0.6元就是交易中台收取的技术服务费。技术服务费的收取是通过从商家口扣除0.6元实现的,而不是产生0.6元的流水给交易中台。如果打款周期到了,对应给结算对象的打款金额就分别为84.4元,10元和5元,这样收入和支出就一致了。

三、系统构架

图(3-1) 帐房系统架构图

帐房的整体架构如图3-1所示,帐房的数据来源为上游的资金池流水数据,canal监听binlog,解析binlog日志将流水数据发布到bigpipe,帐房系统通过监听bigpipe数据,拿到流水数据后通过akka完成数据的校验、补充,得到一条完备的流水数据。最后通过esClient将流水数据写入百度云es,业务的查询以及导出功能都是基于百度云es的数据来完成的。与此同时,交易中台也建立了离线计算系统,通过spark拉取es的集群数据,存储在AFS上,基于此完成离线数据统计的功能。 帐房系统以资金池流水数据为主,根据流水类型的不同,补充了来自其他不同系统的数据,丰富该条流水的信息,来满足业务侧查询的需求,补充的数据存储在es以及数据库中,针对热点的数据,系统使用LoadingCache本地缓存的方式提升处理速度。系统对外输出数据的方式有:第三方API、电商开放平台、财务运营平台、业务商家后台以及AMIS发票系统。

四、系统功能拆解

4.1 基于canal的数据同步

帐房系统的数据来源为上游账户资金池系统的流水数据,资金池流水数据存储在ddbs数据库中。帐房需要实现准实时数据的获取,同时避免代码的侵入,因此采用了基于cacal监听ddbs数据库binlog日志的方式,进行数据的同步;由于每日的流水产生存在流量高峰,直接将数据请求下游帐房系统,可能会对帐房系统产生冲击,引起系统异常的问题。为了避免这种情况的出现,我们引入了中间件消息队列(bigpipe)进行流量削峰填谷处理,canal将解析的库表变更数据发送到消息队列中,帐房系统采用监听者模式从消息队列中获取对应的数据,通过java的akka方式进行并发的数据处理。帐房系统通过异步消息以及akka并发的方式完成数据的异步化同步,解决流量高峰问题,实现了数据的准实时同步,当前系统的数据同步延时控制在秒级别。

4.2 Elasticsearch数据存储

帐房系统业务需求为商家/用户对账需求,主要是为了满足商家/用户对于财务相关的对账数据的查询以及导出。基于这样的特点,需要查询大量的数据,同时需要完成各个维度的数据聚合,而且商家的流水数据量远大于订单的数据量,一个订单将会产生2-6条的流水。交易订单中心以及上游账户资金池系统的存储都是采用数据库分度分表的方式进行的,这样的方式并不适用于帐房系统,引入分表的方式会导致数据不均匀的情况产生,对于热点账户的问题难以解决,同时难以完成多维度的数据查询。基于此系统采用了es的存储方式,通过es支持对外的多维度、准实时的数据查询。

帐房系统早期的数据写入时自定义了routing,使用商家id作为routing,随着业务发展,热点商户的数据量不断增加,从而导致es分片出现了数据倾斜的情况,进而会引发es聚合查询偶发超时以及偶现写入失败的情况。因此系统进行了es数据迁移,从而解决数据倾斜的问题。同时Elasticsearch 使用一种称为倒排索引的结构,它适用于快速的全文搜索,因此es对于字段的变更修改无法直接在原来的索引上进行,都是重建索引,进行数据的迁移完成的。es数据的迁移方式有很多(BOS快照迁移、Logstash、通过Spark迁移数据、HDFS快照迁移等),鉴于交易侧es数据量以及迁移的场景,使用了Logstash同步的方式进行了数据的迁移,迁移过程中将文档的routing设置去除,解决了数据倾斜的数据。

4.3 数据一致性保障

帐房系统其主要功能为商家的对账,因此商家的流水数据的缺失必然会导致商家财务数据的错误,给商家带来对账上的问题。因此保障帐房的数据与上游系统一致,是该系统重要且必须的能力。数据一致性的保障,帐房系统通过接入交易平台的一致性服务系统完成,其流程如图4-1所示。

图(4-1) 数据一致性保障流程图

一致性服务通过接收来自上游canal发送的bp消息,以及帐房系统写入es成功后发送的bp消息,将二者的消息存储至mysql数据库中,每日定时对上下游系统的数据进行对比分析,得出对应的差异数据,然后通过调用对应的修复接口完成数据的修复。一致性服务留存了7日内的消息数据,过期定时清理,保证服务的数据量不会过大,不影响数据库性能。除了一致性服务的保障之外,每月会通过spark进行离线数据核对,确保当月的数据上下游一致。

4.4 数据聚合

图(4-2)商家对账页面

商家对账的页面如图4-2所示,可以看出,对于帐房系统的要求是需要按照商家维度查询对应的财务数据,同时需要按照月份进行聚合,返回商家每一个月的收入/支出金额。在使用es进行聚合查询时,需要关注以下信息,保障查询的效率。

聚合查询字段,设置为keyword,能够提升查询的效率。(当前系统数据量下,查询时间差异在2倍左右。)

es查询时must和filter的使用,must 返回的文档必须满足must子句的条件,并且参与计算分值;filter 返回的文档必须满足filter子句的条件。但是跟must不一样的是,不会计算分值, 并且可以使用缓存。简单来讲,filter查询效率高于must,根据自己的实际业务场景选择合适的查询语句,在不需要相关性算分的查询场景,尽量使用filter context让查询更高效。(当前系统数据量下,查询时间差异在2-4倍左右。)

ES中的路由(routing)机制决定一个document存储到索引的哪个shard上面去,即文档到shard的路由。计算公式为:shard_num = hash(_routing) % num_primary_shards。一般情况下,不建议使用写入时设置routing,如果routing设置的不合理,会导致数据倾斜的问题,数据倾斜会导致查询问题以及集群不稳定。若能够保证设置的routing分布均匀,且使用routing作为数据隔离方式,在这样的情况下,后面检索的时候,同样使用隔离参数作为routing,就可以精准的从某个shard获取数据了,提升查询的效率。早期帐房系统使用商户ID作为routing,在一定程度上提升了查询的效率,但是随着业务的增加,出现了热点商户的问题,导致了es数据倾斜问题,从而引起了一些问题,后续进行了数据的迁移,不再使用资金池id作为routing,而是使用系统默认的文档id作为routing。

es深分页问题,es分页查询有三种方式:1.form size 。2.scroll方式。3.search after方式。这里简单做一下对比,查询速度上scroll>search after>form size。帐房系统设计中三种查询方式均有使用,适用于不同的场景,form size方式用于前端页面上的展示,仅仅展示少量的分页数据;scroll查询方式用于大量数据的文件导致任务,快速完成文件的导出任务;search after方式用于对外的API批量数据导出,业务侧可重复获取某一页数据进行处理。

五、结束语

基于当前交易中台所支撑的业务场景,建立了如上的帐房系统,我们也在不断的进行完善和升级,助力上游的业务不断的前进,提升商家的对账体验。随着业务的不断发展,帐房系统也在不断的进行升级改造,不断地完善自身。后续我们将持续升级系统,与业务共同发展成长。

参考资料

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

https://mp.weixin.qq.com/s/olILeDhU4imO2AR446lP9Q

【2】百度交易中台之商品推广流程构建以及实现

https://mp.weixin.qq.com/s/vY_TdNclvhtwxLxjKWfwrg

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

百度交易中台之账房系统架构浅析 的相关文章

  • python 实现百度关键字自动爬虫

    coding utf 8 In 3 import requests from lxml import etree import re from sqlalchemy import create engine engine create en
  • 大数据入门 - 基础概念

    文章目录 1 发展历史 2 分布式系统 可靠性 可扩展性 可维护性 4 单机引擎的问题 事务 写入和存储 数据的序列化 3 GFS Google File System master 的快速恢复性和可用性保障 数据写入的优化 4 MapRe
  • 全球及中国冷链物流产业需求前景与投资竞争力研究报告2022版

    全球及中国冷链物流产业需求前景与投资竞争力研究报告2022版 HS HS HS HS HS HS HS HS HS HS HS HS 修订日期 2021年11月 搜索鸿晟信合研究院查看官网更多内容 第一章 冷链物流相关概述 1 1 冷链物流
  • Spring框架的前世今生与系统架构

    课题 Spring框架的前世今生及系统概述 课程目标 1 通过对本章内容的学习 可以掌握Spring的基本架构及各子模块之间的依赖关系 2 了解Spirng的发展历史 启发思维 3 对Spring形成一个整体的认识 为之后的深入学习做铺垫
  • 百度智能云千帆大模型三连击:接入LLaMA2等33个模型、上线插件功能和103个Prompt模板

    作为全球首个一站式企业级大模型平台 百度智能云 千帆大模型平台 在提供包括文心一言在内的大模型服务及第三方大模型服务的同时 还提供大模型开发和应用的整套工具链 帮助企业解决大模型从训练到开发过程中的全链条问题 自2023年3月发布以来 千帆
  • 对于金融机构而言,为什么选择私有化 IM 比企业微信、钉钉更好?

    一 金融机构数字化转型迈向规范有序 更成体系的新阶段 当前 新一轮信息技术革命浪潮拉开序幕 以人工智能 大数据 云计算等为代表的数字技术正在重构全球经济 不少企业也纷纷拥抱数字化浪潮 开展全方位的变革和升级 中国银保监会印发 关于银行业保险
  • 程序的链接

    程序的链接是一个非常实际的问题 他建立在很实际的问题之上 不从程序员的角度去思考问题 则是从软件的角度去思考如何复用错综复杂的代码 因为 这个问题的本质是我们没有给底层的硬件一个完整的可按顺序执行的程序 我们在前几章虽然讨论了指令流的问题
  • CSS中设置表格TD宽度的问题

    CSS布局 表格宽度不听使唤的实例 想把表格第一例宽度设为20 其他自适应 但CSS中宽度是等宽的 只设这一行也不起作用 但是在实际应用中总是等宽处理 并不按照样式来走 XML HTML代码
  • 第四章 Flume专题-日志采集工具

    一 Flume专题之组件及架构介绍 1 Flume概述 1 1 Flume定义 Flume是一种分布式的 高可靠的和高可用的服务 用于有效地收集 聚合和移动大量日志数据框架 Flume是一个简单灵活的基于流数据的体系结构 1 2 Flume
  • 爬虫与反爬虫技术简介

    互联网的大数据时代的来临 网络爬虫也成了互联网中一个重要行业 它是一种自动获取网页数据信息的爬虫程序 是网站搜索引擎的重要组成部分 通过爬虫 可以获取自己想要的相关数据信息 让爬虫协助自己的工作 进而降低成本 提高业务成功率和提高业务效率
  • 网站降权的康复办法(详解百度SEO数据分析)

    随着搜索引擎算法的不断升级 很多网站在SEO优化过程中遭遇到降权的情况 如果您的网站也遭遇到了类似的问题 不必惊慌失措 本文将为您详细介绍网站降权恢复的方法 包括百度SEO数据分析 网站收录少的5个原因 网站被降权的6个因素以及百度SEO提
  • 巴比特

    摘要 3月15日凌晨 OpenAI在官网上宣告了多模态大模型GPT 4的诞生 GPT 4 实现了以下几个方面的飞跃式提升 强大的识图能力 文字输入限制提升至 2 5 万字 回答准确性显著提高 能够生成歌词 创意文本 实现风格变化 GPT 4
  • Hudi Log 文件格式与读写流程

    Hudi Log 文件格式与读写流程 背景 对 Hudi 有一定了解的读者应该知道 Hudi 有 COW 和 MOR 两种表类型 其中的 MOR 表会通过日志文件记录文件 写入一个 MOR 表后产生的文件可以观察到 一个 MOR 表数据存储
  • 大数据笔记--ELK(第一篇)

    一 ELK介绍 1 什么是ELK ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案 是三个产品的首字母缩写 分别是ElasticSearch Logstash 和 Kibana 1 1 E ELASTICSEARCH
  • 系统架构设计师-计算机网络

    目录 一 计算机网络技术概述 1 网络概述 2 网络有关指标 3 网络分类 4 5G技术 二 组网技术 1 交换技术 2 基本交换原理 三 TCP IP协议簇 1 DHCP 2 DNS 四 网络规划与设计 一 计算机网络技术概述 1 网络概
  • 关于Yarn的一些个人总结

    文章目录 前言 一 Yarn是什么 二 Yarn由什么组成 三 Yarn用来做什么 四 Yarn的优势是什么 五 Yarn解决了什么问题 总结 前言 在前面我们可以得出Yarn是Hadoop生态圈中一个重要得组成部分 主管资源管理 但是具体
  • 计算机科学丛书(2014-2018.Q1)

    ISBN 名称 作者 出版时间 978 7 111 53451 8 数学设计和计算机体系结构 原书第2版 美 戴维 莫尼 哈里斯 莎拉 L 哈里斯著 978 7 111 44075 8 嵌入式计算系统设计原理 美 Marilyn Wolf著
  • 【车载开发系列】FlashMemory基本概念

    车载开发系列 FlashMemory基本概念 车载开发系列 FlashMemory基本概念 车载开发系列 FlashMemory基本概念 一 FlashMemory的特征 二 常见的FlashMemory 1 NOR FlashMemory
  • 得帆信息创始人-张桐,受邀出席 BV百度风投AIGC主题论坛

    近日 得帆信息创始人兼CEO张桐 作为百度风投被投代表企业创始人受邀出席 向未来 共成长 BV百度风投AIGC主题论坛 与包括上海市徐汇区相关部门领导 百度集团相关事业部负责人及代表 以及来自国寿资本 中网投 麦顿投资的投资人 BV百度风投
  • 《系统架构设计师教程(第2版)》第2章-计算机系统基础知识-07-系统性能

    文章目录 1 性能指标 1 1 计算机的性能指标 1 2 路由器的性能指标 了解即可 1 3 交换机的性能指标 了解即可 1 4 网络的性能指标 1 5 操作系统的性能指标 1 6 数据库管理系统的性能指标

随机推荐

  • Andorid与其他操作系统的知识

    安卓用的是LINUX的内核 利用LINUX的几个库 应用层运行JAVA虚拟机上 这点和iPhone很想 只不过 iphone是基于unix系统 是微内核结构 同样运行在java虚拟机上 所以 安卓只是一个linux的衍生系统 是LINUX的
  • Opecv检测多个圆形(霍夫圆检测,轮廓面积筛选,C/C++)

    主要是利用霍夫圆检测 面积筛选等完成多个圆形检测 具体代码及结果如下 第一部分是头文件 common h pragma once include
  • Springboot+Mybatis中typeAliasesPackage正则扫描实现

    mybatis默认配置typeAliasesPackage是不支持正则扫描package的 因此需要手动继承org mybatis spring SqlSessionFactoryBean 自己实现正则扫描 方法和传统的spring myb
  • uniapp封装请求失败的提示

    当数据请求失败之后 经常需要调用uni showToast 方法来提示用户 可以在全局封装一个uni showMsg 方法 来简化uni showToast 方法的调用 在main js中 将自定义的 showMsg 方法挂载到uni对象上
  • JSONObject 获取全部键(键值对)

    JSONObject也是迭代器 故可使用Itear的方式进行获取全部键 主要是针对不确定键的情况下使用 直接上代码 JSONObject jsonObject new JSONObject response response 为str It
  • LeGO-LOAM 源码阅读笔记(imageProjecion.cpp)

    LeGO LOAM是一种在LOAM之上进行改进的激光雷达建图方法 建图效果比LOAM要好 但是建图较为稀疏 计算量也更小了 本文原地址 wykxwyc的博客 github注释后LeGO LOAM源码 LeGO LOAM NOTED 关于代码
  • 毕业设计-基于机器学习的入侵检测技术研究

    目录 前言 课题背景和意义 实现技术思路 一 基于机器学习的入侵检测模型 二 基于梯度下降树不同粒度特征的入侵检测 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设
  • lua-nginx-module

    Name ngx http lua module Embed the power of Lua into Nginx HTTP Servers This module is a core component of OpenResty If
  • 一款超级简洁的个人博客系统搭建教程(附源码)

    开发环境 IDEA jdk1 8 mysql8 33 开发框架 springboot 1 首先 确保已安装 Git 和 IntelliJ IDEA 如果你还没有安装 Git 请前往官网下载并安装 Git 2 打开 IntelliJ IDEA
  • 线程生命周期与线程状态

    每个Java程序都有一个主线程 即main 方法对应的线程 要实现多线程 必须在主线程中创建新的线程 每个线程要经历新生 new 就绪 runnable 运行 running 阻塞 blocked 死亡 dead 五种状态 线程从新生到死亡
  • js文件中再引入js文件的方法

    原文地址 http hi baidu com maojianlw item f0cfc9dcefc8ac12e0f46fe0 在我们的网站项目中 经常会出现这种场景 我们有一个或几个通用的js代码文件 比如专门进行字符串处理的string
  • sqli-labs/Less-27

    这一关 首先我们先去判断一下注入类型是否为数字型 然后我担心空格被过滤 所以将空格都换成了 0b 输入如下 id 1 0band 0b1 2 回显如下 从这可以看出逻辑运算符是没有被过滤掉的 并且这个注入点属于字符型注入 然后判断是单引还是
  • 详解Scrapy Cluster中Kafka与Redis的消息生产和消费

    相对于Scrapy框架 增加了Kafka和Redis模块的Scrapy Cluster要复杂的多 因此要搞清楚各大模块之间是如何工作的 就至关重要了 在Scrapy Cluster框架中 有三大系统模块 Kafka Redis Scrapy
  • type-c 介绍

    自从Apple发布了新MacBook 就一堆人在说USB Type C 我来从硬件角度解析下这个USB Type C 顺便解惑 特色 尺寸小 支持正反插 速度快 10Gb 这个小是针对以前电脑上的USB接口说的 实际相对android机上的
  • 七夕 H5小游戏,人脸融合搭载颜值评分

    七夕节因为其独特的文化属性成为各家大显神通的战场 人工智能时代 AI 七夕的玩法也越来越多 人脸融合 颜值评分这些有趣的黑科技都多少与大家见过面 但是将两个有趣的点结合到一起还是第一次 七夕 x H5小游戏 x 黑科技 近日 旷视科技的Fa
  • 揭开正则表达式的神秘面纱

    正则表达式30分钟入门教程 http deerchao net tutorials regex regex htm 揭开正则表达式的神秘面纱 http www regexlab com zh regref htm 原创文章 转载请保留或注明
  • angular:ng-star-inserted作用

    参考 javascript Angular 5 adds ng star inserted in some classes what is that Stack Overflow BrowserAnimationsModule来使用的 控制
  • chatgpt赋能python:如何用Python输出HelloWorld?

    如何用Python输出Hello World 作为初学者入门Python编程 输出Hello World是一个最基本的练习 那么 究竟该如何用Python输出Hello World呢 环境准备 在开始之前 需要先安装Python 并确保环境
  • (亲试有效)u盘制作启动盘后空间容量变小解决方法

    问题 大家有可能使用U盘来制作启动盘的需要 但是使用过来发现U盘的空间容量变小了 1G 2G 4G 8G 16G等变成了几百M都有可能 但是无论你再怎么格式化 还是找不回原来的空间容量 怎么办呢 自己经历过 亲身体验有效 方法简单 所以写出
  • 百度交易中台之账房系统架构浅析

    导读 百度交易中台作为集团移动生态战略的基础设施 面向收银交易与清分结算场景 为赋能业务提供高效交易生态搭建 目前支持百度体系内多个产品线 主要包含 小程序 地图打车 百家号 招财猫 好看视频等 本文主要介绍了百度交易中台的商户财务对账相关