谈微服务,首先要谈“Monolithic架构”,例如网上是这样说的“网上对Microservice进行介绍的文章常常以Monolith作为开头,我也不会例外。原因是,知道了Monolith的不便之后才能更容易地理解Microservice架构模式所具有的各种优点。[1]

1. 传统应用架构

  传统的企业级应用是单体应用(monolith application),一般是分层结构,如表现层/应用层/领域层/数据层,这主要是水平切分的思想。

  随着互联网应用的发展,特别是大型电商系统,业务非常复杂。这种巨型系统,首先要关注的是如何根据业务划分子系统,然后是子系统间如何协作,最后才是子系统内部实现。SOA设计可以很有效支持前面两步,在SOA体系里,每个子系统是独立的服务,服务接口体现子系统协作关系,至于子系统内部,直接作为黑盒子处理[6]

  所以对于复杂系统,首先采用SOA垂直切分子系统,然后使用分层设计水平切分单个子系统,服务化把传统的分层设计往前更推进一步。

  当然SOA本身也在不断发展,最初跨企业的Web service交互可认为1.0时代;支持企业内部系统间轻量级访问,支持服务治理,可认为2.0时代;服务进一步分层和微服务化可认为3.0时代。

  Web应用程序发展的早期,大部分Web工程是将所有的功能模块(service side)打包到一起并放在一个web容器中运行,很多企业的Java应用程序打包为war包。其他语言(Ruby,Python或者C++)写的程序也有类似的情况[5]

这里写图片描述
图1. 传统服务(Monolith)架构

  但是,上述的好处是有条件的:应用不那么复杂。对于大规模的复杂应用,巨石型应用会显得特别笨重:要修改一个地方就要将整个应用全部部署(PS:在不同的场景下优势也变成了劣势);编译时间过长;回归测试周期过长;开发效率降低等。另外,巨石应用不利于更新技术框架,除非你愿意将系统全部重写(代价太高你愿意老板也不愿意)[5]

2. 微服务架构

  微服务是为适应当前互联网快速发展,互联网应用快速迭代、快速部署而产生的技术架构,微服务强调的是在共享硬件资源的基础上隔离,缺乏软件共享;相当于敏捷的建立了很多小烟囱系统,虽然降低耦合,但是未有效的解决信息孤岛。

  微服务所设计的每个微服务都要非常容易被抛弃、被替换。拥抱不断变化的业务,快读迭代开发。微服务设计目标是降低系统复杂度,提高开发生产力,是适合敏捷方法快速建立持续改进的系统,例如互联网应用,而信息共享是需要通过另个维度来解决。

这里写图片描述
图2. 微服务(Microservice)架构

  微服务架构云化方案一般融合Docker和DevOps技术,解决租户隔离和统一开发平台的需求,依赖IaaS,以此形成云化。

  例如以建设企业办公楼为例,微服务借助DevOps工具,使用服务化的建筑预制件快速搭建需要的办公楼(室),其中内含水电等都是独立的。

3. 轻量级SOA架构

  在传统企业级SOA实施中,服务架构设计也采用轻量级模式,把业务、平台组件拆分为细粒度服务,按服务内容分别创建并管理服务容器,架构模式与微服务类似,主要差异是需要基于SOA GIRD(有的厂商为ESB),提供BPM、MDM等企业级组件。

这里写图片描述

  在上述轻量级SOA架构中,每个服务容器可以单独完善、优化,可以达到系统不停机,特别是在信息共享和系统集成方面,是优于微服务架构。

  轻量级SOA架构云化方案是使用PaaS方案,企业私有PaaS,是统一运营平台、统一开发平台,是为传统大型企业解决信息孤岛问题,以及企业信息化优化、统一管理而形成的解决方案。

  私有PaaS强调SOA,SOA很多的应用场景都是在对已有应用的打通,比如你买了SAP的软件,又买了另一家的软件,还有以前投资定制开发的软件。这些软件都很贵,要像祖宗一样供起来的,轻易不敢改动,而且有大量历史数据,改动成本很高。所以要尽量保留,要通过SOA的方式对接在一起。

  再以建设企业办公楼为例,通过PaaS平台统一构建企业办公楼,每个单位或部门按需租用办公室,内部共享使用水电等资源,每个水、电、门禁资源是统一管理的,也可以个性化,并按使用情况计量。

4. 微服务与SOA二者云化比较

  1. PaaS平台是不依赖IaaS,可以独立存在的,微服务云一般依赖IaaS来实现云;
  2. PaaS实现软件层面的共享,能全面支持Gartner多租户模型,而微服务云平台仅是通过IaaS实现硬件资源的共享,以及容器的隔离;
  3. PaaS平台符合Gartner多租户模型4到7高级模型,而微服务云平台最多符合1到3级资源层级的模型;
  4. PaaS平台是统一可运营的平台,适用于大型企业,微服务云平台是个敏捷平台,更适合互联网多变的应用;
  5. PaaS平台强调可重用、复用性强,继承信息化资产,微服务云平台的微服务强调的是重写,快速应变;
  6. PaaS平台采用成熟中间件产品,例如Opentext的产品,平台稳定,高可用;微服务云平台微服务因为采用分布式系统而产生的复杂性和稳定性问题,而且测试、维护也复杂;
  7. 微服务强调替换比利旧重要;
  8. 基于PaaS平台开发的应用,天生就是SaaS。

5. 总结

  综上所述,微服务云平台与SOA云平台,都能实现云,为最终用户提供SaaS,差别是适用场景上,在传统企业级应用中,基于SOA的PaaS更适合解决信息孤岛问题、消除部门壁垒、利旧信息资产;从技术层面来说,差别也不是很大,都是在服务化的体系和云的体系之下。
  
  这些都是根据互联网上的经验综合梳理出的理解,欢迎讨论。

参考:
[1]. 《微服务架构模式简介》 博客园 Amber-Garden 2015.07
[2]. 《微服务架构设计》 博客园 PetterLiu 2016.12
[3]. 《面向集团客户云计算运营平台的运营开通技术方案及应用架构——之云计算运营平台方案(三)》 CSDN博客 肖永威 2013.12
[4]. 《管理支撑办公系统技术架构选型对比讨论(J2EE与SOA对比)》 CSDN博客 肖永威 2014.04
[5]. 《基于微服务的软件架构模式》 简书 杜琪 2015.12
[6]. 无架构,不系统,谈谈架构的发展趋势和现状 百度贴吧 2016

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐