最近看了不少银联方面的清算系统的设计原理,对于跨行清算系统有了很大的了解,写这篇文章的目的是在于从一个程序员的角度去思考一个跨行清算系统的架构是如何实现的以及整个过程当中咱们有哪些思想是能够借鉴的。因为金融里面涉及到太多的专业名词,包括借贷,备付金,头寸,调拨等等,这里不会涉及到这些,取而代之的是以你们能够理解的概念去解释。程序员
下面简单的介绍一下两种跨行清算系统的实现原理以及特色。一种跨清算系统是咱们最熟悉的银联,还有一种是愈来愈流行的第三方支付系统,比较典型的是快钱。api
首先来拿生活中的一个很是常见的例子来讲明跨行清算的整个过程,这里面不涉及交易费等其余概念。安全
张三是工行的持卡人,他须要取现金,可是找不到工行的ATM机器,发现附近有建行的ATM机器,他只能去建行取款,整个过程就是跨行清算的过程,咱们以这个场景为例,分析一下业务流程,具体交互流程见下面一张图。网络
工行持卡人张三在建行ATM机器取款100,ATM请求建行主机,因为是工行的卡,建行不识别,只能请求工行去处理,工行识别持卡人帐户并扣款100,而后通知建行,建行则通知atm吐钱。架构
这里整个系统要解决两个问题:设计
1 建行如何与工行通讯接口
2 建行和工行之间如何清算,如上图结果,工行欠建行100.事务
整个系统的分析基于以上两个问题,下面首先解决是通讯问题资源
咱们先假设工行提供接口,只须要建行发送指约定格式的报文,便可于工行通讯,这种至关于建行直接经过接口方式与工行通讯。若是是这种方式,只能解决建行和工行的单向通讯,若是工行和建行通讯,则工行要发送建行指定的通讯报文格式。但是你们想一想,若是银行更多怎么办,下面是三家银行间的通讯it
当有三家银行的时候,通讯链路就有3*2=6条,当银行愈来愈多的时候,这种点对点的通讯变的愈来愈复杂,每新增一家银行,他要作以前银行都要作的不少重复性的劳动,这样的成本很是高,也不经济,那么必须出现一个网络,它可以接入全部的银行,新的银行只须要接入这个网络,就能够和其余全部的银行进行通讯。
先把这个网络成为通讯网络,这种通讯网络有两种方式能够链接全部的银行
下面一幅图演示了这两种模式的不一样:
对于这两模式,主要博弈就在于谁强谁弱。显然第三方支付公司属于适配器模式,须要一家一家银行去接入,至于银联,我的认为应该是第一种模式,这种对于银联这种须要稳定的系统来讲是最具备优点的。
解决了通讯问题,下面就看如何解决资金的清算问题。一种简单的方案就是工行在建行里面开设一个保证金帐户,用这个帐户去偿还在整个跨行交易中应付给建行的资金。
从上图来看,这种方案确实可行。只须要工行在建行里面放足额的保证金,就能够知足跨行的费用。可是这里面实际上存在很是多的问题,
对于第一个问题假设银行愈来愈多,会致使工行须要在其余每一个银行里面都开设保证金帐户(见下图),是一个很不经济的方案。
说明这个在其余银行存保证金的方案是不可行的,和以前通讯的问题同样,是否是能够把全部的银行保证金帐户单独管理起来,统一放置在一块儿,方便各个银行之间的清算。咱们暂时把这个系统称之为保证金系统。
保证金就是方便各个银行之间的清算,须要单独由一个系统进行管理,解决了跨行之间保证金存放的问题。每一个银行只须要在保证金系统中存点钱就能够了。保证金系统也有两种模式。先看看比较好理解的第一种模式:
在这种模式下,银行先把一部分钱存放在保证金系统里面,同时银行内部创建一个虚拟帐户,记录存放了多少钱,主要是方便对帐,万一这个保证金系统钱算错了怎么办。你能够想象一下,银行是很小气的,为啥愿意把钱存放到这保证金系统里面,这部分钱干啥很差,可以银行这么干的只有国家了,这个系统就是央行的备付金管理系统。每一个新增的银行都要存一份钱在这里。
另一种方案是倒过来思考,既然没有牛逼的央行做支撑,那能够在每一个商业银行都创建一个帐户,用这个帐户负责和银行进行清算。每新增一家银行,就在那个银行里面开一个保证金帐户。
这两种方式有本质的不一样,一个是银行把资金的一部分转出到保证金,银行创建虚拟帐户和保证金里面真实的资金映射。一个是保证金系统把资金转出到各个银行,本身内部创建一个虚拟帐户和银行中真实的资金帐户进行映射。这个间接的银行了后续的对帐机制,这里先不叙述。
全部的第三方支付公司跨行清算的流程都是第二种方式,只有国家级清算公司(好比银联)是第一种方式,这是一种资源和权力上的不平等,不过是能够理解的。
保证金系统解决了保证金存放的问题,接下来就是解决如何清算的问题。假设保证金转帐是实时的,就要面对上面说的问题,保证金不够的状况下,跨行交易是成功仍是失败。这是一个业务上问题,有不少种解决方案,咱们暂不说。从技术上来说,若是每一笔交易都要保证金实时记帐,那么保证金系统的负载太大,事务如何保证等等一些列的问题。因此一个最简单的方案就是:一天结算一次。
天天由一个系统记录这些跨行交易信息,汇总出来,统一记帐。这样一天只须要调用一次保证金系统便可。那么整个清算过程则是下面的流程:
清算中心最主要干得事情就是统计谁欠谁多少钱,以及触发保证金系统的调拨操做。
对帐包括两个部分,一个是跨行交易明细的对帐以及保证金余额的对帐。
首先要思考的是:对帐是谁发起的 ? 这个是了解对帐的本质。
咱们举生活中的一个例子,咱们把钱投资到一我的,那我的负责公司的平常运做。你确定会主动了解公司的帐务,由于那个是你的钱。对帐的发起人也是如此,对于银联的清算过程,对帐的发起者是商业银行,由于你把钱放在保证金系统里面,这是你的钱,你须要去关心这个的,银联可不关心这个。
对于另一种保证金系统,把钱放在各个银行里面了,那么对帐的发起者就是这个保证金系统维护者了。目前广泛的第三方支付公司都是这个模式,因此他要找各个银行要结果明细进行对帐,确认本身的资金安全无误。
以上就是一个简单的跨行清算系统的雏形,从一个就简单的例子入手,说明一个清算过程。目前银联的第三方支付公司的清算过程大体如此,可是实现细节远比这个复杂。可是一个基本的清算系统的本质模型大致上是不会变的。固然这个只是对于同币种的清算,不一样币种或者虚拟货币的清算会涉及到汇率的问题,这些就很复杂,有机会在研究一下,后续在分享。
PS:以上不少名词都是本身的随意写的,里面不少专业名词这里不说起,有兴趣的能够本身去了解。