多维电子渠道建设中微服务架构的应用与实践

2018-09-26 11:34周春戴波邢占伟彭磊高磊
数字技术与应用 2018年5期

周春 戴波 邢占伟 彭磊 高磊

摘要:國网信息化建设在移动互联网发展浪潮推动下以及在贯彻执行互联网+行动计划中得到了快速的发展。与此同时在多维营销电子服务渠道信息化建设中存在着各渠道业务重叠、各渠道业务融合不够、各渠道数据不能共享等问题以及面临传统单体架构模式下各渠道业务需求复杂系统业务难以扩展等难题。经过对目前行业内微服务架构发展调研表明基于微服务架构模式的系统能够很好解决信息化建设中遇到的难题。最终多维电子渠道系统建设采用Docker容器技术作为支撑的微服务架构技术解决方案,极大地提高了系统扩展能力以及运维效率,为国网信息化建设提供了有力的技术支撑。

关键词:电子渠道;Docker;微服务架构;服务注册;服务发现

中图分类号:TU443 文献标识码:A 文章编号:1007-9416(2018)05-0054-03

1 引言

近几年,“互联网+”计划的开展和移动互联网技术得到了蓬勃发展与广泛的应用。各行各业持续以互联网+为驱动,充分利用互联网各大平台等开展电子渠道建设以此项广大客户提供更优质的服务。线上线下营销渠道相互补充体现了营销服务的立体高效化,开展电子渠道的建设也呈现了新的业务营销生态。国网营销系统以开展互联网+电力营销服务应用工作拓展了95598智能互动平台、国网商城、掌上电力、电e宝,e充电等电子渠道极大地加强了国网公司线上营销的服务能力。但是,在掌上电力、电e宝等电子渠道建设过程中暴露出了运营手段单一,运营效果不佳等问题,同时存在着各个渠道之间业务需求有重叠,管理边界存在交叉从而导致了各渠道之间系统业务功能重复建设的现象。针对存在的上述问题,采用近来发展快速的微服务架构[1][2]模式,具体采用Docker容器技术来实施微服务架构将各渠道整体业务拆分成有明确功能的微服务,使得每个服务都运行在独立的进程中。这样一来,每个功能模块都可以独立开发成一个服务,服务间相互协调,相互配合;对面业务需求重叠的部分形成一个独立公共基础服务供各个渠道使用很好的解决了各渠道业务需求重叠不能融合的问题。

2 微服务架构简介

微服务架构是一种架构模式,其主要思想是将大系统拆分成小系统,以此降低系统复杂性和降低系统升级,运维风险与成本[3]。具体实施起来就是将单体架构的应用程序拆分成小的服务,并保持服务之间相互协作,为用户提供调用。最主要的是,每个拆分的服务都运行在各自的进程之中,各个服务之间的协作采用诸如RESTful API这样的轻量级通信机制。在该架构中每一个服务都是围绕着具体业务进行构建,同时被独立部署到生产环境中。另外对具体的服务而言,可根据业务需求以及团队需求进行选择技术语言进行开发。微服务架构常用的组件主要有:服务注册、服务发现[4][5]、负载均衡、服务网关、配置中心、API管理、集成框架、分布式事务、调用链、支撑平台等。同时目前各个组件均有各大厂商提供了优秀且性能良好的解决方案。

2.1 微服务架构优势

讨论微服务架构的优势就免不了被拿来和传统的单体应用架构模式进行对比。对于规模较大的复杂系统而言微服务架构相对于传统单体应用架构模式在以下方面具有优势:

(1)开发效率。对于复杂的项目,采用微服务架构模式在早起设计、沟通等工作量会比较大,但是随着项目不断推进,开发效率能够保持在稳定的水平;而单体应用架构模式则在项目后期会效率大幅下降。

(2)系统设计。在微服务架构模式中,每个业务都对应一个为服务模块,各个业务之间相互独立,因此数据和代码也是在物理上隔离的,这样实现高内聚低耦合比较容易;而单体架构模式在开发中很容易造成在整个数据层面将系统中各个业务耦合在一起,因此实现高内聚低耦合比较困难。

(3)系统扩展。由于在微服务架构模式中,各个服务之间是相互协作的关系,每个微服务都运行在独立的进程中,所以很容易根据业务需求进行功能扩展;在单体架构模式中,需要在现有的系统上进行修改,容易与现有业务高度耦合。

(4)系统升级,在为服务架构模式中,各为服务组件可独立进行升级,各服务之间影响很小,这样一来能够极大提高开发效率;而在单体架构中需要对整个系统熟悉后才可以进行修改,还容易导致意外失败。

(5)硬件需求。基于微服务架构的系统中,系统部署了多少微服务启动对应运行容器即可,在单体架构系统中需要为整个系统分配资源容易导致冗余。

(6)项目成本。基于微服务架构的系统项目早起与后期项目成本变化比较平缓,而通过上述对比可知单体架构项目早起项目成本比较低,后期则比较大。

上述是微服务架构相对于单体架构在开发中的优势,但是就像其他技术一样微服务架构也有不足之处。微服务架构师分布式应用,其在构建、部署、维护时比较困难,难度比较大。

2.2 基于容器技术的微服务架构发展

近几年随着容器技术的发展,Docker[6]、Kubernetes[7]等容器技术已经发展成为了容器化和编排的行业标准。由于容器技术采用了内核接口,并且该技术能够实现不同的容器可以共享相同的内核,以及在容器之间进行隔离,所以采用容器技术可以很大程度上解决微服务架构带来的问题。

经过几年的发展,使用Docker容器技术支撑微服务架构的开发与运维已经经过了行业内绝大多数厂商的实践检验与验证并形成了优秀的技术解决方案。这也表明了没有Docker的蓬勃发展就没有微服务架构的落地与开花。

3 微服务架构在电子渠道建设中实践

3.1 微服务架构实践

电子渠道的建设完全符合微服务架构使用场景,各个渠道业务复杂,需求多,规模大。因此基于传统单体架构模式进行开发会造成后期扩展,维护等成本巨大。所以采用基于Docker容器技术[8]作为支撑来搭建基于微服务架构的电子渠道服务系统。目前,整个系统搭建已经成型,并支撑着各个渠道业务功能,同时也体现了其高可扩展性的优势。基于新的需求,目前已经在为服务架构系统中扩展了统一日志管理模块,以及应用感知监控模块。可以简要的将电子渠道建设中基于微服务架构的系统架构用图1来展现出来。

在圖1中最上层是应用层,各电子渠道业务功能可有不同团队采用不同技术进行开发并部署在应用层即可。接入层涉及到负载均衡的稳定性、高可用等;服务层主要提供服务注册、服务间通信、以及服务上线的灰度发布;最后两层主要是提供更基础设施功能支持,涉及容器集群正常的运转以及镜像的管理等,同时通过容器编排、自动修复、应用监控等高级服务提高自动化运维能力。这样做可以屏蔽底层基础架构从而让各个团队专注于业务应用开发。上面微服务架构下中众多组件主要采用目前行业内开源的成熟的技术解决方案来执行,大量成熟高可用的第三方技术解决方案极大减轻了开发微服务架构系统的难度,为电子渠道建设提供了稳定的技术支撑。

3.2 微服务架构实践中关键问题

在搭建微服务架构中,如何实现服务注册,服务发现、负载均衡、服务网关是整个系统建设中的关键问题。以下内容为在实践中所采用的解决方案。

(1)服务注册、服务发现。微服务架构是一种多个微服务构成的分布式网状结构,服务间通信采用轻量级机制进行通信,服务间通信流程包括需要服务提供方将服务地址注册到服务注册中心,服务调用方从注册中心找到需要调用的服务地址。这个流程中涉及服务注册与服务发现。在搭建电子渠道微服务架构系统中采用了Netflix的微服务方案采用Eureka做服务注册中心,Ribbon做服务发现以及负载均衡。

(2)负载均衡。微服务间协调对网络要求比较高,并且微服务物理位置是动态的,为此在搭建系统时采用了成熟的解决方案来支持负载均衡。部署服务时,各个微服务的物理位置可能是变化的,为此在创建微服务时会相应为服务创建负载均衡器和域名。

(3)服务网关。在电子渠道微服务架构系统搭建中,由于各个渠道业务繁多,因此系统会包含很多微服务。同时系统需要这些微服务的API供系统前端模块以及APP来调用,因此需要通过服务网关来提供统一的接口调用微服务的API以及API鉴权,这里采用的Spring Cloud的Zuul技术方案来实现服务网关功能。

(4)统一日志系统。由于个电子渠道业务较多,因此为了在部署的服务进程增加能够很好的解决日志文件管理的问题,搭建了基于ELK技术架构的统一日志管理系统。极大地提高了微服务架构下日志管理与查询分析效率。

(5)用户感知监控系统。在整个系统建设中为优化为服务架构系统结构以及排查问题,搭建了应用监控系统,主要通过统一日志系统中日志分析建立整个微服务系统整体的服务监控模块,对于每个服务的响应时间、错误率等都有良好实时监控,提高了系统运维效率。同时面对业务扩展需要,在应用监控模块中扩展了用户感知监控模块。在该模块下,可根据业务需要对于不同用户感知指标将不同团队开发的服务部署到相应独立进程中即可,为服务架构下系统业务扩展能力得到了集中体现。

4 结语

容器技术的迅猛发展,使得微服务与容器结合成为一种新的架构设计理念。本文主要介绍了在多维电子渠道建设中面对各个渠道复杂的业务需求以及存在的问题搭建了采用容器技术作为支撑的微服务架构系统的过程。整个过程表明了容器技术能够使微服务架构极大地简化,服务易于开发,系统易于维护,业务扩展能力能够得到保证。同时为后续的电子渠道建设提供了有力的技术支撑。

参考文献

[1]蒋勇.基于微服务架构的基础设施设计[J].软件,2016,37(05):93-97.

[2]郭栋,王伟,曾国荪.一种基于微服务架构的新型云件PaaS平台[J].信息网络安全,2015,(11):15-20.

[3]王磊.微服务架构与实践[M].电子工业出版社,2015.

[4]简玮侠.高可用服务发现架构的设计和实现[J].信息与电脑:理论版,2015,(22):75-76.

[5]张晶,黄小锋.一种基于微服务的应用框架[J].计算机系统应用,2016,25(9):265-270.

[6]高礼,高昕.Docker技术在软件开发过程中的应用研究[J].软件,2016,37(3):110-113.

[7]Vohra D. Kubernetes microservices with Docker[J].2016.

[8]刘思尧,李强,李斌.基于Docker技术的容器隔离性研究[J].软件,2015,36(4):110-113.