首页 > 其他分享 >图解大厂清结算系统设计

图解大厂清结算系统设计

时间:2024-01-28 18:32:02浏览次数:31  
标签:缓存 商户 账户 结算 账务 大厂 模块 图解

1 账务清结算系统职责概述

账务清结算系统是支付系统的资金控制管理模块,分为:

1.1 账务

账务系统为外部客户和内部管理者提供符合公司内部财务核算的各种会计凭证、账簿与财务报表,一般分为:

  • 实时入账模块,负责在线完成客户账户余额更新
  • 日终批处理模块,负责日终余额校验并完成会计报表统计

1.2 清结算

支付业务的资金计算模块,最终目的是实现与商户的货款两清,功能包括:

  • 清算(Clearing),是根据交易结果和协议规定,对交易的客户备付金、商户手续费、银行成本和其他款项进行计算,明确每个客户的应收应付金额
  • 结算(Settlement),是根据结算周期规定,对清算产生的应收应付金额,完成资金的划拨;对账最终完成货款两清
  • 对账(Statement),过程中交易成员对收付的结算款项核对、确认,确保自身权益不受影响

2 建设重点

账务清结算系统承接支付的所有交易的资金处理。除了满足基本结算业务规则和财务会计规则,还需根据互联网支付业务特点,额外考虑:

  • 实时交易,交易总量大,交易峰值不可控
  • KA 商户模式,数据库存在热点账户问题,并且资金数据是敏感数据,要求绝对的准确,所以数据库表拆分方案复杂
  • 结算模式多样,千人千面结算计费规则

3 系统功能架构

三方支付场景中,账务和清结算是交易的必要一环,入账和清结算请求,来自交易支付系统。

3.1 支付交易的标准入账结算信息流

<img src="https://javaedge.oss-cn-shanghai.aliyuncs.com/image-20240126103033938.png" style="zoom:33%;" />

交易支付系统分别通知账务、清结算模块,完成交易入账、交易清结算处理,清结算完成结算后再次调用入账完成结算款划拨。

那么,为啥要分开并行完成交易入账和清结算请求呢?

  • 账务的维度和交易的资金出入要一一对应,组合支付、合单支付场景,一笔支付不能完全对应一笔结算,需在支付交易系统明确订单拆分规则,依商户订单模式报送清结算,依支付订单维度报送账务
  • 账务和清结算分开,可在内部做一个弱校验,即使其中一个系统出问题,也可保证不产生资损,降低资金风险

账务清结算系统接收到支付的指令后,根据业务流程、账务规则和结算规则,设计账务清结算系统的组成结构:

<img src="https://javaedge.oss-cn-shanghai.aliyuncs.com/image-20240126105013093.png" style="zoom: 33%;" />

一、前置接口 对外系统提供不同的协议服务,以完成账务入账和结算逻辑。主要处理:

  • 流量控制:对接口流量控制,防止流量洪峰;对单账户控制,防止热点账户影响
  • 校验中心:完成交易的完整性校验、幂等性校验、账户状态的可用性校验等
  • 决策中心:完成交易和记账规则、结算规则的匹配,同时处理熔断机制下的业务降级决策

二、账务清结算业务处理,账务结算的核心处理模块。这部分业务是根据传统的结算业务规则、账务会计规则,通过技术手段实现自动化结算业务、记账业务和会计报表业务。

4 技术难点

4.1 热点账户

即正常交易过程的某个特定时间段内,出现频次特高的账户。若数据库异常重试或交易故障的人工恢复等处理导致的高频,一般不作热点账户。

账务处理避免不了数据库行锁。若一次账务处理数据库事务 10ms,对热点账户处理 TPS 最大 100,一旦超过阈值,频繁锁竞争会使数据库性能骤降。

热点账户分类:

4.1.1 入款热点

入款热点常用的做法是缓冲入账,将入款交易缓冲,按照一定的处理速度做账务处理,使得账务处理速度低于 tps 的阈值,保证数据库性能稳定;如果在逐笔缓冲处理仍有压力,可以使用汇总缓冲。

4.1.2 出款热点

出款热点若采用缓冲,可能导致不良结果,一般不采用,通常对出款热点的处置方案:

① 数据库驱动层改写

由数据库驱动层检测数据库行锁,在规定时间周期内,合并更新,统一返回处理结果,类似汇总入账,降低热点的更新频度

② 数据库水平拆分

账务系统的账户记录分散到不同机器的不同表。再对有热点的账户逻辑拆分成多个账户,使拆分的多个账户分散到不同机器的不同表。热点账户变成多个账户,降低账户热度

③ 应用层实现

通过分布式缓存,冻结部分商户资金放在分布式缓存中,由缓存实时扣款。最终再同步到账户余额。

本文账务清结算系统采用分布式缓存方案,包括:账户余额实时处理模块、账户余额缓存处理模块和定时补偿处理模块。

4.2 业务处理模块

4.2.0 流程图

<img src="https://javaedge.oss-cn-shanghai.aliyuncs.com/image-20240126130734587.png" style="zoom:33%;" />

4.2.1 账户余额实时处理

  • 接受客户端出款请求,转发到账户余额缓存处理模块处理
  • 做实际的数据库余额操作,接受缓存处理模块或定时检查模块请求汇总更新数据库

4.2.2 账户余额缓存处理

负责用户出款请求。申请缓存余额、余额缓存出款、汇总更新余额功能。

4.2.3 定时补偿处理

为防止缓存异常等问题导致用户余额失真,定时处理模块定期检查缓存申请的余额处理情况和缓存状态,在缓存过期时调用余额实时处理模块刷新用户余额。

5 数据库拆分

账务清结算数据按用途分:

  • 每笔交易记录借贷双方,便于日终余额核对,同时满足会计上凭证需求

    需满足交易的日统计需求

  • 商户结算账单查询需求,商户 T+1 日需要核对 T 日结算账单数据

    需满足商户按日实时查询需求

  • 小微商户结算周期多变、对账周期长

    需满足小微商户按月账单读取,甚至按季度账单读取

基于热点账户和主要需求,数据库表拆分规则:

<img src="https://javaedge.oss-cn-shanghai.aliyuncs.com/image-20240126151412432.png" alt="image-20240126151412432" />

先按客户属性完成拆分:

  • 资金渠道方的数据,需满足按日汇总和 T-2 日对账需求,这部分数据采用按日一级拆分,为避免一日内交易过的,按订单 hash 拆分到不同表中,尽量保证单表的记录在几百万内
  • 商户数据,由于支付商户分小微普惠型商户和 KA 商户。这两类商户诉求不尽相同
    • KA 商户资金流大,交易笔数多,要求日清日结,按商户+日期+订单号拆分,控制单笔记录几百万内,保证单日商户数据查询效率
    • 小微商户,交易量小,查询时间跨度长,只按商户号一级拆分

6 结算规则

针对商户计费结算规则多变,设计个标准的算法指令,指令可完成数值比较、四则运算、数据赋值等操作。还设计一套算法组合标准,把若干算法按标准组装成算法执行策略,通过对算法策略包含的每个算法指令的执行,完成计费结算逻辑。

6.1 执行流程图

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都国企技术专家兼架构,多家大厂后端一线研发经验,各大技术社区头部专家博主,编程严选网创始人。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

参考:

本文由博客一文多发平台 OpenWrite 发布!

标签:缓存,商户,账户,结算,账务,大厂,模块,图解
From: https://blog.51cto.com/JavaEdge/9453762

相关文章

  • 图解大厂清结算系统设计
    1账务清结算系统职责概述账务清结算系统是支付系统的资金控制管理模块,分为:1.1账务账务系统为外部客户和内部管理者提供符合公司内部财务核算的各种会计凭证、账簿与财务报表,一般分为:实时入账模块,负责在线完成客户账户余额更新日终批处理模块,负责日终余额校验并完成会计报......
  • 这简历,进大厂能拿几k?
    今天要揭开高校里一些不为人知的真相,可能有些敏感,有可能会被和谐,请大家转发你们的同学,让更多人看到。先给大家看一份简历,看看你们觉得他进大厂能拿多少薪资。好家伙,又是蓝桥杯二等奖,国家二等奖,西部赛区二等奖,妥妥的大奖收割机啊。大家感觉如何呢?没感觉?那再看另一份简历。是不......
  • 《幻兽帕鲁》爆火,大厂坐不住了:这游戏是 AI 设计的?丨 RTE 开发者日报 Vol.134
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表......
  • 大厂咋做多系统数据同步方案的?
    1背景业务线与系统越来越多,系统或业务间数据同步需求也越频繁。当前互联网业务系统大多MySQL数据存储与处理方案:随信息时代爆炸,大数据量场景下慢慢凸显短板,如:需对大量数据全文检索,对大量数据组合查询,分库分表后的数据聚合查询自然想到如何使用其他更适合处理该类问题的数据组......
  • 转-图解Swin Transformer
    转自:https://zhuanlan.zhihu.com/p/367111046引言目前Transformer应用到图像领域主要有两大挑战:视觉实体变化大,在不同场景下视觉Transformer性能未必很好图像分辨率高,像素点多,Transformer基于全局自注意力的计算导致计算量较大针对上述两个问题,我们提出了一种包含滑窗操作......
  • 《图解设计模式》PDF
    内容简介原版连续畅销12年、重印25次!194张图表+Java示例代码=轻松理解GoF的23种设计模式《程序员的数学》《数学女孩》作者结城浩又一力作◆图文并茂194张图表(包括57张UML类图)穿插文中,帮助理解各设计模式◆通俗易懂用浅显的语言逐一讲解23种设计模式,读完此书会......
  • 时至今日,编制与大厂到底怎么选?
    我觉得这可能是一个辩论三天三夜也不会有结论的话题。说实话,2023年已经过去,真的没有感觉赚钱更容易,反而是周边失业的同事不少。现在感觉,是不是选择早点进入编制可能更加稳定?你们又怎么看?......
  • 大厂交易系统从0到1(01)-一笔交易到底涉及多少张表?
    退款逻辑,1个业务单号--关联多个支付单号--也关联多个退款单号?退款单号,关联优惠券返还的,也可在退款单列表关联吗?返还比例多少,是在优惠券系统设置?整个交易、支付、清结算、账务体系杂糅,会产生很多单据、单号。再考虑正向、逆向,他们的关系更复杂。本文就来搞定订单、账单、支付记录......
  • 图解函数脚本处理传入参数
    1.函数脚本传入参数:1.1.先修改函数脚本文件: 1.2.开发一个新脚本,执行该函数: 1.3.执行该脚本func3.sh:2.图解shell脚本处理参数: ......
  • 最高院--工程结算单中当事人仅有盖章没有签字的,应视为同意该数额,如一方否认该结算单为
    (2020)最高法民终1147号  青海豪都华庭房地产开发有限公司与中天建设集团有限公司建设工程施工合同纠纷案本院认为:关于案涉工程造价问题。《最高人民法院关于审理建设工程施工合同纠纷案件适用法律问题的解释(二)》第十二条规定:“当事人在诉讼前已经对建设工程价款结算达成协议,......