对账平台设计

这篇具有很好参考价值的文章主要介绍了对账平台设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

随着公司业务的蓬勃发展,交易履约清结算业务的复杂性也在不断的增高,资金以及各种数据的一致性和准确性也变得越发重要。

  • 以交易链路为例,存在着如下一些潜在的不一致场景:

  • 订单支付成功了,但是订单状态却还是“待付款”

  • 物流已经发货了,但是订单上面还是“待发货”

  • 订单用券成功了,但是优惠券状态还是 “未使用”

  • 订单参与活动下单成功了,但是活动没有核销记录

上述每个业务场景,都可能产生用户反馈,给用户带来困扰。业务对账平台的核心目的,就是及时发现类似问题,并及时修复。使问题在反馈前即被提前处理。

需求分析

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

  • stage 1 :对账最初来源于会计核算,是为保证账簿记录正确可靠,对账簿中的相关数据进行检查和核对的工作。
  • stage 2 :随着互联网金融或电商行业的发展,对账也扩大了应用范围,这一时期,对账是指在固定周期内,支付使用方和支付提供方(银行和第三方支付)相互确认交易、资金的正确性,保证双方的交易、资金一致正确。
  • stage 3 :从广义来看,所有的跨端系统之间的数据核对都应该叫对账,主要是检查和发现数据在流转过程中的不一致问题。通常分为信息流的核对和资金流的核对。信息流核对主要是对业务数据之间的核对,资金流是对资金交易数据进行核对。
    想要构建一个通用的业务对账平台,不可避免的要面临以下挑战:

对账平台设计

我们对于一个业务对账平台的核心诉求,主要包括要方便业务系统快速接入,要能处理业务方海量的数据,并保证一定的实时性。这会深刻影响业务对账平台的系统设计。

系统分析:

对账流程,可以分解为 “数据加载”、“转换解析”、“数据对比”、“结果处理” 这 4 步。为了适应多样化的业务场景,其中的每一步都需要做到可编排,放置各种差异化的执行组件。在每一个流程节点,需要通过规则可以自由选择嵌入哪个组件。其次,需要把数据从原始格式,转换到对账的标准格式(基于标准格式,就能做标准的通用对比器)。总结起来,我们认为对账引擎需要具备以下的能力:

  • 流程编排能力。

  • 规则能力。

  • 插件化接入能力。

对账数据标准格式:

无论是信息流对账还是资金流对账,我们都可以尝试把对账信息进一步归纳总结,抽取出公共信息字段,组成标椎数据格式,便于对账引擎的设计。
对账平台设计
基于此,这里简单设计了一些标准对账字段,如下:

对账平台设计
对账标准数据格式,也可以再对账失败时进行落库操作,便于对账告警,自动修复,人工查看等。

对账有一对一,一对多, 多对一 等关系,比对数据主要分为 条目匹配,状态匹配,金额匹配等。raw_data 可以存放此数据,便于对比。

对账方式

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

  • 单向对账:以一方数据为基准进行对账。比如结算跟支付平台,以结算数据为基准和支付平台核对,用来发现结算数据为支付成功,支付平台支付失败等问题。
  • 双向对账:以双方的数据互为基准对账。既要保证结算数据为成功的,支付平台也要成功,又要保证支付平台数据为成功的,结算数据也要成功。
    显而易见,双向对账更能够全面的发现问题。因此在条件允许的情况下,我们会优先选择双向对账。

对账力度

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

  • 明细对账:对双方的每条数据依次进行比对。它的优点是可以准确定位问题数据。缺点是对账口径的设计比较复杂。因为我们需要同时针对漏、重、错三种错误类别设计不同的对账口径,同时还要考虑到业务的边缘场景。稍有不慎,就会影响对账的准确性。
  • 总数对账:选择一个维度,进行总数级别的对账。总数级别的对账好处是对账口径的设计比较简单,可以快速实现,不易出错。缺点就是无法定位问题数据,一旦对账发现问题。还需要进一步寻找问题数据。
    推荐的做法应该是以明细对账为主,定位具体问题。以总数对账为辅,对明细对账的结果进行复核兜底。

对账时机:

目前对账时机有2种, 一种是离线对账,一种是实时对账。两种模式再系统设计层面非常相似,只有数据加载方式不同,下面介绍两种对账模式的系统流程:

离线对账:

离线对账主要是通过固定的周期进行对账。最短周期为T+1。它的好处是适用性较强,基本可以覆盖所有的对账场景。一些离线定时对账场景,单次对账的数据量可能达到百万级,甚至千万级。这对对账平台的吞吐量造成了挑战。

离线对账有两种方法:

常规方法是,通过数据平台(包含了所有要进行对账的原始主键数据,如订单号)将数据 push 到对账中心的 DB,然后对账中心集群通过分片策略,并按分页分批加载,加载数据进行离线数据对比。

另一种,则是当数据量超过千万时,利用数据平台从 hive 表中获取数据,然后投递到 MQ(kafka)。每个对账服务实例都是一个 Consumer 负责从 MQ 拉取消息消费,这样千万级的数据会变成消息被分散的对账服务器执行。

对账任务一般会选择在业务量较小的凌晨进行,是因为在对账过程中可能会需要通过反查业务接口,来获取实时数据。另一种方案是,对账时不要对业务接口进行反查。但是,会需要对业务数据进行准实时同步,提前进入对账中心的 DB 集群。两者优缺点如下:
对账平台设计
对账平台设计

结合我们自身业务,我们这里采取的是第一种方式:即由数据平台发送对账数据到 MQ,对账平台通过 MQ 消息反查业务方接口,进行数据对账。

实时对账:

实时对账又可称为 在线对账或准实时对账,往往基于业务消息进行触发,指在事件被触发后的短时间内执行完对账任务。且事件消息触发可能会有高并发,状态易改变等特点,因此需要相应的架构来进行支持。

在线对账和准实时对账的区别主要是在线对账耦合在结算链路中,可以在发现问题数据时,对结算流程进行拦截,而准实时对账是异步进行的,不具备拦截能力。在线对账有一定的局限性,一方面它依赖于对账数据是否能实时的准备好,另一方面也比较占用系统资源。因此我们的做法应该是以周期对账为主,在某些实时性要求比较高,且条件满足的场景使用在线对账。

这里我们主要考虑准实时对账,简单来说就是,通过 监听 业务方 DB 的binlog 日志(或者业务方本身的MQ),投递到 MQ 并进行 binlog 解析,由对账引擎消费 MQ 消息进行对账。
对账平台设计

差错处理

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

日切,在传统的银行业务中,每日作业需要有一个结束的时间,在该时间之后,需要对当日尚未完成的业务进行集中处理,并盘清当日的业务账目,做好受理下一日业务的所有准备后,即将记账日期更新为下一日。这一过程就叫日切。

对账平台设计

系统设计

考虑到 离线对账和实时对账的特点,对账引擎设计需要兼顾这两种类型的对账,现设计对账引擎各个组件如下:
对账平台设计

其中 ResourceLoader 、Trigger, Parser 、 Checker 、 ResultHandler 均为标准接口,所有实现了对应接口的 spring bean,都能被编排到对账流程之中,包括业务方自己实现的 plugin。这样就实现了插件化和可编排。每个流程节点的功能如下:

  • ResourceLoader :基于各种数据源(DB、HIVE、RPC、REST 等)提供加载器工厂,加载各个数据源的原始数据。加载的方式支持驱动加载、并行加载、多方加载等方式。业务方也可以自己实现加载器,利用流程编排能力嵌入到对账流程中。

  • Trigger:对账触发器,对账的触发主要依靠触发器,针对不同类型的对账可以编写不同的触发器,常用的触发器可由对账平台提供,如 OrderTrigger(订单触发器),StockTrigger (库存触发器)。

  • Parser :对已加载的原始数据进行建模,转换为对账标准模型。

  • Checker :按照配置对指定字段、按指定规则进行比较,利用规则引擎,提供脚本化化对账方式或者自定义对账插件等。产生对账结果。

  • ResultHandler :使用指定的 handler 对结果进行处理,常见的处理器包括持久化、发送报警、甚至直接修复数据等等。

其中 Config 作为对账平台的配置中心,可以对 对账业务方进行配置,编排,也可提供对账的可视化功能。

实时对账设计要点:

实时对账考虑基于业务MQ消息触发,主要关注 实时性,吞吐量等方面,如消费速率,消息堆积造成实时对账不准确问题。

对账平台设计

设计中主要加入了 限流、取样、路由、等 pipeline 来处理高并发事件消息。同时在进入事件处理线程池之前,需要进入阻塞队列,避免大量的请求直接耗尽线程资源,同时实现事件处理的异步化。处理线程批量定时从阻塞队列获取任务来执行。同时,利用延迟阻塞队列,还可以实现延迟对账的特性。出现不一致的情况时,如果立即去进行对比,往往还是不一致的。所以就需要根据情况,在事件发生后的一段时间内,再触发对比

差错处理设计:

在差错处理阶段,可以建立一个统一的差错记录模型,核心字段包括 对账场景、对账批次,数据来源,对账业务ID,错误类型编码,错误原因,数据处理状态 等。通过定时任务定期轮询差错记录的方式发起差错处理流程:首先对差错记录的数据进行二次核对,如果二次核对确认这条数据并没有问题,我们就会回更差错记录的处理状态。如果二次核对发现数据确实有问题。

可以提供两种处理模式。一种是通过系统的手段自动修复。另外一种是通过报警的方式,人为介入。此外可以建立一个问题的人工处理模块。可以对一次结算流程的整个生命周期进行回放,并针对特定场景提供一键修复的能力。

差错处理标准模型

对账平台设计

差错处理流程

对账平台设计

整体架构图

对账平台设计

接入方式

我们提供了一个配置后台可以让用户编写脚本的方式,实现对账。脚本使用了:AviatorScript:https://www.yuque.com/boyan-avfmj/aviatorscript

  • 配置后台

对账平台设计

  • 失败明细

对账平台设计文章来源地址https://www.toymoban.com/news/detail-496859.html

到了这里,关于对账平台设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于java的古诗词爱好者学习交流平台的设计与实现(Springboot框架) 研究背景与意义、国内外研究现状

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、

    2024年02月03日
    浏览(60)
  • css使用border-image和flex布局设计一个随着文字多少自适应的标题

    需求: 设计一个标题,让中间部分随着文字而撑大,同时文字渐变,两边自适应,这种情况就不能用传统的背景图片了,想到可以使用图片边框来做 解决思路:   1.需要一个大盒子和三个小盒子 2.大盒子设置display:flex; 左右两个小盒子分别设置flex-grow; 并设置背景图片 3. 给中

    2024年02月09日
    浏览(43)
  • 基于Python实现Midjourney集成到(个人/公司)平台中

    目前Midjourney没有对外开放Api,想体验他们的服务只能在discord中进入他们的频道进行体验或者把他们的机器人拉入自己创建的服务器中;而且现在免费的也用不了了,想使用就得订阅。本教程使用midjourney-api这个开源项目,搭建Midjourney相关接口服务,以集成到个人平台中~ 本文

    2024年02月20日
    浏览(40)
  • 怎样使用GPT案例:使用GPT获得OPPO终止ZEKU芯片业务需要的背景知识

    以下引用 @郑昀的微博: #IT那些事儿# 神仙打架那些事儿 主角:美国公司高通(总部在加州),英国公司ARM(总部在剑桥,但2016年被孙正义收购,2022年孙正义从软银退隐之后将全身心投入到ARM的变革工作中) 第一回合:2021年1月13日,高通希望通过收购 Nuvia 推出自研 CPU 架构

    2024年02月06日
    浏览(44)
  • 仿10086电信业务平台

    目录 配置环境 框架图 模块分析 四大板块 功能代码段 语音播报 数据库调用 显示时间 总体框架 完整代码: 文末附完整代码链接  VC++6.0 东进 语音卡 Access 数据库 ADO 接口技术         在VC++6.0中,我们通过新建MFC(微软基础类库),编写各种程序语句,最终实现了完整的

    2024年02月08日
    浏览(25)
  • 数据库概论课程设计-汽车租赁公司数据库系统的设计

    进入新的世纪以来,经济的快速发展,让很多东西都快速的淘汰了,好多新型的东西也逐渐进入我的视野,而更有好多以前很贵的东西,渐渐降价普及了,汽车逐渐走进了千家万户。而汽车作为一种高价位消费品,结合我国低购买力的国情,很多人就买不起汽车了,所以公司

    2024年02月02日
    浏览(71)
  • 【Apollo】自动驾驶的平台背景,平台介绍

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 本文用于投稿于星火培训:报名链接 阿波罗是百度发布的名为“Apollo(阿波罗)”的向汽车行业及自动驾驶领域

    2024年02月10日
    浏览(45)
  • 机电公司管理小程序|基于微信小程序的机电公司管理小程序设计与实现(源码+数据库+文档)

    机电公司管理小程序目录 目录 基于微信小程序的机电公司管理小程序设计与实现 一、前言 二、系统设计 三、系统功能设计  1、机电设备管理 2、机电零件管理 3、公告管理 4、公告类型管理 四、数据库设计    五、核心代码   六、论文参考 七、最新计算机毕设选题推荐

    2024年03月19日
    浏览(48)
  • 美易平台:福特汽车美股盘前跌1.8%,公司宣布削减纯电动皮卡F-150 Lightning的生产。

    福特汽车宣布削减纯电动皮卡F-150 Lightning的生产,这一消息导致福特汽车的美股在盘前下跌了1.8%。这一决定引起了广泛的关注和讨论,因为F-150 Lightning是福特汽车在电动车领域的一次重要尝试。 根据福特汽车的声明,他们决定削减F-150 Lightning的生产是为了调整供应链和生产

    2024年01月20日
    浏览(43)
  • 大数据-玩转数据-Flink营销对账

    在电商网站中,订单的支付作为直接与营销收入挂钩的一环,在业务流程中非常重要。对于订单而言,为了正确控制业务流程,也为了增加用户的支付意愿,网站一般会设置一个支付失效时间,超过一段时间不支付的订单就会被取消。另外,对于订单的支付,我们还应保证用

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包