
引言
近年来,开源技术在金融业各领域得到广泛应用,在推动金融机构科技创新和数字化转型方面发挥着积极作用,同时也面临安全可控等诸多挑战。为规范金融机构合理应用开源技术,提高应用水平和自主可控能力,促进开源技术健康可持续发展,2021年10月,中国人民银行、中央网信办等五部门发布《关于规范金融业开源技术应用与发展的意见》,建立更加完善的开源技术使用规范,探索自主开源生态,重点在操作系统、数据库、中间件等基础软件领域和云计算、大数据、人工智能、区块链等新兴技术领域加快生态建设,利用开源模式加速推动信息技术创新发展。
中国光大银行作为金融央企主力军,积极响应国家相关政策,大力推进金融科技关键技术自主可控工作,在国家关注的重点基础软件领域积极创新,自主研发了具有自主知识产权的交易中间件EverTP,并应用到了行内关键系统中,提升了中国光大银行在交易中间件领域的自主可控能力,为中国光大银行重要系统自主可控贡献了力量。
自研交易中间件EverTP用于构建应用联机交易处理平台,其实现了交易中间件的常用功能,基于服务名调用、可动态管理、TCP异步长连接方式的网络通讯模式,域(节点)间负载均衡、便捷的应用开发接口及与Tuxedo的常见API参数一致,使得应用改造量极少,并具有安装简单,易维护,部署内容少等轻量级特征。
本文将对EverTP的架构及工作原理进行分析及介绍。

架构简介
EverTP 软件架构分为3层: 接入接出、核心管理、数据处理。
接入接出:即通讯网关,支持对内,对外的数据传输。
核心管理:完成EverTP的核心功能,包括IPC资源的管理,服务及队列的管理、发布及路由等工作。
数据处理:完成数据的逻辑处理,以多进程方式存在,按名称方式调用。
如下图:

图1 EverTP软件架构
EverTP从功能架构上按照从下到上总共分为5层:
系统层:由操作系统层面提供的基本IPC资源构成,主要由共享内存、信号量、消息队列等组成。
基础层:基于系统层IPC封装,提供中间件内部使用的基础接口,包括公告板、数据缓冲区、内部进程管理队列,通讯队列,应用服务队列等。
核心功能:提供服务管理、通讯传输、分布式支持,内部进程管理等,完成中间件的服务分组、服务路由、服务发布、服务寻址、及节点注册、中间件的管理进程等。
接口层:提供用户进行编程的标准化API接口,编译工具等,包括同步通讯、异步通讯、服务转发、编译工具等,辅助用户快速完成服务构建等内容。
应用层:基于接口层构建的可用于执行的应用服务,客户端程序等,用户基于应用层完成业务处理,可用于数据库交互,业务逻辑处理、节点数据交互等任务。

图2 EverTP功能架构

运行原理
EverTP通讯分为c/s 模式通讯(客户端与服务端)及s/s(服务之间)通讯两种,并支持本节点转发或跨节点方式进行服务调用,如下图:

图3 EverTP通讯方式
客户端
客户端通常使用tpinit初始化注册连接到本地EverTP
使用 API 同步调用(tpcall)或tpacall/tpgeteply(异步调用)本地或远程服务,默认如果本地存在服务,优先调用本地服务,如果本地服务不存在,会通过本地调用远程服务,服务通过多个域(节点)互相EXPORT/IMPORT(导出或导入)完成调用。
客户端完成调用后,使用tpterm(结束调用并注销),完成一次通讯。
客户端调用远程服务,如果服务存在多个节点,则按负载均衡方式,平均分发到多个节点中。
服务端
服务端为EverTP的常驻服务,默认在启动时候注册到EverTp服务进程中,以服务方式存在,完成业务逻辑处理。
同一个系统不同分层或不同系统之间服务调用以导出/导入方式(EXPORT/IMPORT)进行,服务的导出及导入可以再配置时配置或在运行是进行动态方式执行。
在EverTP启动后,服务会注册到本地公告板中
管理进程检查公告板,如发现服务需要EXPORT,则将服务按内部进行打包,并通过网关进程发送到已连接的EverTP节点中
同时EverTP会检查本地IMPORT,根据远程域(节点)发送的导出与本地IMPORT进行对比,如果一致则导入本地服务,并登记远程节点系统ID及SITEID,等待调用。
EverTP服务收到交易请求,并进行业务逻辑处理,如发现内部有同步或已被调用其他服务,重新进行完整的调用过程,通讯完成后,使用tpreturn(返回)给调用节点,返回方式按原路返回,即处理过程经过几个节点,则重新按原路几个节点逆向返回,返回过程中,不需要再经过服务处理,提高通讯效率。
服务间调用不需要按客户端模式进行tpint及tpterm操作,直接进行调用,因为服务以及注册到EverTP中了。
EverTP服务支持节点转发(tpforward),包括本节点服务转发或跨节点转发,即如果服务调用了tpforward,会查找服务是本节点还是远程节点,如果是本节点,直接发给本节点服务,如果是远程节点则通过网关发送给远程EverTP进行处理。
服务间调用也遵循EverTP负载均衡,远程域(节点)存在多个同名服务,则按照EverTP服务的配置及默认的负载均衡算法及节点负载因子进行合理分发,使节点间负载达到均衡。

总结
以上内容对EverTP的基本架构,包括软件架构及功能架构,并对EverTP的运行原理进行了基本介绍。
基于EverTP中间件构建的应用系统开发接口与Tuxedo基本保持一致,可以支持Tuxedo中间件的无缝移植,同样支持负载均衡,动态调整服务等功能,性能可靠,运行稳定。

作者 | 李 彬
视觉 | 王朋玉
统筹 | 郑 洁







