APP下载

基于微服务的大平台系统架构演进探讨

2018-01-02郑明钊张建强

软件 2017年12期
关键词:容器部署架构

郑明钊,张建强

(中国移动通信集团设计院有限公司山东分公司,山东 济南 250101)

基于微服务的大平台系统架构演进探讨

郑明钊,张建强

(中国移动通信集团设计院有限公司山东分公司,山东 济南 250101)

当前很多企业和公司的生产平台大都使用老旧的单块架构(Monolithic)模式,不易扩展,且升级过程复杂,存在维护成本高、持续交付周期长、灵活性差等多种问题。微服务(Microservice)的架构模式将生产平台拆分成一个一个非常细小的微服务,每个微服务都单独部署,将一组微服务进行组合从而实现一个复杂的功能。微服务具有实现简单、业务专一、相互独立、耦合度低、开发和维护成本低等优点。另外,Spring Boot和Docker容器技术的发展,使得微服务的具体实现和部署变得非常方便。

单块架构;微服务;Spring Boot;容器

0 引言

在过去相当长的一段时间内传统的单块式(Monolithic)[1]系统架构思维及技术一直统占据着主流的地位。单块架构具有如开发方便、容易部署、易于水平扩展以及方便测试等许多优点。但是随着互联网行业的不断发展,各个公司的业务需求不断增长,以及用户量的激增,单块架构模式已经慢慢的被互联网的发展速度抛在了后面,面临着巨大的挑战。在这种趋势下,单块模式系统暴露出了持续交付周期增长、新人培养时间增长、技术选型成本高、可伸缩性差、灵活性降低,以及测试成本、构建成本和维护成长增加的不利局面。

当前有很多公司或者机构都还保留着一些使用单块模式的开发架构,同样出现了维护成本高、持续交付周期长、灵活性差等一系列的问题。另外,有些公司在进行不同的项目时会进行重复开发相同的功能,这样无疑增加了开发负担,而且还降低了工作效率。

在此背景下,微服务(Microservice)的诞生很好的解决了单块模式的很多不足之处。微服务架构模式提倡将应用内的子功能划分成一组小的服务,组合不同的服务就可以实现一个复杂的功能服务。

另外微服务的技术发展已经有很多成熟的案例,使用容器等工具进行开发的方式也有很多应用。为了改进过去老旧的生产平台系统,达到去中心化、快速迭代和持续交付的目的,无疑使用微服务的架构模式是最为合适的。

1 微服务架构介绍

1.1 微服务概念

所谓微服务[2],就是将应用程序内的功能尽可能的细进行划分,并将每个细小的功能作为一个独立的服务。每个微小的服务间通常使用 HTTP API的方式进行通信,而且他们都专注于具体的业务功能,拥有强壮的模块边界,可以独立部署。每个服务进行协调与配合,最终为用户提供相应的功能需求。

1.2 微服务架构特点

复杂度可控:微服务让应用被分解为多个可管理的分支或服务,通过微服务架构模式,让复杂的功能,通过模块化的方式呈现出来,让单个服务更容易开发和维护;

灵活可扩展:微服务架构模式使得每个服务独立扩展,每个服务可以进行单独的增减功能,使得整体变得非常灵活;

独立部署:微服务具备独立的运行进程,所以每个微服务也可以独立部署。使用相同的部署环境可以实现批量快速部署微服务。

1.3 微服务与SOA对比

SOA(服务导向式架构)[3]在过去已经存在了很长时间,他是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。“微服务(micro service)”架构是最近出现的新概念,目的是将大型的、复杂的、长期运行的系统构建为一组相互配合的服务,每个服务都有单一职责,他们间都采用轻量级通信,开发测试与部署相互独立,且具有良好的扩展性等特点。

微服务与SOA存在多方面的不同,二者的主要区别如下表1所示。

表1 微服务架构与SOA架构比较Tab.1 Comparison of microservices architecture and SOA architecture

综合上面所示,我们可以认为微服务就是SOA的一个子集,相较而言使用微服务的架构更加符合当前互联网发展趋势。

2 利用微服务架构来实现大平台统一服务

微服务架构是一种去中心化的架构,在互联网时代,企业的核心就是效率。传统企业服务总线是中心化的架构,这会导致效率低下、稳定性差。而微服务技术体系提供给我们带来是负载更小,故障影响的范围也更小,能够大幅降低去中心化应用系统的运营成本。

本节将针对一些公司企业的内部平台存在的问题进行分析,并提出使用微服务架构模式来实现平台的改造建设方案。

2.1 现状分析

当前很多公司和企业的平台大都遵循传统的SOA架构实现,传统的系统架构将所有的功能模块进行罗列,通过接口层将对外的功能进行划分,再对外进行开放。这样在业务处理和技术实现方面都存在多种问题,其主要表现在如下几点:

(1)平台缺乏统一业务处理流程,不同平台各有各自的处理方式,难以统一;

(2)平台内部多次实现了相同的功能,进行重复开发;

(3)平台升级需要重新构建、编译,打包部署,耗时耗力耗财;

(4)开发SaaS[4]互联网功能的产品迫在眉睫,需要满足快速开发、灵活升级、高性能、高可用、高稳定、简化运维等更高的需求;

(5)大容量访问下无法提供可靠性服务。

2.2 微服务架构的大平台规划方案设计

经过上述对一些公司的信息化平台的现状分析,可以得出当前很多公司的信息化生产平台存在着很多严重问题,为了能够解决这些问题,他们迫切需要改进其生产平台系统架构建立一个统一的大平台服务体系。

2.2.1 平台构建原则

构建大平台应当遵循微服务的设计原则,如下图1所示。

1、部署方式:每个主机可部署单个服务或者多个服务,视所部属的主机性能所定;

2、数据存储:每个微服务间应当尽量做到数据隔离,相互独立;

3、对外通信:使用API GateWay来对外通信,API GateWay可以起到负载均衡、用户验证和安全保护等作用;

4、通信方式:可以使用HTTP Restful[5]消息方式或者,远程调用方式;

图1 微服务架构设计原则Fig.1 Design principles of microservice architecture

5、服务发现方式:客户端直接发现方式和服务端发现方式。两种方式各有优点,客户端方式省去了中间的一些操作,更加简单方便,但是安全方面可能会存在问题。而服务端发现方式由服务端的一个中转站进行,这种方式可以进行统一管控,方便管理。

2.2.2 微服务架构设计方案

结合上述分析的一些公司生产平台现状态以及存在的不足,使用微服务的架构思想可以有效的解决这些问题,主要体现在:

1、系统管控简单,每个服务只需负责好自己即可;

2、易维护性,过去若系统需要增删功能需要对系统进行重新构建和部署,而使用微服务架构可以实现服务的“热插拔”,只有对单个服务进行操作即可完成需求;

3、易扩展性,方便快捷的部署方式使得微服务在进行扩展时,只需要将相同的服务进行注册即可完成部署。另外,在开发新功能时,完成新功能的服务后,同样也可以非常快速的进行服务部署。

2.2.2.1 生产平台改造设计方案

根据微服务的架构思想来改造生产平台,其方案改造可以遵循图2的方法:

图2 微服务架构改造老生产平台步骤Fig.2 The Step of reform the old production platform with microservice architecture

根据上图中的方法,下面详细说明每一步的工作内容:

1、分析生产平台所包含的功能模块,将具有共性的部分抽取出来,将各个功能模块尽可能小的再细分成小的功能点;

2、功能剥离:将分析得到的各个功能点进行提取,将独立的模块进行提取;

3、数据解耦:剥离出业务数据,尽量做到每个微服务间业务数据相互独立、相互隔离,不产生影响;

4、确定微服务功能点:分析确定所有需要实现的功能点,确定每个服务的业务流程和开发技术选型;

5、系统设计:根据微服务的技术特点和大平台的业务需求进行概要设计和详细设计;

6、行代码的快速开发与测试;

7、使用容器部署:容器是用来封装微服务所部属使用的资源环境的,相同的容器可以直接进行简单部属。

2.2.2.2 系统架构设计

根据上述设计原则以及改进方案,设计出如图

3的新系统的逻辑架构:

由图可见每个微服务需要单独部署并进行注册,服务路由负责注册服务和发现服务,其物理实现可以通过高速缓存系统实现。API GateWay负责访问的负载均衡[6]、身份认证和安全管控等,通过API GateWay可以实现服务的调用。在实际部署中,每个服务可能是对应着一组服务集群,这样可以保证服务的访问效率。部署一个服务时,可以将其部署到容器中,这样可以保持相同环境一次部署多个服务。每个服务间通过 Rest协议通信,每个服务也可以通过消息中心模块获取数据。消息中心一般使用大数据的分布式架构实现消息的自动输送。对于维护模块需要实现的功能是自动化的运维和日志的监控等。

图3 系统逻辑架构图Fig.3 System logic architecture diagram

3 关键技术

Docker容器:Docker[7]是一款强大的开源的应用容器,编程人员可以封装应用以及相关的开发环境到一个可移植的容器中,然后发布到其他机器或者系统上。Docker也可以实现虚拟化,容器是使用沙箱机制,相互之间不会有任何接口。

其实现原理如下图4所示,应用程序如同正方形内的三角形、圆形和五边形,而正方形就是Docker,最外层的长方形就是我们的系统,我们将应用程序放在Docker里面,然后将一个或多个正方形块整体放到长放行内,可以实现快速而简单的服务部署。

图4 Docker容器封装不同服务Fig.4 Docker container encapsulating different services

Nginx[8]:在本系统中Nginx作为负载均衡服务器,可以进行 HTTP代理对外进行服务,不论是系统资源开销还是CPU使用效率都是非常不错的。通过Nginx的配置可以进行对外部访问进行分流和负载均衡。

Restful API:近年来随着移动互联网的发展,各种类型的 Client层出不穷,RESTful可以通过一套统一的接口为不同的客户端提供统一的服务接口。如下图所示,不同的终端可以通过一个标准的Restful API来访问数据库从而获取到相同的数据。

图5 Restful API统一不同终端接入Fig.5 Docker container encapsulating different services

Spring Boot:Spring Boot[9]其初始的设计目的是用来简化Spring应用的初始搭建以及开发过程,但是经过不断的发展,如今已经应用于开发Java微服务。它通过封装底层框架的复杂配置,从而使的开发者可以非常容易的进行微服务的开发。Spring Boot提供了一些非常强大的通用功能,如RESTful API[10]接口功能,所以它在一定程度上极大的提高了工作人员的效率。Spring Boot目前广泛应用于微服务,可以让他们非常简洁的开发某个庞大系统中的某个单独的服务。

4 大平台统一服务前景

使用微服务来实现的统一服务大平台,具有多方面的价值,其发展前景非常好,主要体现在如下几点:

1、节省了运维成本:许多微服务单独部署,在进行维护时,只需对单个服务进行修改即可;

2、统一的大平台节省了后续功能扩展的开发成本;

3、平台推广能力增强,外部系统若想使用某个功能,只需要将该服务的接口提供给对方即可,无需额外开发程序;

4、大数据、云计算已经广泛应用,通过微服务的架构思想可以轻松实现SaaS层次的云服务。

5 结束语

本文提出了使用微服务的架构思想来统一构建大生产平台的一种架构方案,该方案不但在理论上进行了介绍,而且还在具体的架构实现进行了分析,具有非常高的可行性。如果真的应用到实际的企业工作环境中将会大大节约我们的开发成本,而且还会提高我们的工作效率。

[1] 张晶, 王琰洁 黄小锋. 一种微服务框架的实现[J]. 计算机系统应用, 2017, 26(04): 82-86.

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

[3] 凌晓东. SOA综述[J]. 计算机应用与软件, 2007, (10):122-124+199.

[4] 陈鹏, 薛恒新. 面向中小企业信息化的SaaS应用研究[J].中国制造业信息化, 2008, (01): 10-13.

[5] 孙杨. 基于REST风格构建Web服务的研究与应用[D]. 电子科技大学, 2009.

[6] 周莹莲, 刘甫. 服务器负载均衡技术研究[J]. 计算机与数字工程, 2010, 38(04): 11-14+35.

[7] 张建, 谢天钧. 基于Docker的平台即服务架构研究[J]. 信息技术与信息化, 2014, (10): 131-134.

[8] 林丽丽. 使用高性能Web服务器Nginx实现开源负载均衡[J]. 大众科技, 2010, (07): 37-38+27.

[9] 王永和, 张劲松, 邓安明, 周智勋. Spring Boot研究和应用[J]. 信息通信, 2016, (10): 91-94.

[10] 刘兴邦. 基于RESTful和Android的途家网房源管理系统的设计与实现[D]. 北京交通大学, 2015.

Discussion on the Evolution of Big Platform System Architecture Based on Microservice

ZHENG Ming-zhao, ZHANG Jian-qiang
(China Mobile Group Design Institute Co., LTD Shandong, Jinan 250101, China)

As of now, the production platforms of many companies are using the old monolithic mode that is difficult to expand, with complex upgrade process, high maintenance cost, long period of continuous delivery as well as poor flexibility. The architectural pattern of microservice divided the production platforms into individual services with tiny size, each of which will be separately deployed before being grouped together for realizing a complicated function. Actually, the advantages of micro-services include simplicity, specificity, mutual independence,low degree of coupling as well as low maintenance cost. Meanwhile, the progress of container technologies such as Spring Boot and Docker enabled the implementation and deployment of micro-services to be done in a convenient manner.

Monolithic; Microservice; Spring boot; Container

TP302

A

10.3969/j.issn.1003-6970.2017.12.031

本文著录格式:郑明钊,张建强. 基于微服务的大平台系统架构演进探讨[J]. 软件,2017,38(12):165-169

郑明钊(1989-),男,硕士,中国移动通信集团设计院有限公司山东分公司,研发工程师,主要研究云计算、大数据;张建强(1974-),男,本科,中国移动通信集团设计院有限公司山东分公司,研发工程师,主要研究虚拟化、大数据、云计算。

猜你喜欢

容器部署架构
基于FPGA的RNN硬件加速架构
Different Containers不同的容器
一种基于Kubernetes的Web应用部署与配置系统
晋城:安排部署 统防统治
功能架构在电子电气架构开发中的应用和实践
部署
难以置信的事情
LSN DCI EVPN VxLAN组网架构研究及实现
部署“萨德”意欲何为?
一种基于FPGA+ARM架构的μPMU实现