如何设计复杂多变的java清分系统之一

再讲解如何设计复杂多变的清分系统之前 先看下咱们整体架构清分

如何设计复杂多变的java清分系统之一_第1张图片

我们接入服务是两台服务器,一个缓存服务器,共享目录设置在接入服务服务器其中之一,一天缓存服务器,oracle数据库主备库 这是目前大致情况,由于清分服务 主要是内部人员使用,使用人数不多,对高并发要求不高,主要用于清算,所以系统必须稳定

问题一 为何设置主备库

   因为私网对账清分有很多统计服务 主要以查询为主,一般查询使用备库,减少压力,而对账清分使用主库,目前 改架构情况是对账清分5亿,100万笔左右 对账时间10分分钟左右,清分时间10分钟左右

 

问题二 对账清分服务为何只使用单台服务器

   由于历史原因,首先私网搭设时部分银行不容许使用一些中间件(后面专门会写一节模拟redis分布式锁的文章) 而多台服务器对账清分必然需要使用分布式锁,另外 清分服务需要调用银行服务 有些银行服务可能无法支持这种并发调用,基于这些考虑对账清分私网采用的单台服务器,而查询服务ng分压到另一台服务器上,总之私网对账清分主要是计算金额要对,对账数据要稳,质量要高。

 

私网对账和公网对账流程上差不多,具体可以参考前面章节,而清分到底干了些什么,为何复杂多变呢?

其实清分就是根据商户出款,机构的费率设置,算各级分润差,对接银行接口 就这么简单(具体业务可以参考前面章节)具体大致流程如下

如何设计复杂多变的java清分系统之一_第2张图片

费率差计算:不同的机构费率差设计不一样

商户打款:商户打款不是简单的第三方账单的出款金额,有商户减免 、商户补贴、 还有各通道方的不定期打折政策 比如微信的蓝海行动 支付宝的绿洲活动等

通道手续费:通道有0通道比如针对医院 福利机构 千二 千6通道等

接口对接:接口对接是最复杂的,基本上每对接一次 就需要重新写接口,有传输上sftp ftp socket http 文件格式上有txt xls pdf csv 语言上有java c c++ 加解密算法上有国密算法 rsa算法 des算法 以及内部算法 等等

还有其它各种统计报表差异等等 这里不再一一表述

针对以上各种复杂多变的需求,我们必须需要设计好整个清分流程。目前我们使用的是模板方法模式+策略模式+抽象工程模式

模板模式:将整个清分流程固定好,基础数据+抽象方法+默认实现,如果有定制 重写抽象方法即可

public final 模板{

   初始化参数();

   abstract开始();

   provider.getService(...).计算分润();

   provider.getService(...).计算商户出款();

   ....

   abstract结束();

}

其中 abstract是抽象方法 provider是工厂模式

策略模式:每家银行算法逻辑不一样,这里将其算法抽象,有具体需要重写的 可以根据定制

如何设计复杂多变的java清分系统之一_第3张图片

抽象工程模式:每家银行各个环节算法其实根据部署环境 可以打包成一整套算法产品逻辑,这样完全 根据不能的银行 打包成自己独立的一套算法逻辑,最终部署的包就是接口+算法产品簇lib

 

 

 

你可能感兴趣的:(对账清分,对账清分)