基于微服务架构的铁路货运基础字典统一运维应用系统的设计与实现

2020-03-28 06:16吴志伟钟立民黄永亮李国华
铁路计算机应用 2020年3期
关键词:字典货运架构

吴志伟,钟立民,黄永亮,李国华

(中国铁道科学研究院集团有限公司 电子计算技术研究所,北京 100081)

铁路货运信息化是铁路货物运输行业能力提升的重要方式,是提高货运效率的重要手段之一。铁路货运信息化主要内容之一是增强货运信息在货运各系统间的流转能力。王军提出对电子货运票据进行管理[1]。2018年铁路货运推进货运票据电子化工程,基于电子票据打通了货运系统间信息传输和流转,但信息冲突问题时有发生。王雪峰人等提出将微服务应用于高铁WiFi运营,提高信息系统可扩展性和可维护性[2]。本文将解决信息冲突的重点放在构建统一的货运基础字典,一点维护多点使用,为货运内外提供统一的字典接口,结合微服务的相关优点,构建伸缩性强,可维护性高且易于修改和发布的铁路货运基础字典统一运维应用系统。本文希望通过对该系统的设计与实现,可以达到提高货运数据质量的目的,并探索微服务在铁路货运的应用方式,为新系统构建和老旧系统改造提供参考。

1 系统分析与设计

1.1 系统主要需求描述

规范统一铁路货运信息系统基础字典,包括站名字典、局名字典、车务段字典、货物品名品类字典、专用线字典、集装箱箱型字典、客户关系字典和办理限制相关字典;统一引用外部系统车辆字典、线名字典,将内外部数据字典进行统一汇总,确保货运各信息系统引用字典的唯一性。明确各项基础字典数据来源与归口业务管理部门,明确与主数据平台的对应关系,国铁集团一点维护,多处使用,当字典变更后,以服务推送方式分发至各业务系统,实现准确实时的字典同步,避免多处维护带来的不一致性。同时设置字典使用有效期限,保留字典变更轨迹,便于后续追溯。

1.2 微服务架构

微服务架构是一种致力于精简和废除业务逻辑开发以外工作的新兴软件设计架构。微服务架构的核心在于微服务,即将庞大的软件产品细分成多个零散的小型应用,然后通过微服务架构来重新组织这些零散的小型应用,达到了解决软件产品高耦合问题的目的[3]。同时,微服务架构使细分后的应用工作简单有序,降低了开发难度,减少了系统研发人力成本和资源成本[4]。微服务架构的另外一个优势,通过扩展组件的形式可以处理功能上的瓶颈问题。

微服务架构支持对每一个划分后的小型应用单独编译、单独部署。开发系统时,可以通过编译、重新部署单个子服务来验证变更。由于铁路货运基础字典统一维护的现实要求,统一维护的基础字典以及相关统计分析都可能会出现新的需求,而未来随着接入系统的增加,性能也可能会出现瓶颈,所以系统设计开发时应充分考虑到系统功能的扩展和修改情况以及性能的扩充能力。所以,本系统采用微服务架构作为系统设计架构。

1.3 SpringBoot和Vue技术

SpringBoot是Spring项目组的微服务产品,是基于Spring4.0版本设计出来的,目的是为了简化Spring开发过程中的复杂配置操作,最终实现零配置[5]。一般Web开发中,使用SpringBoot基本框架,主要包括:Spring框架基础功能的Spring Core模块,控制逻辑和业务逻辑分离的Spring MVC模块[6],声明式事务和编程式事务支持的Spring DAO模块,Web框架提供集成功能的Spring Web模块,各种ORM框架接口的Spring ORM模块,事件处理、资源装载、数据校验、框架式的Bean的访问等功能的Spring Context模块, AOP功能的Spring AOP模块,创建独立的、可生产的、基于Spring且能直接运行的应用程序的Spring Boot模块,服务器端Java引擎接口的Thymeleaf模块等[7-8]。

SpringBoot是一些库的集合,只要包含相应依赖,就可以方便地被项目使用。SpringBoot可以轻松创建独立的、可生产的、基于Spring且可以直接运行的应用系统[9]。由于其可以实现微服务架构且没有复杂配置,所以在应用开发中,可以将更多精力投入到项目的业务逻辑研发中。

本系统在采用SpringBoot实现微服务架构的基础上,也采用了Spring的相关产品,包括SpringMVC、SpringTemplate、SpringAOP等。由于业务需求的变化,未来可能会追加字典到统计维护中,系统需求中有一部分需求进行修改维护的可能较高,包括基础字典同步、统计分析管理等,这部分功能完全按照微服务架构设计,将功能拆解为简单的微服务。而系统需求中还有一部分是按照传统Web应用方式可以实现且要求提供页面功能服务,包括提供基础字典维护、应急处置中部分功能等。针对这部分需求,设计系统时,采用SpringBoot微服务架构设计后台功能并提供数据接口,前台界面调用后台接口的方式实现。

Vue是用于构建用户界面的渐进式框架,通过整合第三方库,基于脚手架框架开发Web前段页面,提供强大的伸缩能力[10]。Vue支持各种类库的同时,还易于使用,还可以为复杂的单页应用提供驱动。

考虑到未来系统多平台应用的可能和Vue强大的伸缩能力,同时,还考虑到Vue技术与SpringBoot技术可以实现前后台分离,可以针对前台和后台单独进行开发、维护和部署,减少了开发维护的复杂度和人力成本,所以将Vue确定为功能界面的开发技术。

1.4 技术架构

系统整体上采用前后台分离的服务架构,后台由SpringBoot作为最主要框架,前台由Vue实现界面展示。前后台之间通过数据服务访问的方式调用功能。

设计系统时,考虑到技术可靠程度和技术学习的人工成本,所以采用Oracle关系数据库作为数据存储的方式。采用SpringBoot作为业务逻辑实现的基础框架,用于支持微服务的实现。采用SpringMVC实现服务的接收和提供,采用SpringTemplate实现与数据库交互,采用SpringAOP实现日志等功能。由于系统在提供数据服务的基础上,也需要提供功能服务,所以采用Vue、Webpack和Maven作为系统前台实现的主要技术。同时,考虑到服务的认证问题,所以采用Redis来进行前台数据存储。

1.5 功能设计

系统功能架构,如图1所示。

图1 系统功能架构

(1)基础字典查询,主要是提供基础字典查询的功能服务和数据服务;

(2)授权管理,主要提供系统功能服务和数据服务的授权访问控制功能;

(3)基础字典同步,主要是配置同步信息和根据配置信息与相关业务系统信息同步,推送方式包括主动推送字典信息和只通知字典修改2种方式;

(4)基础字典维护,主要用于维护基础字典和记录维护轨迹,维护基础字典的方式主要是设置定时任务;

(5)应急处置,用于定时维护任务出错时值班人员应急维护基础字典;

(6)统计分析管理,主要包括统计中间数据定时生成和统计数据加工展示;

(7)监控管理,主要对系统字典维护、同步系统连接、字典同步执行情况进行监控。

2 系统关键技术与实现

2.1 基于授权码模式的微服务访问权限管理设计

服务访问权限管理,主要是为了解决不同用户或系统访问的权限控制问题。由于系统主要功能就是提供基础字典服务,不仅需要较高的可靠性,也需要较高的安全性。所以,必须要设计完善的服务访问权限机制以保证系统的安全。

考虑到系统提供服务的方式主要包括数据服务和功能服务2种,所以针对2种访问方式采用不同的服务访问授权机制。如图2所示,由于功能服务主要由Vue来实现,所以针对功能服务,本系统采用Vue中成熟的角色控制机制和用户权限管理来对访问权限进行管理。针对数据服务,本系统主要采用授权码模式,在微服务架构中加入授权服务器,客户端引导用户代理到授权服务器,用户代理确认授权,则授权服务器返回授权码,客户端获取授权码后向授权服务器获取访问令牌,并通过访问令牌访问服务资源。

图2 服务访问权限管理示意图

2.2 字典同步方式设计

系统维护的字典主要是货运相关基础字典,系统还为货运相关系统提供基础字典访问服务。系统中涉及全路数据的基础字典从铁路主数据平台获取,其他更多数据是货运各系统中需要的基础数据和多个货运系统间共用的数据,在实际生产维护中发现,这些数据需要提取出来进行统一运维。随着货票电子化的实施,货运相关系统进行有效关联,所以需要获取字典信息的系统数量猛增。由此,考虑将字典同步方式设计为非侵入式设计,主要包括2种:(1)根据配置字典,将同步字典直接同步给相关系统;(2)通知相关系统基础字典已经修改,相关系统访问服务获取修改后字典。

设计了3个微服务来实现字典同步功能,包括修改通知服务,字典获取服务,字典推送服务。对于已经存在的系统,可以采用第1种方式,系统设计一个解析同步数据的接口,在获得字典数据后,通过接口将数据加工成系统内部格式,然后保存。对于新系统,可以在获得字典修改通知后,去访问字典服务,直接获得修改内容。

2.3 定时任务设计

系统中的定时任务在功能主要分为3种,对每一种定时任务设计如下。

2.3.1 用于维护基础字典的非周期性定时任务

一般基础字典的维护都有一定的提前时间,规定基础字典修改的生效时间。这时,就需要通过定时任务实现规定时间的基础字典信息生效。由于基础字典维护工作是本系统的一个主要工作,所以不能采用一般的维护方式。针对这种情况,通过配置和功能设计的方式实现维护信息保存和定时任务的自动执行。

2.3.2 用于基础字典同步的周期性定时任务

基础字典同步,涉及到与外部系统的通信和定时任务的执行。考虑到现实情况,基础字典同步一般可以发生在一天中的特定时间。所以,定时任务中变化的信息主要包括基础字典配置推送列表,维护内容发布列表,推送结果反馈。定时任务设计为定时任务对每一个外部系统启用一个线程实现同步工作。

2.3.3 用于统计分析处理和监控的周期性定时任务

基础字典的统计分析方式比较多,参考多年系统应用经验和相关业务要求,对统计数据设计中间表。执行周期性定时任务,将基础数据提前处理并保存,用以提高统计分析处理的效率。系统监控的定时任务频率较高且内容简单,但比较重要,所以采用多个线程交替执行的方式。

2.4 系统相关安全设计

本系统是货运基础性应用系统,系统安全涉及到安全生产,系统设计时着重考虑了系统的安全问题。系统设计中采用断路保护机制Hystrix断路器,防止因系统中某个服务不可用导致故障蔓延而造成其它系统故障。系统还采用HystrixDashboard实现系统监控,对服务的健康程度、请求变化率、节点个数、最近10 s错误率、每秒并发数和断路器状态,最近1 min的响应时间、熔断数和线程池拒绝数等信息进行统计监控。系统参考OAuth认证方式,采用授权码模式实现对服务访问控制。

2.5 系统效果

如图3所示,数据维护中的站名字典维护界面,对主要站名信息进行维护。

图3 系统站名维护界面

如图4所示,定时任务监控界面,通过设置时间条件,可以获得当日定时任务的完成情况。

图4 系统定时任务监控界面

如图5所示,应急处置界面,主要是用于值班人员在站名维护出现问题时直接对站名进行修改,站名修改涉及到的其它修改信息,则由应急处置服务直接根据其他信息获取。

图5 系统应急处置站名修改界面

目前,综合应用系统、货运价格系统、运输条件系统等已经采用由本系统统一提供的站名字典、办理限制字典等基础字典。以车站字典为例,此前,各个系统单独维护,部分系统甚至还没有友好的字典维护界面,所以,系统一次维护的平均时长为2 h,并且平均每15天就会有因字典冲突问题造成生产、票据、统计等数据不一致的情况发生。采用本系统后,只需对统一字典进行维护,一次维护的平均时长为0.5 h,车站字典维护工作量明显减少,字典维护困难的问题也得到了根本性解决,且未再有数据不一致的情况发生。

3 结束语

本文介绍了铁路货运基础字典统一运维应用系统的相关背景和建设系统的主要目标。在此基础上介绍了采用的微服务架构、SpringBoot和Vue等相关技术,以及根据这些技术设计的系统的技术架构。系统主要关注点包括系统的服务访问权限控制,字典同步方式,定时任务设计和其它相关安全设计。本系统已经得到应用,并取得了良好的应用效果。在未来一段时间,我们将会在系统的图形化展示方面和移动端访问方式等方面进行改进,结合时空地理信息,创建更加生动的展示方式。

铁路货运基础字典统一运维应用系统的建立,统一了货运基础字典数据,便于管理和维护,还减少了各系统的维护工作量。另外,系统对微服务架构进行一定的探索和实践,为其它系统构建和老旧系统的改造提供了参考,也为未来大数据平台的构建奠定了坚实的数据基础。

猜你喜欢
字典货运架构
基于FPGA的RNN硬件加速架构
功能架构在电子电气架构开发中的应用和实践
构建富有活力和效率的社会治理架构
字典的由来
波音公司试飞电动垂直起降货运无人机
大头熊的字典
AT200大型货运无人机实现首飞
正版字典
VoLTE时代智能网架构演进研究
货运之“云”