Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >有赞业务对账平台的探索与实践

有赞业务对账平台的探索与实践

作者头像
有赞coder
发布于 2020-08-25 07:06:01
发布于 2020-08-25 07:06:01
1.3K0
举报

一、引子

根据 CAP 原理,分布式系统无法在保证了可用性(Availability)和分区容忍性(Partition)之后,继续保证一致性(Consistency)。我们认为,只要存在网络调用,就会存在调用失败的可能,系统之间必然存在着长或短的不一致状态。在服务化流行的今天,怎样及时发现系统服务间的不一致状态,以及怎样去量化衡量一个系统的数据一致性,成为每个分布式环境下的开发者需要考虑并解决的问题。

二、背景

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

  • 订单支付成功了,但是订单状态却还是“待付款”
  • 物流已经发货了,但是订单上面还是“待发货”
  • 银行退款已经到账了,但是订单上面还是“退款中”
  • 订单发货已经超过7天了,但是却没有自动完成

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

三、挑战

那么一个业务对账平台,会面临着哪些挑战?

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

四、架构

从局部到整体,本文先从解决上面三个问题的角度,来看有赞业务对账平台的局部设计,再来看整体系统结构。

4.1 易于接入

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

  • 流程编排能力
  • 规则能力
  • 插件化接入能力

目前业务对账平台的对账引擎结构如下:

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

  • ResourceLoader :基于各种数据源(DB、FILE、RPC、REST 等)提供加载器工厂,加载各个数据源的原始数据。加载的方式支持驱动加载、并行加载、多方加载等方式。业务方也可以自己实现加载器,利用流程编排能力嵌入到对账流程中。
  • Parser :对已加载的原始数据进行建模,转换为对账标准模型。利用规则引擎,提供脚本化(Groovy)的转换方式。
  • Checker :按照配置对指定字段、按指定规则进行比较,并产生对账结果。支持findFirst(找出第一个不一致)、full(找出所有不一致)等对比策略。
  • ResultHandler :使用指定的 handler 对结果进行处理,常见的处理器包括持久化、发送报警邮件、甚至直接修复数据等等。

通过统一的 facade,将整个对账流程进行串联。在执行不同节点时,根据配置选择不同的默认组件或者插件来执行。可以在管理后台,对每个流程节点进行编排:

4.2 高吞吐量

一些离线定时对账场景,单次对账的数据量可能达到百万级,甚至千万级。这对对账平台的吞吐量造成了挑战。我们面对海量数据问题的通常解决思路,就是“拆”。分布式任务拆分+单机内任务拆分,将数据块变小。同时,也可以利用一些大数据的工具来帮我们减轻负担。

目前的对账有 2 种模式:一种常规模式,是通过数据平台(包含了所有要进行对账的原始主键数据,如订单号)将数据 push 到对账中心的 DB,然后订单中心集群通过分片策略,并按分页分批加载,加载数据进行对比。另一种,则是当数据量超过千万时,利用数据平台的 spark 引擎从 hive 表中获取数据,然后投递到 nsq(自研消息队列)。nsq 会选择其中一个 consumer 进行投递(不会投递到多个 consumer)。这样千万级的数据会变成消息被分散的对账服务器执行。

对账任务一般会选择在业务量较小的凌晨进行,是因为在对账过程中会需要通过反查业务接口,来获取实时数据。而更好的情况是,对账时能去除对业务接口的反查。因此,会需要对业务数据进行准实时同步,提前进入对账中心的 DB 集群。

主要思路是基于业务 DB 的 binlog 日志或者业务系统自身的消息,进行数据同步。后续流程则类似。

4.3 高实时性

一些特定的业务场景,比如买家已经付款成功了,但是由于银行第三方的支付状态回调延迟,导致订单状态还是待付款。这种情况,买家会比较焦急,可能产生投诉。面对这样一些场景,就需要进行实时对账,也可以叫做秒级对账。

秒级对账往往基于业务消息进行触发,需要在事件触发后的短时间内执行完对账任务。且事件消息的触发,往往具有高并发的特点,因此需要相应的架构来进行支持。

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

4.4 整体设计

上面介绍了业务对账平台的各个局部设计,下面来看下整体结构。

整体上主要采用调度层+对账引擎(core+plugin)+基础设施的分层架构。调度层主要负责任务触发、任务拆分、调度;对账引擎则负责执行可编排的对账流程;基础设置层则提供规则引擎、流程引擎、泛化调用、监控等基础能力。

五、健康度

对账中心可以拿到业务系统及其所在整个链路的数据一致性信息。基于此,对账平台具备了给予业务系统和链路健康度反馈的能力。

六、共建

前面有提到,对账的流程被拆分为四个固定的流程节点,且有四个对应的标准接口。通过流程引擎和规则引擎的能力,可以根据 spring bean name,来将系统默认组件或者插件编排到对账流程之中。基于这种开放性的设计,业务对账平台支持与业务团队进行共建。

首先,对账平台提供标准接口的 API jar 包,业务方通过引入 jar,实现相关接口,并将 impl 打包。这样,对账平台通过 spi 的方式,可以引入业务方的插件包,并加载到对账中心的 JVM 中执行。

七、未来

业务对账平台,是面向业务场景建立,但同时属于数据密集型应用。平台上线以来,已经接入公司各团队数十个对账任务,每天处理千万级的数据。展望未来,业务对账平台的使命会从主要进行离线数据分析处理,演进到利用应用系统的健康度数据帮助系统进行实时调整的方向。在分布式环境下,没有人能回避数据一致性问题,我们对此充满着敬畏。

-The End-

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 有赞coder 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
业务稳定性守门员:有赞业务对账平台的探索与实践
对账,从狭义上来说,就是核对账目,是保证会计账簿记录质量的重要程序。从广义上来说,对账可以解释为数据比对,用于解决所有分布式系统之间交互(远程调用、消息触发等)出现的数据不一致问题。有赞作为一家Saas公司,随着业务的发展,商家数达到上百万,每天产生上千万的业务数据,系统稳定性更加要求达到99.99%。数据对账作为业务稳定性必要的一环,下文将介绍配置化数据对账平台在有赞的解决方案,如何在复杂的系统之间,保证不一致的快速发现、展示以及解决。
有赞coder
2020/08/24
2.1K0
业务稳定性守门员:有赞业务对账平台的探索与实践
高性能平台设计——美团旅行结算平台实践
点击蓝字订阅,不错过下一篇好文章 本文根据第23期美团点评技术沙龙演讲内容整理而成。 酒旅有很多条业务线,例如酒店、门票、火车票等等,每种业务都有结算诉求,而结算处于整个交易的最后一环不可缺少,因此我们将结算平台化,来满足业务的结算诉求。 结算平台通过业务需求以及我们对业务的理解,沉淀了各种能力并构建了丰富的能力地图。我们将业务的发展归纳为几个阶段,例如业务孵化阶段,快速抢占市场扩大覆盖阶段,市场稳定后急需盈利阶段,国内业务稳定后的国际化阶段,业务发展的各个阶段都能在结算平台找到相应的能力支持。 业务孵化阶
美团技术团队
2018/03/13
1.8K0
高性能平台设计——美团旅行结算平台实践
交易履约之结算平台实践
Tech 导读 京东科技业务在快速发展的同时,产生了众多线上化资金结算的需求。传统的线下资金结算模式有着人力成本高、耗时长、多方沟通协调成本高、结算准确率低等固有缺点,且无法满足“风法财审”对于资金流程的管控要求,在此背景下金道结算平台孕育而生。本文从系统建设的背景、设计细节、已支撑案例及适用业务场景多个层面进行详细阐述。读者可以关注文中所讲的系统实践过程,进而对结算领域系统设计能力提升,具有一定的参考价值。
京东技术
2023/01/05
2.2K0
交易履约之结算平台实践
千万级支付对账系统是怎么设计的?
今天给大家分享一篇关于对账系统设计的文章,出自在支付行业摸爬滚打好几年的小黑哥之手。
架构之家
2022/09/01
3.5K0
千万级支付对账系统是怎么设计的?
交易日均千万订单的存储架构设计与实践
导读 在京东物流技术中台架构升级项目中,物流交易体系以新的接入-交易-履约-执行四层架构进行重新搭建,其中交易订单负责物流与客户之间产生物流服务契约的单据流量收口,同时承载向下游物流履约层分发的职责。在这个大的背景下,交易需支撑日千万订单存储,如何保障订单数据基座高扩展、高可用、高吞吐?
京东技术
2023/10/27
9570
交易日均千万订单的存储架构设计与实践
有赞零售中台建设方法的探索与实践
上图是有赞零售SaaS业务整体业务架构概览,大体上可以分为前台业务、中台业务、后台业务。
有赞coder
2020/08/24
1.1K0
有赞零售中台建设方法的探索与实践
如何设计财务对账系统 —— 从0到1搭建对账中心实战
举个例子:下班回家路上,你有点饿,看到路边有个煎饼。于是过去买了个煎饼,老板把煎饼递给你,然后指着墙上的二维码贴纸说「8 块」。
蒋川
2021/07/16
4.4K0
如何设计财务对账系统 —— 从0到1搭建对账中心实战
腾讯百亿级大规模内容处理系统探究
作者 | 腾讯内容处理中台技术团队 1. 背景介绍 腾讯内容处理中台是打通腾讯内容生产、内容处理、内容分发、内容变现等内容生态闭环的核心基础服务。作为衔接内容生产端和内容消费端的关键路径,旨在通过智能化、规模化的人机协同内容处理和内容审核等关键技术方案,对内容供给端产生的各种形态内容如视频、图文、商品、评论等,进行安全化、标准化、算法化等流水线工业化处理,并将处理后的内容统一分发到腾讯视频、QQ 浏览器、腾讯新闻等多端渠道,为不同的用户群体提供更好、更高效的内容服务体验。 图 1-1 内容生态概览图 2.
深度学习与Python
2023/03/29
1.5K0
腾讯百亿级大规模内容处理系统探究
干货 | 携程商旅订单系统架构设计和优化实践
携程商旅是一站式互联网差旅服务平台,为客户提供差旅管控、预订、出行、结算、成本、风控等服务的在线TMC(Travel Management Companies)。主要产线有:机票、酒店、火车票、打车、接送机、包车、租车、汽车票等。携程商旅订单系统针对B端客户定制化需求多样性,商旅产线丰富性,TMC业务与产品业务结合的复杂性等,对订单系统架构进行了优化。
携程技术
2021/11/12
2.9K0
干货 | 携程商旅订单系统架构设计和优化实践
美团外卖广告平台化的探索与实践
总第491篇 2022年 第008篇 随着美团外卖业务不断发展,外卖广告引擎团队在多个领域进行了工程上的探索和实践,目前已经取得了一些成果。我们计划通过连载的形式分享给大家,本文是《美团外卖广告工程实践》专题连载的第一篇。 本文针对业务提效的目标,介绍了美团外卖广告引擎在平台化过程中的一些思考和实践。我们围绕实际遇到的问题、思考过程以及具体的落地方案,从业务的标准化、技术框架、产研新流程的改造等三个方面进行展开,希望能为读者提供思路上的借鉴。 1 前言 2 现状分析 3 目标 4 整体设计 4.1 整体思
美团技术团队
2022/03/04
1.5K0
支付对账系统序章:千万级数据对账怎么这么难?
那最近正在接手现在的对账系统,由于当前系统日均数量都在千万级,所以对账系统架构与之前架构完全不一样。
andyxh
2021/12/22
2K0
支付对账系统序章:千万级数据对账怎么这么难?
图解:支付系统产品架构
关于产品架构和业务架构的区别,一直存在争议。由于产品架构没有固定的标准,许多产品架构借鉴了TOGAF的4A架构理论中的业务架构方法。如果非要区分技术和产品,可以这样理解:产品主要关注用户使用的功能和内在关系的展示,而技术则更侧重于功能实现和技术栈的支持。
Louis XIV
2025/01/16
2960
图解:支付系统产品架构
漫画:架构师是吧?什么是哈希轮?
小码收到猎头小姐姐的面试邀约后,认真进行了准备,并在约定时间到达了面试公司....
田维常
2019/09/25
7800
漫画:架构师是吧?什么是哈希轮?
千万级支付对账系统怎么玩(上篇)?
上篇文章聊到了对账系统业务逻辑以及千万数据集对账系统存在的难点,这篇文章就来聊下千万级数据集下对账系统实现方案。
andyxh
2022/05/10
1.6K0
千万级支付对账系统怎么玩(上篇)?
化繁为简 - 腾讯计费高一致TDXA的实践之路
导语:腾讯计费是孵化于支撑腾讯内部业务千亿级营收的互联网计费平台,在如此庞大的业务体量下,腾讯计费要支撑业务的快速增长,同时还要保证每笔交易不错账。采用最终一致性或离线补偿的方案往往会带来较多的处理风险或投诉。因此,我们提出了一种通用的基于应用层的长事务解决方案,将复杂的分布式一致性问题化繁为简。 1 引言 英国计算机专家Hoare所言,软件设计构建有两种方法,一是使其尽可能简单,从而一目了然确定其中不存在缺陷;另一种方法则是使其极为复杂,以至于看不出什么明显的缺陷。然而,实现第一种方法要困难的多
腾讯技术工程官方号
2019/11/22
3.6K0
化繁为简 - 腾讯计费高一致TDXA的实践之路
支付对账系统怎么设计?
对于公司自建支付系统来说,一般会根据业务的复杂程度不同,对接多个支付渠道。对于互联网公司而言,常见的渠道会对接支付宝、微信、ApplePay等;而金融类的公司则更多会对接银联、易宝、快钱这类银行卡代收付通道,也会有直接对接银行渠道的;海外则是如Adyen、Stripe等这类国际支付公司。
用户5927304
2019/07/31
3.1K0
vivo营销自动化技术解密|开篇
营销自动化是指专门为营销部门或组织设计的软件平台和技术,可以更有效地在线进行多渠道营销并使重复性任务自动化。营销部门和销售人员通过制定任务和流程的操作标准,然后由IT系统进行解释、存储和执行,从而提高效率并减少人为错误。
2020labs小助手
2021/09/13
2.3K0
vivo营销自动化技术解密|开篇
履约核心引擎低代码化原理与实践
Tech 导读 规则引擎是一种嵌入在应用程序中的组件,主要解决易变逻辑和业务耦合的问题,行业上开源的规则引擎,在互联网场景使用存在诸多障碍,如高并发略显不足、更多面向技术人员、无法规模化的让规则从应用程序代码中实现分离。 基于此,京东供应链研发部自研了一套,面向业务角色的海纳低代码规则引擎平台,产品定位是面向业务、研发多角色一体化的零低代码开发平台,其中规则引擎是其最核心的部分之一,本文以此为核心展开说明。
京东技术
2023/08/25
5160
履约核心引擎低代码化原理与实践
电商交易系统核心技术
电商诞生已经有20多个年头了,从早期很多人的质疑、骗子、不接受、甚至肄业排斥、打压,到现在彻底融入我们生活的方方面面,并号称中国的 “新四大发明”,“认知教育”使命已经完成。人们足不出户,网上下个单,就可以在家坐等收包裹,确实是一种享受。
微观技术
2020/08/20
2.8K0
全新物联网数据集成 :Flow 可视化编排 & 双向数据桥接
为物联网平台与应用提供高性能的实时数据处理与集成,一直是 EMQX 最重要的能力之一。最新发布的 EMQX 5.0 针对数据集成相关功能进行了深度的重构和优化,以期帮助用户更加轻松灵活地使用。
EMQ映云科技
2022/08/16
7410
推荐阅读
相关推荐
业务稳定性守门员:有赞业务对账平台的探索与实践
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档