北京首都国际机场股份有限公司 潘振杰
以民航业务为导向的中间件构架分析
北京首都国际机场股份有限公司 潘振杰
民航业务本身的业务功能异常复杂,实时并发请求多,数据传输量大,而且从保障航空器安全的角度,要求数据具备较高的可靠性。本文以民航业务为导向,在其服务信息系统中引入了分阶段事件驱动架构(SEDA),对其中间件架构的设计实现进行了分析,希望能够进一步提升系统的处理能力。
民航业务;服务器;中间件;构架设计
最近几年,我国的民用航空事业得到了飞速发展,民航业务的发展受到了信息化水平的影响。在传统的处理模式中,主要是对服务进同步调用,在发出相关请求后,需要一直等待结果从服务端返回,这样的逻辑虽然更加直观而且便于实现,但是在面对请求数量庞大的民航业务时,往往容易引发网络阻塞问题,影响信息的可靠传输。针对这个问题,应该在分布式计算环境下,做好交易中间件系统的设计,为服务调用提供相应的平台。
SEDA的全称是staged event-driven architecture,属于一种事件驱动的服务器软件架构,或者说高性能的应用服务器模型,其本身融合了事件驱动模型以及线程池模型的优点,能够在实现并行处理的同时,规避线程切换导致的高成本,也可以依照业务逻辑,对服务进行阶段划分,然后结合事件队列,将服务阶段整合进业务处理流程中,在异步调用方面有着先天性的优势,而且架构可以根据业务逻辑的要求灵活变化,通用性较强。
SEDA模型会将处理过程分解成为若干个阶段,每一个阶段都包含有事件处理器、线程池、资源控制器以及事件队列,这些阶段可以依照事件队列连接在一起。在接收到请求后,模型会将请求放入到第一个阶段的事件队列中,进行相应的处理,然后根据实际情况,将处理好的请求传输到下一个阶段,继续处理。在服务器中,单一的网络求情一般以有穷状态机的形式表示,换言之,服务器软件的实现过程就是利用相关程序,构建有穷状态机的过程。SEDA可以通过对有穷状态机的分析,进行状态网划分,使得相关程度较高的状态能够处于相同的阶段,然后结合事件队列进行连接,形成完整的并发处理网络。在每一个阶段中,时间处理器可以依照负载量的大小,针对资源进行调整,从而实现资源的优化配置[1]。
2.1 总体架构
交易中间件系统(JCF)是民航旅客服务信息系统的一个重要组成部分,从民航业务本身的特点考虑,必须支持软件的复用以及高并发、高负载的数据传输需求,具备良好的适用性和灵活性。JCF系统的运行环境是分布式系统,需要面对的操作平台和硬件系统等存在着较大的差别,因此,为了保证交易处理的有效实现,JCF系统允许用户利用相关技术,对业务服务进行自主创建和部署。系统本身必须提供有效的方案,实现与现有企业服务总线的可靠对接,对异步调用、故障隔离以及负载均衡等问题进行解决。例如,TSI系统可以提供多样化的接入点,实现信息的高效传输。通过接入点,JCF系统能够完成与TSI的交互,而这个接入点为一组或者多组MQ队列(分上行下行),JCF系统向TSI发送的信息存储在上行队列,TSI向JCF系统发送的信息则存储在下行队列,通过TSI适配服务,对两者之间的信息通信问题进行解决。JCF与TSI的交互如图1所示。
JCF系统本身包含了开发工具、管理工具以及运行系统三个部分的内容,可以为民航业务服务的开发、运行、部署等提供可靠支持。其中,运行系统可以细分为两个层次,一是服务层,用户可以利用Java语言,进行业务逻辑的自主创建,然后结合系统提供的流程配置工具,对核心逻辑进行编排,形成能够独立运行的业务服务。SEDA为系统架构,将每一个服务判断为一个阶段,包含有相应的资源控制器,可以实现对于系统资源的优化配置[2];二是调用层,属于分布式服务调用平台,可以支持不同服务之间的相互调用,如负载均衡、异步调用、故障隔离等。在JCF系统中,以MES模式实现异步调用功能,通过服务注册和发现机制,还可以实现异步调用的自动转换,简化了用户的操作行为,在使用方面更加便捷。
图1 JCF系统与TSI的交互
2.2 SEDA架构
对应JCF运行系统的两个层次,SEDA架构同样需要进行分层,一是用户层,主要是对用户的业务流程进行划分,形成数个阶段,以事件队列连接,逐阶段对业务需求进处理,阶段之间的传递过程由系统自主完成,用户只需要进行业务逻辑的编写以及阶段关系的安排,然后将其部署到JCF系统中,就可以实现自动运行。二是系统层,可以依照系统的功能模块,进行阶段划分,因此相比较用户层更加固定,能够为相关程序的运行提供各种基础服务[3]。出现请求后,其会自动进入到请求队列,服务平台完成对请求的接收,然后将其作为事件,传递给入口处理阶段,结合相应的业务处理回调过程,进行事件的处理,之后将其传递给流程运行实例,如果遭遇其他服务的异步调用,则会将其事件传递给服务调用阶段,进行SEDA异步调用处理。通过不同阶段的分工协作,实现对SEDA模式的可靠支撑,在保证逻辑层次清晰的同时,也能够促进系统运行效率的提高。
2.3 服务运行流程
假设在JCF系统中,存在一个正在运行的服务,其运行流程如下:
(1)API服务平台从请求队列中,接收相关服务的调用请求信息,并且由信息出发服务入口阶段的业务回调过程,由该过程将请求传递到流程实例处理环节,依照预先设定好的配置,开展流程处理工作。
(2)若业务流程配备有对于JCF服务的异步调用,则运行到相关阶段时,会直接触发异步模式的服务调用功能。
(3)服务调用能够结合异步调用功能,对交易ID进行分配,依照该交易ID,对当前执行的流程进行运行状态压栈,并向服务平台发起异步调用请求,请求进入到JCFServer发送队列。
(4)服务平台在接收到JCFServer发送队列的异步应答后,自动触发异步回调。
(5)依照交易ID,对压栈前的流程运行状态进行分析,从缓冲区清除,流程运行实例结合相应的运行状态恢复现场,做好后异步回调过程的后续处理。
在API中,还设置有相应的定时功能,例如,如果某一个交易在固定时间内没有获得应答信息,API会从缓冲区中删除该交易ID的流程运行状态,同时提示超时错误,若异步相应消息没有进行运行状态的记录,则该交易会被抛弃,需要重新发送请求[4]。
面对复杂的民航业务,本文针对交易中间件系统进行了设计,提出了基于SEDA模型的服务器架构,利用两层SEDA结构,能够支撑用户层面的服务分阶段特性,对系统开发环节存在着的线程同步阻塞问题进行了有效解决,真正实现了平台服务的异步化。同时,服务器架构本身的分阶段特性可以从容应对高并发高负载环境下的民航业务处理问题,不仅处理的效率有了很大的提升,也能够实现软件的复用,满足了系统对于开放性和灵活性的需求。
[1]丁建立,倪兆阳,田丰,王静.面向复杂民航业务的中间件架构设计与实现[J].计算机工程与设计,2016,37(5):1367-1374.
[2]李永进,倪兆阳,田丰.面向高并发复杂民航业务的服务器架构设计[J].计算机应用与软件,2016,33(5):4-7.
[3]李文慧.基于MapReduce的无线传感网络中间件架构技术研究[D].上海海洋大学.
[4]周超,李冬,张宝贤,冯玉珉.一种面向无线传感网节点的中间件架构设计与实现[J].铁道学报,2014,(8):63-69.