[关闭]
@coldxiangyu 2017-07-10T10:30:07.000000Z 字数 2078 阅读 1745

对银保通的深度思考

WEB框架


关于银保通

首先要说一下银保通是什么,顾名思义,银保通就是连接银行和保险公司的业务平台。银行算是保险公司销售保险很重要的一个大渠道,银行的渠道再细分的话,还有柜面、网银、手机银行等小渠道。银行对投保人进行必要的信息校验之后,将保单信息传给保险公司,保险公司再根据自己的产品定义对投保规则等进行校验,判断是否可以出单,反馈给银行。
银保通涉及到的交易比较多,除去试算、承保、撤单、打印等等一系列的实时交易,还有一系列非实时对账交易。

银保通实现

从银保通的上述定义来看,整个过程非常简单,无非就是银保间进行通信的过程:
银保通在启动过程中,初始化监听类SocketListener,该类通过读取socket.xml配置文件获取不同银行配置的端口port以及处理类class,每一个银行初始化一个socket线程,循环监听配置端口port,一旦接收到所监听端口请求则另起一个线程,原线程继续监听。而另起的线程携带socket信息初始化处理类class对请求信息进行处理,一般就是由format类通过xsl转换,调用核心webservice获取返回信息并转换为银行报文,交由OutputStream返回,线程终止。

面临问题

当然,这只是大概的过程。在实际应用的过程中,银保通面临的问题有很多,一个是多,一个是乱。
所谓的多,一是使用这套银保通架构的保险公司很多,每个保险公司都需要派人力驻场,虽然外包都是赚人头费,但确实是对人力极大的浪费。
二是银保通对接的银行众多,规模比较大的保险公司基本上要对接二三十个银行。
三是每个银行险种众多,规则众多,基本上都是以保险公司为主体。
所谓的乱,就是银保通在行版本很乱,不同的保险公司银保通架构五花八门,并不能有效的进行统一。

解决方案

针对以上问题,目前开始有了安邦云核心、统一接入平台这种服务性质的项目出现。

对于安邦云核心,目前只针对安邦,至于能不能拓展至全部银行,还未知。

统一接入平台算是对银保业务统一化走出的第一步,至于这款产品上线后的效果,还需要观察。

优化方案

上面的优化概念就显得太大了,以下只讨论安邦银保通的优化思路:

之前另写过文章,探究能否将银保通所有Socket监听注册到Eureka或者Zookeeper作为服务供第三方统一调用?
首先,socket不是RPC,个人理解连RC都不是,大概也只有一个R了。
因为socket无论是服务端还是客户端都是通过流的写入写出进行通信的,通过socket建立连接,write or read的过程,也不能称之为call,socket只是搭建起了两者沟通的桥梁。
因此除了远程通信之外,两者可能只有‘RPC是Socke的封装’的关系了。
我们要注册Eureka或者Zookeeper,注册的是一个函数或者方法做为服务,而socket本身是无法直接进行注册的,因此如果想注册的话就必须把socket封装为一个方法。
如果你自己写过RPC的话,很容易理解,这样是不可行的。因为在服务的注册过程也就是创建socket的过程,由此来实现RPC的R,几乎所有网络编程都Socket编程,RPC当然也不会例外。这就相当于你把一个socket放到另外一个socket里。RPC原本的用意就是封装通信实现细节,通过调用本地方法的形式来调用远程服务。因此,当你想将socket注册到Zookeeper的时候,是对RPC框架的不尊重。
如果想自己封装socket的话,不如重新封装了一个银保通的RPC,根本就不需要再使用类似Zookeeper这种注册中心。
如果要用Zookeeper或者Eureka,银保通就不需要socket了,直接提供业务接口API即可。

而银保通目前的架构,我觉得是可以改造成一个RPC框架的,socket.xml配置可以看做一个注册中心。当然,所有的业务要由service接口和类来实现,而不是由socket直接处理。现有架构耦合度还是很低的,对于改造RPC而言,有个很好的前提。

其实注册中心这个概念还是很宽的,比如spring,我理解的spring.xml就是所有bean的注册中心

退一步而言,就算银保通目前的架构无法改造为RPC,单单将目前socket阻塞监听的形式改造为NIO的形式,应对高并发的能力都会大大提升。

虽然银保通每个socket端口是绑定一个银行的,也就是server client是1对1的关系,单个银行不存在多客户端调用的情况。但是单单是这点就有几十个线程的固定消耗,因为socket是阻塞监听,这些线程也就贯彻了整个银保通生命周期的始终。再者,这些并不是银保通线程的全部,而只是其中的一小部分。因为,每个阻塞线程接收到inputStream的时候都会重新new一个线程出来进行业务处理,不说几十家银行同时出单,单单一家银行进行高并发测试,线程的开销都是巨大的。
而目前核心的处理效率我们管不着,规则引擎我们也管不着,因此,在银保通redis使用之后,想提升TPS,socket优化是必经之路。

接下来,我将另起文章,对目前银保通socket优化进行单独研究。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注