APP下载

微服务架构综述

2018-01-02陈龙刘勇

科学与财富 2018年33期
关键词:微服务架构

陈龙 刘勇

摘 要:一方面,随着互联网高速发展,IT技术日新月异变化,传统的单块架构应用面临着越来越多的挑战,已无法适应快速迭代更新,其改造与重构势在必行。另一方面,随着敏捷开发、持续集成交付、DevOps、云计算、虚拟技术docker化等的深入人心,微服务的诞生势在必行。微服务架构是一项在云中部署应用和服务的新架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,满足用户需求,实现了可扩展性、易伸缩性及高可用性。首先介绍了微服务架构的定义及工作原理;然后与传统架构进行对比,并分析两者优缺点;接着介绍了微服务架构现有的应用框架;最后提出了微服务架构未来的发展方向。

关键词:微服务;架构;SOA;SpringCloud;Dubbo

1引言

随着市场的快速发展,业务的不断扩大,单块架构应用面临着越来越多的挑战,其改造与重构势在必行。而微服务架构的诞生,是互联网高速发展,虚拟化技术应用以及持续交付、DevOps深入人心的综合产物。随着用户需求个性化、产品生命周期变短,微服务架构是未来软件软件架构朝着灵活性、扩展性、伸缩性以及高可用性发展的必然方向。同时,以Docker为代表的容器虚拟化技术的盛行,将大大降低微服务实施的成本,为微服务落地以及大规模使用提供了坚实的基础和保障。

2微服务架构的定义及原理

ThoughtWorks的首席科学家,马丁 -福勒先生对微服务的这段描述,似乎更加具体、贴切,通俗易懂:微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP协议的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

3 微服务与传统架构的区别

3.1单块架构

传统的单块架构是以技术分层,譬如表示层、业务逻辑层、数据访问层。单块架构虽然逻辑上分为3层,但是它依旧是功能集中、代码和数据中心化的一个发布包,运行在同一个机器的同一个进程中。当业务量较小时,它拥有易开发、易测试、易部署、易水平伸缩等多项优势。

但随着业务量扩大化、用户需求个性化、产品生命周期变短、市场需求不稳定等因素的出现,单块架构系统面临着越来越多的挑战。

主要提现在以下六点:1)维护成本增加;2)持续交付周期长;3)新人培养周期长;4)技术选型成本高;5)可伸缩性差;6)构建全功能团队难。

3.2 SOA架构与微服务

SOA(Service-Oriented Architecture),是一种粗粒度、松耦合服务架构,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。刘颖说“SOA 即面向服务的架构,大多数企业采用 SOA 来降低项目业务之间的耦合程度, 将庞大的项目拆分成多个独立的微小服务, 服务之间根据定义标准的接口规范通过 API 接口的形式进行通信,这样不仅可以使项目解耦,同时简化了复杂的业务流程,可以根据业务需要从不同的入口进行处理,提高了系统调度的灵活性,但是与此同时也会引入一些新的问题,由于各个服务之间需要约定标准和规范,才能保证正常的使用,这样限制了业务多元化发展,SOA 相当于向外部提供了定制化的服务。 而且在项目部署的时候习惯将基础服务生成 jar包,供其他业务服务调用的时候添加依赖,这其实在项目部署的时候并没有将整体项目进行彻底的拆分, 服务与服务之间依然存在依赖关系,为了能够更好的解决上述问题,微服务架构便应运而生了”。

仔細分析SOA架构与服务器架构的概念,二者的基本思想几乎一致,但是从具体的实现出发,二者大相径庭。

相比传统SOA的服务实现方式,微服务更具有灵活性、可实施性以及可扩展性,其强调的是一种独立测试、独立部署、独立运行的软件架构模式。

4. 微服务架构的优点和不足

4.1 微服务架构优点

微服务架构的优点主要有以下五个方面:

(1)复杂度可控:在将应用分解的同时,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。

(2)独立部署:由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。当某个微服务发生变更时无需编译、部署整个应用。由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低对生产环境所造成的风险,最终缩短应用交付周期。

(3)技术选型灵活:微服务架构下,技术选型是去中心化的。每个团队可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术栈。由于每个微服务相对简单,当需要对技术栈进行升级时所面临的风险较低,甚至完全重构一个微服务也是可行的。

(4)容错:当某一组建发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,形成应用全局性的不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。

(5)扩展:单块架构应用也可以实现横向扩展,就是将整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。

4.2 微服务架构的不足

微服务架构的优点主要有以下六个方面:

(1)运营开销。更多的服务也就意味着更多的运营,产品团队需要保证所有的相关服务都有完善的监控等基础设施,传统的架构开发者只需要保证一个应用正常运行,而現在却需要保证几十甚至上百道工序高效运转,这是一个艰巨的任务。

(2)DevOps要求。使用微服务架构后,开发团队需要保证一个Tomcat集群可用,保证一个数据库可用,这就意味着团队需要高品质的DevOps和自动化技术。而现在,这样的全栈式人才很少。

(3)隐式接口。服务和服务之间通过接口来“联系”,当某一个服务更改接口格式时,可能涉及到此接口的所有服务都需要做调整。

(4)重复劳动。在很多的服务中可能都会使用到同一个功能,而这一功能点没有足够大到提供一个服务的程度,这个时候可能不同的服务团队都会单独开发这一功能,重复的业务逻辑,这违背了良好的软件工程中的很多原则。

(5)分布式系统的复杂性。微服务通过REST API或消息来将不同的服务联系起来,这在之前可能只是一个简单的远程过程调用。分布式系统也就意味着开发者需要考虑网络延迟、容错、消息序列化、不可靠的网络、异步、版本控制、负载等,而面对如此多的微服务都需要分布式时,整个产品需要有一整套完整的机制来保证各个服务可以正常运转。

(6)事务、异步、测试面临挑战。跨进程之间的事务、大量的异步处理、多个微服务之间的整体测试都需要有一整套的解决方案,而现在看起来,这些技术并没有成熟。

5. 微服务发展现状(SpringCloud dubbo 以及网易云整合,优缺点)

目前应用微服务架构的框架主要有两种,一种是dubbo,另一种是spring cloud。本文从四个方面对两者进行简要分析。第一,背景方面来看,Dubbo是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点,在国内十分流行。spring-colud是一种云端分布式架构解决方案,利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,在国外影响较大;第二,从社区活跃度的角度来看,在Github上,截止今日(2018年10月9月),Dubbo的最近一次更新在一月之前,更新频率不高且中途存在长时间不更新的情况,而SpringCloud的最近一次更新是在5分钟之前,活跃度十分高;第三,架构完整度,根据微服务架构在各方面的要素,看看Spring Cloud和Dubbo都提供了哪些支持。

从上图可看出,Dubbo只实现了微服务整体架构中的部分组件,需要与其他组件组合才能形成完整的微服务架构,比如其中的分布式配置可以配合淘宝的diamond、百度的disconf来实现,服务跟踪可以使用京东开源的Hydra,批量任务可以使用当当开源的Elastic-Job等等,因此,可将Dubbo看作一个类似Netflix的子集。从文档质量的角度来看,Dubbo的文档 可以说在国内开源框架中算是一流的,非常全,并且讲解的也非常深入,由于版本已经稳定不再更新,所以也不太会出现不一致的情况,另外提供了中文与英文两种版本,对于国内开发者来说,阅读起来更加容易上手,这也是dubbo在国内更火一些的原因吧。Spring Cloud由于整合了大量组件,文档在体量上自然要比dubbo多很多,文档内容上还算简洁清楚,但是更多的是偏向整合,更深入的使用方法还是需要查看其整合组件的详细文档。与此同时,网易云推出了轻舟微服务,即围绕应用和微服务打造的一站式 PaaS 平台,帮助用户快速实现易接入、易运维的微服务解决方案。它的优势主要集中于以下四点。第一,基于开源、兼容开源。全面兼容SpringCloud和dubbo框架,支持已有的服务框架平滑迁移;第二,支持大规模业务的生产环境验证;第三,低成本、易接入。支持代码零改动支持微服务框架,支持应用扩扑可视化,支持平台统一的平台认证和权限管控;第四,智能运维和立体化监控。支持实时监控,精准掌控服务健康状况。提供服务拓扑,调用链跟踪可视化呈现。采用多维度关联分析,预防系统级故障。由此可见,网易云方便了中小企业更快捷的接入微服务框架,降低了中小企业的技术成本,同时使微服务的应用更加广泛。

结束语

综上所述,微服务架构正在逐步走向完善与成熟。它解决了单块架构的痛点,相对SOA架构,微服务真正实现了单个业务系统内部真正的组件化和服务化,可独立地进行开发、管理和加速,使得部署、管理和交付变得更加简单,充分体现了它的灵活性和可扩展性。同时,不论是国内的dubbo框架还是国外的SpringCloud,亦或是网易云整合的轻舟微服务平台,都具有非常高的可行性,随着它们不断的发展与完善,我们坚信微服务架构将在未来的架构之路上扮演者重要角色。

参考文献:

[1] 侯海平,李龙.基于Dubbo服务治理模式的单体架构改造[J].通化师范学院学报,2018,39(8):64-68.

[2] 王方旭. 基于SpringCloud实现业务系统微服务化的设计与实现[J]. 电子技术与软件工程, 2018(8).

[3] 王方旭. 基于Spring Cloud和Docker的微服务架构设计[J]. 中国信息化, 2018(3).

[4] 张峰. 微服务技术构建大规模web系统的研究[J]. 科技创新与应用, 2017(22):48-49.

[5] 王纪军, 张斌, 顾永生,等. 云环境中Web应用的微服务架构评估[J]. 计算机系统应用, 2017, 26(5):9-15.

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

[7]王磊.解析微服务架构(一)单块架构系统以及其面临的挑战 [2015-05-11].http://www.infoq.com/cn/articles/analysis-thearchitecture-of-microservice-part-01

[8]解析微服务架构(二)微服务架构综述

[2015-07-10]. http://www.infoq.com/cn/articles/analysis-the-architecture-of-microservice-part-02

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

作者简介:

陈龙,三峡大学计算机与信息学院,硕士研究生在读,研究方向:软件工程。

刘勇,三峡大学计算机与信息学院,博士,教授,研究方向:计算机应用。

猜你喜欢

微服务架构
基于FPGA的RNN硬件加速架构
功能架构在电子电气架构开发中的应用和实践
LSN DCI EVPN VxLAN组网架构研究及实现
微信公众平台在医院图书馆的应用现状调查
基于微信企业号的校园移动服务
从单一模式系统架构往微服务架构迁移转化技术研究
一种基于FPGA+ARM架构的μPMU实现