作者:中邮理财有限责任公司 徐福昌 张子阳 董锐 焦文华 徐林枫

在数字化转型持续深入的大背景下,笔者结合当前业务发展需求,通过将开源软件与事件驱动机制相结合,创新性地设计构建了文件交换组件,以更好推动业务高质量转型发展。本文结合开源软件应用实践,梳理总结了新一代数据交换平台的研究路径与实践经验,希望能助力金融同业更好地进行开源探索与实践。

当前,科技创新对经济社会发展的支撑和引领作用日益增强,尤其在重点领域和关键环节,国家更是已提出了自主创新要求。对此,金融机构在深入研究开源技术支持业务创新和差异化竞争的价值优势后,纷纷开启了基于开源软件的自主创新之路。在此过程中,伴随分布式、云原生、大数据、人工智能等前沿技术的快速发展和广泛应用,以Apache基金会、GitHub为代表的各个组织和社区逐步开源了众多支持各种前沿技术的开源软件。这些开源社区促使全球信息技术发生了全局性、持续性的重大变化,并在社会基础设施建设等方面发挥着越来越重要的作用。顺应上述趋势,笔者在深入研究开源软件特点的基础上,将其与事件驱动机制相结合,自主研发了新一代数据交换平台,为实现业务创新与高质量转型提供了可靠支撑。

一、针对开源技术特点的前瞻性研究

现阶段,大量金融机构选择借助开源软件来自主研发适配自身商业模式的信息系统。结合笔者从业经验,开源软件最显著的特点即开放性,这一特性使任何人都可以得到开源软件的源代码,并在此基础上进行学习和修改,甚至在版权限制范围内重新发放。同时,每一个开源软件或组件均代表了某一特定领域的研究成果,使用者既可以在仅知道表层结构而不理解其深层原理的情况下,通过轻量级的API等直接使用开源软件所提供的能力;也可以通过深入研究开源软件的深层原理,成为该软件在设计、开发、运维、问题排查等领域的专家。

以RabbitMQ为例,作为一种支持AMQP、STOMP、MQTT、HTTP、WebSocket等协议的消息队列,该组件通过发送消息可支持异步处理,并能够实现对并发交易的“削峰填谷”。使用者只需根据网上提供的部署方式进行简单配置,即可轻易搭建起一套RabbitMQ集群,之后再使用RabbitMQ的客户端开源组件包对其进行调用,享受RabbitMQ带来的所有便利。

实际上,如果希望真正用好RabbitMQ,还需要深入理解RabbitMQ的底层原理,理解RabbitMQ提供的Ack机制是什么,以及其消息存储机制、惰性队列、镜像队列、Quorum队列、磁盘和内存告警、流控机制等涉及的内容。再深入一些,则是要理解其使用的Quorum机制是如何达成共识的,RabbitMQ的Quorum机制使用的Raft算法和其他一致性算法如Paxos、Zab的区别等。简而言之,基于开源软件的开放性,使用者可通过代码逐步深入了解其原理和机制,从一般性的使用RabbitMQ,到能够将它应用于各种复杂的业务场景,最终到用其来解决可能产生的各种问题。

二、数据交换平台设计思路与创新点

旧有模式下,各系统之间文件交换的通信方式主要采用了SFTP/FTP协议,即每个接收方系统都需要搭建SFTP服务。例如,A系统要给B系统发送文件,则需要连接B系统的SFTP服务器后再执行文件传输。然而,通过SFTP/FTP通信的方式具有以下缺点:一是无法实现高可用和负载均衡。二是如果要在多个系统间互传文件,每个系统需要单独对自己的SFTP/FTP服务器进行维护,以及单独定期进行文件备份和文件清理。三是当SFTP/FTP服务不可用或服务器宕机时,将出现文件丢失、文件传输失败等情况。

当前,业界常用的文件交换方法是发送方和接收方提前约定好传输文件存放的位置目录和文件命名规范,发送方只传输文件,接收方定时扫描目录获取文件并进行处理。在此基础上,发送方还可对接收方的处理信息进行监听,接收方在收到文件和处理完成后,再根据实际需求给发送方反馈处理结果(同理,也可以是发送方请求文件,接收方只传输文件,发送方定时扫描目录获取文件并进行处理)。

但另一方面,该方法同样存在以下缺点:一是发送方无法获知接收方是否接收到文件,以及文件处理是否成功。二是对于包含监听的模式,交换文件的双方应用需独立开发监听器和进行确认反馈,并提前考虑底层处理过程中的各种复杂问题,如网络中断、事务一致性、幂等性等,增加了应用开发的复杂程度。三是如果发送方和接收方未提前约定好传输文件存放的位置目录和文件命名规范,此时则需要应用独立进行文件传输,并单独发送交易去通知接收方获取文件或进行确认反馈。

为改善上述情况,笔者基于此前的研究与积累,创新引入多种开源组件和事件驱动机制,独立开发SDK程序,完成文件传输和事件消息的统一封装以及监听程序的封装,实现了事件路由方式、消息路由和统一的企业级报文规范,并设计建设数据交换平台,实现了内部多个应用系统之间的文件交换。

1.传输方案设计

融合上述传输逻辑,笔者在数据交换平台中搭载了多种数据交换方式,包括异步消息带附件回复交互模式(请求带附件、响应带附件、请求响应带附件)、消息交互模式、消息带附件不回复交互模式(请求带附件、响应带附件、请求响应带附件)、联机交易带附件交互模式(请求带附件、响应带附件、请求响应带附件)等。消息带附件传输模式如图1~图5所示。在上述模式下,首先由发送方调用数据交换平台提供的封装接口,发送文件到统一的分布式对象存储服务,并通过事件驱动的方式将事件消息通过消息队列发送给接收方,然后发送方可以不用等待接收方返回结果,直接去处理其他任务。此后,接收方将收到事件通知,根据事件中提供的信息去统一的分布式对象存储服务获取文件,并结合实际情况进行文件处理操作,或先将要处理的文件信息进行保存以待后续处理。然后,根据实际处理情况,由接收方给发送方反馈处理成功或接收成功的确认结果。值得注意的是,如果发送方不需要获取确认信息,也可以设置不进行返回确认。

图1 异步消息带附件回复交互模式—请求带附件

图2 异步消息带附件回复交互模式—响应带附件

图3 消息交互模式

图4 联机交易带附件交互模式—请求带附件

图5 联机交易带附件交互模式—响应带附件

2.技术创新点

一是引入事件驱动机制。数据交换平台基于事件驱动机制——EDA架构,实现了事件和文件处理解耦。从技术角度来看,EDA架构主要具有如下优势:首先,EDA架构是高度松耦合且高度分布式的架构模型,事件的创建者(来源)只知道发生的事件,并不知道事件的处理方式,也无需关心有多少相关方订阅了该事件;其次,EDA架构是异步场景下最适合的执行工具,可以将所需事件保留在队列中,直到状态正常后执行;再次,EDA架构可以通过路由和过滤能力快速划分服务,并提供更为便捷的扩展与路由分发;最后,EDA架构可以将事件分发至任何地方,因此其支持更为敏捷、高效的部署方案。

此外,数据交换平台通过事件驱动机制和事件路由的异步数据和文件交换方法,实现了数据交换时的事件发起、事件响应和事件路由。发送方可以选择通过单播、多播、广播等多种方式,将事件发送给一个接收方、多个接收方或者所有接收方,并监听一个接收方、多个接收方或者所有接收方返回的处理结果。接收方在接收到异步事件,处理完文件接收和解析工作后,可通过异步回馈机制,通知发送方文件是否接收到或者处理完等。如此,通过灵活搭配各种组合,数据交换平台可以迅速完成各种个性化的数据交换需求,同时结合EDA架构,极大地提高了文件交互效率。

二是使用多项开源技术。数据交换平台使用了RabbitMQ、MinIO和Springboot等多项开源技术。例如,数据交换平台采用RabbitMQ消息队列作为事件驱动机制的事件总线——EventBus,实现了文件交换时的事件发起、响应和事件路由。数据交换平台采用MinIO集群作为集中管理的文件存储,将原本的点对点文件交换和松散的存储管理方式整合到统一的文件中心,实现了统一的文件传输和文件集中存储管理,解决了SFTP的单点故障问题。数据交换平台采用Springboot开发框架开发组件包,支持对发送方和接收方进行消息带附件等模式的API封装,支持通过交易码来进行交易路由,使应用可自行对不同文件采用不同的解析处理逻辑(每个/每组文件对应一支交易),从而大幅提高开发和文件管理效率,切实保障了文件存储的可靠性和可用性。

三是实现事件路由功能。基于数据交换平台,发送方可以选择通过单播、多播、广播等多种方式,将事件发送给一个接收方、多个接收方或者所有接收方,并监听一个接收方、多个接收方或者所有接收方返回的处理结果。采用事件路由方式,数据交换平台可通过灵活搭配各种组合,迅速完成各种个性化的文件交换需求,从而解决了传统SFTP只能进行点对点传输的缺陷。

四是支持交易路由功能。由于传输文件的格式和内容各不相同,因此接收方需要针对不同文件选择不同的处理和反馈方式。对此,数据交换平台在底层设计中实现了交易路由功能,通过为每一份文件建立交易,应用通过编写指定交易的代码即可对此类文件进行处理操作。在此模式下,通过将文件和交易进行路由映射,数据交换平台实现了文件、事件、交易之间的一一对应,支持对同一类文件进行统一处理。

五是采用统一的企业级架构报文规范和统一的通信协议、报文格式。数据交换平台采用统一的企业级架构报文规范进行交互,对发送方和接收方的请求报文和返回报文均指定了统一的格式,包含统一的报文头、文件域、领域建模信息以及多法人多时区信息等。其中,统一的报文头可通过数据交换平台SDK进行统一处理,应用只需要关心每一支交易的个性化字段数据即可。统一的文件域提供了多种方式,包括非压缩方式的文件列表信息,或者压缩文件信息、压缩包中的文件列表信息等,从而使接收方可以提前根据统一的规范获取指定的文件信息和文件路径,并以统一的方式去获取和处理文件。

数据交换平台交换文件的基本信息主要通过确定标准的通讯协议和报文格式实现。其中,联机交易主要通过“http协议+Json格式报文”实现,异步事件交易主要通过“AMQP协议+Json格式报文”实现。基于统一的通信协议、报文格式和报文规范,数据交换平台使各个应用系统之间的交换文件遵循统一的标准和规范,从而可通过领域建模实现企业级统一的数据字典,有效减少接口和报文的沟通成本和复杂度、报文转换的成本和复杂度、系统之间交互的成本和复杂度,并有助于后续业务流程的统一建模和再造,如为人工智能等新技术提供统一口径、规范、标准的基础大数据信息和标准化的业务建模流程。

六是构建统一的文件中心。数据交换平台采用MinIO集群作为集中管理的文件存储,将原本的点对点文件交换和松散的存储管理方式整合到统一的文件中心,实现了统一的文件传输、存储管理、集群化文件存储和管理,并提供了权限管理和隔离机制。其中,通过统一传输,数据交换平台解决了各个应用自行开发传输API的问题;通过统一的存储管理,解决了SFTP服务器过于分散,每个系统都需要单独进行存储资源管理、文件管理、备份和清理的问题;通过统一的集群化文件存储和管理,解决了SFTP服务器单点故障的问题,实现了高可用和负载均衡。此外,通过提供权限管理和隔离机制,数据交换平台实现对文件读、写、查看等功能的集中管理,且比SFTP更易于安全保护。

七是支持权限管理和隔离机制。数据交换平台通过MinIO实现了文件统一存储,同时使用了对象存储的桶机制,即数据交换平台为每个写入文件的系统分配一个桶,而每个桶均拥有各自独立的文件目录结构,用来存储上传的文件,其他系统只允许对这个桶进行读取,从而通过这种桶机制实现了文件隔离和权限控制管理。

八是实现整体技术封装。数据交换平台基于交易路由框架、统一监听框架等基础技术的整体设计开发,支持对发送方和接收方进行异步事件带附件等模式的API和其他部分API的整体技术封装。数据交换平台通过对交易路由、监听进行统一封装,使应用系统仅需简单配置即可自动启动监听程序,从而实现了对统一报文规范的统一处理,实现了对各种个性化处理的简单配置(如是否需要反馈确认结果等),实现了异步处理的底层化等。

在此模式下,用户在使用数据交换平台开发时,和开发联机同步交易的方式相同,仅需要开发处理对应文件的交易即可,不需要考虑如何处理异步机制。此外,数据交换平台还支持通过交易码来进行交易路由,使应用可自行对不同文件采用不同的解析处理逻辑(每个/每组文件对应一笔交易),进而大幅提高开发效率和文件管理效率,切实保障文件存储的可靠性和可用性。

三、总结与展望

结合数据交换平台的建设过程,笔者团队在使用开源技术解决专业问题的同时,结合经验积累完成了总结报告《RabbitMQ各种异常情况处理和本系统采用方案》,并进一步归纳梳理了如下经验供同业参考:一是使用者应充分理解开源软件的基本原理,能够从功能、性能上评估其是否满足业务需求,并可以根据不同的业务场景,使用不同的开源软件组合来完成应用架构设计;二是考虑到开源软件的开放性往往使其比一般的商业软件和自主开发应用更容易成为安全攻击的目标,因此使用者需时刻保持安全风险意识,严格遵循《关于规范金融业开源技术应用与发展的意见》的相关要求,在安全可控的范围内使用开源软件。

展望未来,鉴于开源软件的专业性以及在特定领域优异的能力表现,开源技术或将被越来越多地应用于金融科技创新及应用研发领域。顺应这一趋势,笔者建议金融机构可进一步加大对开源技术底层基础能力的研究和投入,并同步培养相关人才,为实现基础技术自主可控以及共建开源社区做好充分准备。

本文刊于《中国金融电脑》2023年第10期

声明:本文来自中国金融电脑+,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。