第一章:对账系统概览 一、什么是对账? 1.生活中的对账场景 - 煎饼摊老板的故事 对账在我们的生活中非常常见。 举个例子:下班回家路上,你有点饿,看到路边有个煎饼。...这个对账叫账账对账。 3.对账方式 - 杯子店出现的三种对账方式 (1)账实对账:是指我们记录的账与实物资产的实际数量进行对账。 (2)账证对账:是指将自己的账本与记账凭证进行核对。...第三章:对账文件获取 对账文件获取是整个对账系统的起点,我们首先要将支付宝、微信、银行、银联、第三方支付等支付渠道的对账单下载到本地,解析入库后,才能进行后续对账动作。...第六章:对账引擎逻辑设计 一、起终日期在对账系统中的作用 1.按时间顺序对账 因为订单付退款关联顺序、跨日等因素,对账必须按时间顺序,顺序对账,不能跨日对账。...谈谈对账(一) 谈谈对账(二) MapReduce实现账单统计 有赞业务对账平台的探索与实践 美团配送资金安全治理之对账体系建设 美的支付-对账系统实现 支付对账系统怎么设计?
支付对账 很早 之前写过一篇支付对账相关文章,那时候负责对账系统日均处理数量比较小。 那最近正在接手现在的对账系统,由于当前系统日均数量都在千万级,所以对账系统架构与之前架构完全不一样。...那就这个话题,聊聊如何实现千万级数据支付的对账系统。 什么是对账? 我们先来回顾下什么是对账? 也许你对对账这个概念比较模糊,但是这个场景你肯定碰到过。...支付对账系统 开篇先来一张图,先来看下整体对账系统架构图: 整个对账系统分为两个模块 对账模块 差错模块 对账模块,主要负责对账文件拉取,数据解析,数据核对,数据汇总等任务。...今天这篇文章先不聊具体的系统设计,先来回顾下之前的对账系统设计,简单了解下对账的整体流程。...实际过程我们发现,单个渠道数据量很大的情况下,对账完成需要一两个小时。 虽然说对账是一个离线流程,允许对账完成时间可以久一点。
"互联网金融"这个概念已经流行了很多年,一般分为理财端、借贷端,大家比较耳熟的就是"花呗"、"借呗",今天我们来说下借贷端的对账设计,对账一般发生在放款、退款等场景;对账双方一般是资产端、资金端...再从数据表来设计对账: ?...上面的图仔细看,可能你会存在几个问题: 对账批次是什么:某一个交易日期、某一种交易类型、资产方与某一个资金方渠道进行对账,对账单与对账批次的关系-> 1:n 对账单什么:某一个交易日期、资产方与某一个资金方渠道对账结果的汇总...对账的实现方式: 通过定时任务:一个对账批次的处理流程:开始->获取渠道数据->获取资产方数据->对账->汇总结果->完成。...通过后台手动触发:处理流程如上,有了后台可以支持更多丰富的功能,比如手动上传对账数据,手动执行对账、手动执行平账、对账不平明细展示、批次明细展示、批次展示、对账单展示、报表导出。
核心对账逻辑 完成相应渠道的账单下载任务后,系统就可以根据各个渠道的特点及对账平台任务系统的排班逻辑,启动相应渠道的对账任务了,例如微信账单在10点左右开始下载,预计完成时间为10分钟以内,那么就可以将微信的对账任务安排在...所以,在进行某个渠道对账时需要根据条件将账单数据、支付平台订单数据分别清洗到两张中间表中,分别叫做账单待对账中间表(A表)、订单待对账中间表(B表),然后通过这两张表进行full join操作,这样可以确保对账逻辑不影响别的业务...,可以一页获取数据条数稍多一些,例如一次取5W条,然后在系统内部采用多线程方式对数据集分割后并行处理,每个线程按照特定的对账逻辑执行,得到对账明细结果集或差错结果集后,批量存入对账数据库。...差错处理逻辑 对账逻辑执行完成后,会产生一部分对账逻辑执行过程中,系统无法匹配的对账差错数据,这部分数据会在对账完成后记录在对账差错信息表中,差错信息表根据差错类型记录该笔差错的详细信息,除包括渠道类型...此外对账系统是一个以定时任务为主的系统,对于定时任务处理框架的选择可以采用分布式任务框架(推荐elasticjob/saturn)+自定义任务逻辑的方式综合处理(如有些任务存在先后顺序,如果框架本身不提供这类处理功能
对账是支付系统中的一环,因此在对账前我们先了解一下相关的业务知识 业务知识 什么是对账 传统的对账就是核对账目,是指在会计核算中,为保证账簿记录正确可靠,对账簿中的有关数据进行检查和核对的工作。...广义的对账,所有跨应用的数据交互,理论上都应该进行对账。所以对账也可以分为信息流对账,资金流对账。...信息流对账也一般用在自己内部系统的对账,比如支付系统的支付数据和业务系统的业务数据进行对账,保证资金交易和业务交易的一致性。资金流对账也就是支付系统和银行或者第三方支付系统之间的资金交易对账。...同时在扩展上也容易,一台Redis服务器不够,可以无限制增加用于对账用的服务器; 3、使用Redis的set集合的sdiff功能,利用Redis sdiff算法的高性能,比对上游记录和我方记录的差异。...同时统计对账相关金额和订单数。 5、对账统计 根据对账处理中,统计的相关信息包括:对账完成时间、对账是否成功、平账的金额和订单数、差错的金额和订单数、缓存池金额和订单数等。
最近要做支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,成功时,微信账单接口返回数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款结果一致...Ps:至于怎么调用微信接口下载对账单,在微信的官方SDK包中就有现成的办法,直接调用即可。注意对账单接口一次只能查询一天的数据。...'/ome/lib/wxpay/log.php'; // 实列化下载对账单对象 $input = new WxPayDownloadBill(); // 对账单日期 $input- SetBill_date...= WxPayApi::downloadBill($input); 打印$downloadBillResult就会发现他是一个数据文本(string),本文程序需要实现的功能就是从这个字符串从提取每一笔订单中的有效信息...,参考代码如下: /** * 微信对账单数据处理 * @param $response 对账单数据 * @return array 返回结果 */ public function deal_WeChat_response
._2, "warning"), lowData => (lowData.id, "healthy") ) (ConnectedStreams → DataStream 功能与 map 一样,对 ConnectedStreams...Connect后的两条流可以共享状态,在对账等场景具有重大意义!...https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/stream/operators/joining.html 三、实战:实时对账实现...需求描述 有两个时间Event1、Event2,第一个字段是时间id,第二个字段是时间戳,需要对两者进行实时对账。...processElement2)使用 ValueState使用 定时器onTimer使用 启动两个TCP服务: nc -lh 9999 nc -lk 9998 注意:nc启动的是服务端、flink启动的是客户端 import java.text.SimpleDateFormat
排序如上图具体端口、IP、数据量、速度看得清清楚楚,不监控了就点左上侧那个停止按钮可以设置自动每隔xx秒将网络流量信息导出到文件(csv / tab-定界/ html / xml)的选项(在“高级选项”窗口中),对账流量比较方便软件菜单项
上篇文章我们讲到对账系统收集数据的流程,下面我们再来讲下数据核对的流程。 这里再放一下支付对账系统整个流程,忘记的同学可以看这个图片再回忆一下。...DP_1_DAYS_AGO_Ymd 代表当前日期的前一天 主要逻辑非常简单,利用 sql 内连接查询的功能,可以查找单号,金额,渠道编码一致的数据。...查找差异数据较为麻烦,需要分成两部分收集:: 本端单边账,即本端存在数据,但是对端不存在数据 渠道端单边账,即对端存在数据,本端不存在数据 两边数据查找到之后,使用 SQL union 功能,将两端数据联合...trade_amount and t1.channel_code = t2.channel_code where t2.biz_order_no is null; 这里主要利用 SQL 左连接的功能...数据导出结束,DP 平台将会调用对账系统的相关接口,通知对账系统 DP 核对流程结束。 DP 核对流程是整个对账流程核心流程,目前千万级数据的情况下,大概能在一个小时之内搞定。
对账系统出现之后,就可减少以这种繁琐手工操作,财务只需要每天关注系统的对账记录,释放了生产力。 本文主要结合实际的项目经验,聊聊对账系统的设计方案。...这种模式比较简单,我们定时从 SFTP/FTP 取对账文件。 调用第三方渠道对账文件下载接口。这种模式需要对接渠道下载对账文件接口,定时调用下载。支付宝与微信为该模式。...比如支付宝对账文件格式为 csv,而微信的对账文件格式为 txt,另外有些渠道为 xml,xls。 第三方渠道对账文件里面字段数量以及字段名称也存在不同。 ?...这种情况下,每个商户号若前一日都存在交易,第三方渠道会为每个商户号都会产生一份对账文件。所以这里系统设计时候需要考虑到多份对账文件处理的情况。 2、对账文件需要考虑重复下载的情况。...最后我们再次重新对账,由于对端多账的数据会有对应的本端数据,将不会产生差异数据,这次对账完成且平账。 系统优化 目前系统的对账系统定时任务采用 Spring 定时功能。
一、支付对账逻辑 对账就是在金融支付(充值、提现、转账、消费、退款)中进行信息流和资金流的核对,主要包括业务对账、交易对账、账单对账、资金对账。...针对不同对账场景、不同对账主体,重点是确保平台对账、商户对账、渠道对账的账务数据和资金流水正确。...二、支付对账流程 支付对账就是系统根据配置的对账规则发起对账任务,在获取支付机构的对账文件,进行自动解析入库,并与本地的账单数据进行核对,从而完成订单交易对账和资金流水对账。...在完成金融业务的聚合支付后,系统次日发起对账定时任务跑批,对账系统获取金融平台的对账单,并导入支付机构生成的对账文件,根据对账引擎去路由数据源,并试算交易订单和资金流水对比是否一致:若一致则对账成功,若不一致则对账失败...在金融平台的对账中,主要涉及收单对账、分账对账、结算对账、退款对账、商户对账、银行对账等。 对账处理的关键是确保账证相符、账账相符、账实相符,对账单进行处理主要包括以下几种方式: 1.
4.3.2 FF_5导入银行对账单 (电子银行对账单) 角色:银行会计 会计核算 -财务会计-银行 - 收款 - 银行对账单 -导入 1.
最近要做支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,成功时,微信账单接口返回数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款结果一致...Ps:至于如何调用微信接口下载对账单,在微信的官方SDK包中就有现成的方法,直接调用即可。注意对账单接口一次只能查询一天的数据。...'/ome/lib/wxpay/log.php'; // 实列化下载对账单对象 $input = new WxPayDownloadBill(); // 对账单日期 $input- SetBill_date...= WxPayApi::downloadBill($input); 打印$downloadBillResult就会发现他是一个数据文本(string),本文程序需要实现的功能就是从这个字符串从提取每一笔订单中的有效信息...,参考代码如下: /** * 微信对账单数据处理 * @param $response 对账单数据 * @return array 返回结果 */ public function deal_WeChat_response
总结起来,我们认为对账引擎需要具备以下的能力: 流程编排能力 规则能力 插件化接入能力 目前业务对账平台的对账引擎结构如下: ?...每个流程节点的功能如下: ResourceLoader :基于各种数据源(DB、FILE、RPC、REST 等)提供加载器工厂,加载各个数据源的原始数据。...4.2 高吞吐量 一些离线定时对账场景,单次对账的数据量可能达到百万级,甚至千万级。这对对账平台的吞吐量造成了挑战。我们面对海量数据问题的通常解决思路,就是“拆”。...这样千万级的数据会变成消息被分散的对账服务器执行。 对账任务一般会选择在业务量较小的凌晨进行,是因为在对账过程中会需要通过反查业务接口,来获取实时数据。而更好的情况是,对账时能去除对业务接口的反查。...面对这样一些场景,就需要进行实时对账,也可以叫做秒级对账。 秒级对账往往基于业务消息进行触发,需要在事件触发后的短时间内执行完对账任务。
getType 输出 class java.lang.Object,而 getGenericType 输出的是 T。
上篇文章聊到了对账系统业务逻辑以及千万数据集对账系统存在的难点,这篇文章就来聊下千万级数据集下对账系统实现方案。...DP 平台提供功能如下: 数据双向离线同步,MySQL 与 Hive 互相同步 大数据离线计算,支持SQL(SparkSQL/HiveSQL/Presto)形式处理各类的数据清洗、转化、聚合操作,也支持使用...由于当前对账系统实现方案,涉及对账系统与 DP 平台,对账系统目前没办法调用 DP 平台触发任务,但是 DP 平台可以通过通过 HTTP 接口调用对账系统。...初始化对账任务 对账系统依靠对账任务记录推动流转,目前每天凌晨将会初始化生成对账任务记录,后续任务流转就可以从这里开始。...初始化对账定时任务将会查找核对规则表中所有的生效的配置规则,依次生成当天的对账任务记录: 对账任务记录部分字段与核对规则表含义一样,不再赘述,其他字段含义如下: bill_date 账期,一般 D 日对账任务核对
在工作中,最终一致性通常通过补单和对账来解决。补单主要指在运行时同时检查返回值,如果返回值为失败,会重新处理(补单处理)。 对账主要分为两个阶段:数据核对和差错处理。数据核对就是对账中的轧账。...差错处理就是对账中的平账。 ? 应用 以秒杀场景为例说明一下对账的常用流程。 对账依据和标准 对账问题最先解决的问题是对账依据和标准。...对账梳理 可以从明细和总数两个方面来做对账。在秒杀场景中,明细是一条条请求订单。总数是成功和失败了多少个请求,买出多少库存。明细对账主要用于定位问题。...总数对账是兜底策略,用来解决「怎么证明自己是对的」的问题。 对账时机 分为在线对账和离线对账。在线对账又分为实时对账和准实时对账。...实时对账就是比如秒杀成功了,那下游的每一步都需要是成功的,其他情况如超时等则采用重试来进行强一致性保证。准实时对账通常用异步来实现。
2 * Copyright (C) 2008 The Guava Authors3 *4 * Licensed under the Apache License...
LotteryUtil.drawGift(prizeList); Prize prize = prizeList.get(index); return prize; } import com.java.bf.ldkj.entity.Prize...; import io.netty.util.internal.ThreadLocalRandom; import java.util.ArrayList; import java.util.Collections...; import java.util.List; /** * 抽奖工具类 * 将奖品按集合中顺序概率计算成所占比例区间,放入比例集合。
概述 距离上篇对账文章也有几个月之久,对账二期系统早已如期上线。 对于该系统,目前只有两个字,稳定得一比。...对账二期针对支付宝和微信千万级订单量对账时间在3分钟内完成对账&缓存存储(根据订单号查询平台方订单数据)。...架构方面 基于SpringBoot的对账系统实现的一个比较不错的架构如下: ? 对账单下载组件每天定时触发,从支付通道服务器上下载对账单。...import org.nustaq.serialization.FSTConfiguration; /** * @author chenhx * @version FstSerializerUtil.java...configuration.asByteArray(obj); } } 使用非常的简单,下面看RocksDB工具类 RocksDB工具类 /** * 存储 * * @author chenhx * @version RocksDB.java
领取专属 10元无门槛券
手把手带您无忧上云