基于Spring Cloud的机场态势系统微服务改造

2020-08-31 05:41糜小兵孟献轲
机电信息 2020年18期

糜小兵 孟献轲

摘要:机场态势系统伴随其呈现的数据主题越来越丰富而日趋复杂,这就对系统的可扩展性、敏捷性、容错性等方面的能力提出了更高的要求,而传统单体架构已经难以满足上述要求。鉴于此,提出了基于Spring Cloud的微服务架构设计方案,通过此方案改造后的机场态势系统更易于敏捷开发、迅速迭代上线,更易实现对计算资源的弹性扩展,更易于功能扩展与集成而不受技术栈的限制。

关键词:Spring Cloud;微服务改造;单体架构;微服务架构

0    引言

随着机场态势系统成为机场指挥控制的枢纽中心,其呈现的主题数据越来越丰富,系统日趋复杂,原单体架构下的项目开发、测试、部署模式难以支撑其对系统的可扩展性、敏捷性以及容错性等方面的能力要求。为满足上述能力要求,对现有单体应用架构进行调整势在必行。本文提出了基于Spring Cloud框架实现机场态势系统的微服务改造,改造后的机场态势系统更易于敏捷开发,更易实现对计算资源的弹性扩展,更易于功能扩展与集成而不受技术栈的限制。

1    关键技术介绍

1.1    微服务

微服务架构是采用服务集合的方式来构建应用的架构模式,各服务部署在不同的进程中,服务间的通信通过RPC、HTTP、REST等轻量级交互机制来进行,服务可独立扩展伸缩,由于服务明确定义了自身的边界,因此不同服务可以由不同团队采用不同的编程语言来实现与维护[1]。微服务架构由面向服务的架构SOA发展而来,其核心理论基础来自于康威定律[2],于2014年3月由Martin Fowler在他的文章《Microservices》中首次提出。以网络为中心面向服务化的微服务架构与传统的单体应用架构相比,其优势主要体现为以下几点:一是微服务架构以“职责单一”为指导,将业务系统模块组件化、服务化,服务化的模块功能单一明确,边界清晰,复杂度低,从而利于敏捷开发与快速部署;二是微服务架构提升了容错性,服务运行隔离,一个服务出了问题,不会影响其他微服务;三是微服务架构允许技术团队根据团队成员技术栈与功能需求选择不同的技术路线。

虽然微服务架构是一种先进的架构模式,但同时也带来以下挑战:一是运维要求高,运维工程师除了需要使用自动化技术部署微服务,还需要对整个微服务系统进行有效的监控,并保障系统的高可靠性;二是微服务架构的分布式复杂性,微服务架构的每个服务可以部署在任意机器上,这样部署的形态容易导致网络延迟、系统容错、分布式事务等问题,都会给微服务架构带来很大的挑战;三是服务间通信成本较高,每个服务在独立的进程中运行,从客户端访问微服务需要跨进程来进行调用,显然进程间的调用对其计算资源占用一定比进程内的调用更高,通信成本的开销不可避免更高[3]。

1.2    Spring Cloud

Spring Cloud是一个基于Spring Boot实现的微服务架构开发工具,它为微服务架构中涉及的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式[4]。

Spring Cloud在集成封装Netflix多个框架的基础上进行扩展,因此除了Spring Cloud Netflix模块外,Spring Cloud其他几个重要的模块如下:Spring Cloud Config模块主要为分布式系统提供服务器和客户端运行配置,通过灵活配置可以高效地管理集群中庞大的配置文件;Spring Cloud Sleuth模式是服务跟踪框架,与Zipkin、Apache HTrace和ELK等这些数据分析、服务跟踪系统整合后可以高效地解决服务跟踪问题;Spring Cloud Stream模块主要是用于构建消息驱动的框架,在Spring Boot的基础上通过整合Spring Integration来提供连接消息代理中间件的能力;Spring Cloud Bus通过连接RabbitMQ、Kafka等消息代理的集群消息总线提供联通服务[5]。

2    机场态势系统微服务改造设计与实现

2.1    改造策略

对于比较复杂的大型业务信息系统的改造,如果采取直接推翻旧系统、重新构建微服务架构的方案,显然成本高且风险大。因此,应当采取渐进式重构旧系统的改造策略,主要包括以下两点:

策略一:微服务提取。对旧系统内功能模块边界相对独立的,提取改造为独立的微服务,不断将模块转化为微服务组件,旧系统就会不断收缩,一旦足够多的模块转化成服务组件,则旧系统或者彻底消失,或者缩小成为另一个微服务。

策略二:增量业务直接微服务化。对于旧系统新增业务功能不再延续单体架构技术而是直接开发成为独立的微服务[6]。

2.2    微服务简单模式设计与改造

基于上述改造策略,对机场态势系统需要改造或新增业务进行微服务架构设计,相对于传统的单体架构,微服务架构一下子引入了太多的概念,而Spring Cloud的组件模块多得让开发者有点无可适从。基于上述情况,需要根据项目实际梳理清楚哪些组件是开发一个微服务架构系统所必需的。通常微服务模式运行主要包括以下几个关键点:一是微服务提供方将地址信息注册到注册中心,调用方将服务地址从注册中心拉取下来;二是通过门户后端(服务网关)将微服务API暴露给门户和移动App;三是为防止服务故障引发级联故障导致雪崩效应,需要容错机制。

通过上述关键点可知微服务架构必须具备注册中心、服务发现、负载均衡、服务网关、服务容错这五大组件。常见的服务注册中心有Zookeeper、Eureka、Consul、Etcd等[7],结合项目选择Eureka。对于客户端服务发现和负载均衡则有很多负载均衡算法,最简单的负载均衡算法来自著名的Round Robin算法,即轮询法[7],其思想是将多个可用服务实例组织成一个循环队列,然后根据实例顺序轮流分派服务请求;另外还有加权轮询法[8]、最小连接数法[9]等,结合Spring Cloud选择Ribbon。对于服务网关选择Spring Cloud Zuul,Zuul是Netflix基于Java开发的服务端API网关和负载均衡器。除此之外,Zuul还可以对过滤器进行动态的加载、编译、运行。服务容錯选择Hystrix,这是Netflix开源的一个工具类库,可以为网络请求设置超时,使用断路器模式,用于隔离访问远程系统、服务或第三方库,防止级联失败,从而提升系统的可用性和容错性。

整个基于Spring Cloud的微服务架构如图1所示。

在改造策略和微服务架构模式确定后,对原有机场态势系统进行功能分析,对于业务相当独立地进行微服务改造,通过对服务模块最大限度地拆分,体现了微服务化的设计理念,大幅提高了系统部署灵活性、可扩展性和可维护性,保证了系统的健壮性[10-12]。

3    结语

本文研究了机场态势系统由传统的单体应用架构借助Spring Cloud进行微服务改造,大型复杂业务信息系统的服务化改造不是一蹴而就的,因此重点研究了复杂业务信息系统的微服务改造策略以及微服务的快速简单实现方案,将机场态势系统的功能进行抽取形成耦合度低、独立部署的服务组件,这样伴随机场态势系统的发展,不仅能够快速响应,而且其支持高并发、高可用、可扩展的特性,也为业务发展提供了坚实基础。

[参考文献]

[1] 黄小锋,张晶.微服务框架介绍与实现[J].电脑与信息技术,2016,24(6):14-16.

[2] FOWLER M,LEWIS J.Microservices:a definition of this new architectural term[EB/OL].[2020-05-03]. https://www.martinfowler.com/articles/microservices.html.

[3] 黄勇.架构探险:轻量级微服务架构[M].北京:电子工业出版社,2016.

[4] 翟永超.Spring Cloud微服务实战[M].北京:电子工业出版社,2017.

[5] 杨恩雄.疯狂Spring Cloud微服务架构实战[M].北京:电子工业出版社,2018.

[6] RICHARDSON C.微服务架构设计模式[M].喻勇,译.北京:机械工业出版社,2019.

[7] UPADHYAY A,HASIJA H.Optimization in round robin process scheduling algorithm[C]// Proceedings of Third International Conference,2016:457-467.

[8] LI T,BAUMBERGER D,HAHN S W.Efficient and scalable multiprocessor fair scheduling using distributed weighted round-robin[J].ACM Sigplan Notices,2009,44(4):65-74.

[9] CHOI D J,CHUNG K S,SHON J G.An improvement on the weighted least -connection scheduling algorithm for load balancing in Web cluster systems[M]//Grid and Distributed Computing,Control and Automation. Berlin,Heidelberg:Springer,2010:127-134.

[10] 王方旭.基于Spring Cloud实现业务系统微服务化的设计与实现[J].电子技术与软件工程,2018(8):60-61.

[11] 黄沛.基于RESTful架构的科技信息共享接口系统的设计[J].软件,2018,39(7):170-172.

[12] 王二伟,姚文斌.一种基于REST的物联网资源模型和分布策略[J].软件,2015,36(12):128-131.

收稿日期:2020-05-06

作者简介:糜小兵(1981—),男,四川渠县人,硕士研究生,工程师,研究方向:作戰指挥控制。

孟献轲(1980—),男,江苏丹阳人,高级工程师,研究方向:作战指挥控制。