谈微服务,首先要谈“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

面向微服务架构与传统架构、SOA对比,以及云化对比相关推荐

  1. 分布式与微服务——Iaas,Paas和Saas、单体应用和缺点、微服务概念、传统 分布式 SOA 架构与微服务架构的区别、微服务实战、什么是RPC、CAP定理和BASE理论、唯一ID生成、实现分布式

    文章目录 1-什么是Iaas,Paas和Saas 一 IaaS基础设施服务 二 paas平台即服务 三saas软件即服务 四 总结 2-单体应用和缺点 一 单体应用 二 单体应用的缺陷 3-微服务概念 ...

  2. 单体 soa 微服务 区别_每日一读-从单体到微服务,这些年架构的演变

    写在前面的话 Stay Hungry Stay Foolish!!! 每天进步一点点!!! <每日一读>是博主每日学习的一篇文章所记录的笔记,大多数是提取文章中关键内容而成:文章类型不限, ...

  3. soa面向服务体系结构_服务和面向微服务的体系结构简介

    soa面向服务体系结构 by Pulkit Kumar 通过Pulkit Kumar 服务和面向微服务的体系结构简介 (An introduction to service and micro-ser ...

  4. 《微服务设计原理与架构》书籍知识点总结

    本书是一本微服务书籍的详细的介绍书籍. 主要从直面微服务架构.服务建模方法.服务的拆分与集成.微服务架构的基本组件.微服务架构的关键要素.微服务架构的实现技术.微服务架构的管理体系.面向微服务架构的转 ...

  5. 【2017年第3期】交通大数据:一种基于微服务的敏捷处理架构设计

    杜圣东, 杨燕, 滕飞 西南交通大学信息科学与技术学院,四川 成都 610031 摘要:面对智慧交通广泛的大数据应用场景和技术需求,一般大数据系统难以适应多种处理情况并做出快速响应.针对这一问题,首次 ...

  6. 架构的本质是管理复杂性,微服务本身也是架构演化的结果

    为应对如今无线优先和全渠道用户体验的需求和挑战,我们该如何设计灵活的面向体验的微服务架构?它有哪些模式和最佳实践?携程,Netflix和SoundCloud这些知名互联网公司是如何实践面向体验的微服务 ...

  7. 微服务实战:从架构到发布(二)

    引言:上篇文章介绍了微服务和单体架构的区别.微服务的设计.消息.服务间通信.数据去中心化,本篇会继续深入微服务,介绍其它特性. 治理去中心化 通常"治理"的意思是构建方案,并且迫使 ...

  8. 云原生时代微服务的高可用架构设计

    简介: 在8月20日"阿里巴巴技术质量精品课"上,来自蚂蚁的经国分享了对云原生时代微服务的高可用架构设计的全面解析,为大家介绍了应用架构演进路径.云原生时代的技术福利.高可用架构的 ...

  9. 微服务——最热门的架构

    微服务--最热门的架构 在大型互联网应用中,如何更为合理的划分系统和团队边界.如果更加有效的组织系统开发过程.如何通过技术手段识别和消除开发过程中的浪费成为广大软件开发和技术管理人员所需要思考的命题. ...

最新文章

  1. ASP与ASP.NET的区别
  2. try-catch-finally中的4个巨坑,老程序员也搞不定!
  3. JAVA-JSP Scriptlets(JSP小脚本)
  4. 【STM32】利用 C 语言 strchar() 函数查找字符串中指定字符的位置
  5. OpenGL material light材质灯光的实例
  6. 设计模式(17) 访问者模式(VISITOR) C++实现
  7. CTO 离职、研发变动,百度外卖与饿了么组织架构融合公布
  8. Core Graphics Paths
  9. 可以写进简历的十大Java项目
  10. Mac ffmpeg推流记录
  11. 怎么把cad的图导入ps_CAD图纸快速高效导入PS的方法
  12. 关于TOPCODER的所有挑战、任务和GIG工作机会
  13. TexturePacker纹理打包打方法及技巧
  14. 30天自制操作系统(day1)
  15. CTSC1999补丁VS错误题解
  16. java计算机毕业设计乒乓球俱乐部管理源码+系统+数据库+lw文档+mybatis+运行部署
  17. 实用技巧——Python实现从Excel读取数据并绘制成图像
  18. SAP BDC数据批量导入功能
  19. 输入身份证号和年份计算年龄
  20. ”网上花店” 专题页制作

热门文章

  1. qt开发之获取鼠标的相对位置和绝对位置
  2. 黑客租用阿里云平台攻击淘宝,9900万账户信息遭窃取
  3. python酷炫图形代码_牛批了,1 行 Python 代码就可实现炫酷可视化
  4. 零元学Expression Design 4 - Chapter 7 使用内建功能「Clone」来达成Path的影分身之术...
  5. 网络隔离环境下的跨网数据传输,如何保障安全性?
  6. 2021-04 提高转化-基础销量+基础销量+晒图买家秀+精心设计的问大家
  7. 有1000个瓶子,其中有999瓶是水,1瓶是毒药
  8. 李峋同款爱心代码Python版
  9. Vue组件实现数字滚动抽奖效果
  10. 这可是全网EVE安装最完整,最详细的图解,没有之一【安装图解】