开始之前,我们先简单看下单体架构、SOA与微服务之间的区别,如下图所示:

简单来讲,对于单体架构,其就像一个超大容器,容器内集中包含了该应用的所有软件组件,并且组件与组件之间紧密耦合。

而对于SOA架构来说,其本质上也是服务的集合,服务与服务之间彼此调用,这种调用可能涉及到简单的数据处理或者有超过多个服务之间相互协作共同完成某种业务操作,在SOA中我们需要考虑服务之间应如何相互通信。

最后说到微服务,或者我们称之为微服务架构,这是一种架构风格,聚焦业务领域,将应用通过一个个小而自治的服务组织起来。

说到SOA与微服务,两者均依赖于服务作为其主要组件,但不同架构下的服务特征却有很大的不同,下面我们看下SOA与微服务之间的主要区别都有哪些?

对于SOA来说,其定义了四种基本类型的服务


Business Services: 业务类服务

  • 粗粒度服务,主要定义关键业务操作
  • 通常可以通过XML或者BPEL语言来表示

Enterprise Services: 企业级服务

  • 实现业务类服务所定义的相关功能
  • 主要依赖于应用级服务和架构级服务来满足业务需求

Application Services: 应用级服务

  • 细粒度服务,聚焦特定的应用上下文
  • 特定的用户接口界面可直接调用这些服务

Infrastructure Services: 基础架构级服务

  • 主要负责非功能性操作,比如:认证、授权、安全、日志等等
  • 可由应用级服务或者企业级服务直接调用。

微服务则减少了服务的分类,仅包含了两种类型服务

Functional Services: 功能性服务

  • 支持特定的业务操作
  • 服务聚焦对外服务,服务之间不共享

Infrastructure Services: 基础架构级服务

  • 和SOA一样,基础架构级服务侧重于审计、安全和日志类等基础类支持服务
  • 基础架构级服务并不对外开放

SOA MSA
遵循尽可能多的共享 仅可能少的共享
更多的强调业务功能的重用 侧重边界上下文:bounded context
遵从共同的标准和公约 侧重于协作,强调自治
服务之间采用ESB通信 简单消息系统
支持多种协议 更青睐于简单消息通信,比如:HTTP REST
多线程,阻塞IO,开销大 通常是单线程,事件驱动,非阻塞IO处理机制
最大化应用服务的可重用性 侧重解耦
通常使用传统的关系型数据库 除了传统的关系型数据库,更常见NO SQL等新型关系型数据库的运用
系统级的更改可能会导致整个系统的修改 系统级修改仅需构造新的服务来满足
DevOps/持续交付成为可能,但并非主流 着眼于DevOps/持续交付

SOA与微服务(MSA)主要区别总结

  • 服务粒度 :微服务强调的是服务功能的纯粹性和单一性,而对于SOA 来说,其服务组件可大可小,比如从很小的应用服务或者很大的企业级服务,比如在SOA中,我们用一个很大的产品或者子系统来表示一个服务

  • 组件共享:组件共享是SOA架构的核心原则,而MSA则通过边界上下文Bounded Context来尽可能的减少这种共享的可能性。边界上下文涉及到组件的耦合性以及组件内部的数据的独立性。SOA通常依赖于多个服务来满足实现业务需求,在这种场景下,SOA系统通常较之MSA响应慢

  • 中间件 vs API服务网关:MSA架构通常包含我们所熟知的服务网关,而SOA通常则包含消息中间件组件,消息中间件组件一般具备消息路由、协议转换等功能,而MSA的服务网关则主要扮演服务提供方与服务消费者的桥梁作用。

  • 远程服务调用:SOA主要依赖于AMQP, MSMQ,SOAP等服务访问协议,而MSA则主要依赖于 REST和JMS, MSMQ等简单消息协议

  • 异构的互操作性:SOA通过消息中间件组件使得多个不同协议的相互传递的成为可能,而SOA则简化了服务间的访问协议,如果你希望通过不同的协议来集成多个异构环境,你则需要考虑使用SOA架构,相反,如果你希望通过同样的协议来访问访问,那么MSA可能是一个更好的选择。

最后,总结一句,不能简单的来讲孰优孰劣,而是应该结合您当前正在构建的应用系统来综合考虑。SOA更适合大型、复杂的业务应用程序,比如应用需要许多异构环境的相互交互,换句话讲,相对较小的应用程序并不适合SOA,因为它们不需要消息传递中间件组件。而微服务则更适合较小的、业务分区良好的、基于WEB应用,在这些应用中,开发人员可以有更大的控制权。

原文链接:

https://www.edureka.co/blog/microservices-vs-soa/

Microservices vs SOA - 微服务与SOA相关推荐

  1. 单体 soa 微服务 区别_漫谈何时从单体架构迁移到微服务?

    面对微服务如火如荼的发展,很多人都在了解,学习希望能在自己的项目中帮得上忙,当你对微服务的庐山真面目有所了解后,接下来就是说服自己了,到底如何评估微服务,什么时候使用微服务,什么时间点最合适,需要哪些 ...

  2. Java程序员必经的实践之路:微服务与SOA架构

    而另一方面,微服务推崇执行的标准(例如HTTP)却是人们广泛了解并共同使用的.我们可以通过选择合适的语言或工具来构建某个组件微服务.SOA与微服务还有一个更大的区别:领域模型.在基于微服务的软件中,每 ...

  3. 微服务与SOA架构,java架构师视频九个阶段百度云

    面向服务的架构不太关心如何应用程序进行模块化构建,更多的是关于如何通过分布式.单独维护和部署的软件组件的集成来组成应用程序.这些通过技术和标准来实现,通过技术和标准使得组件能够更容易地通过网络进行通信 ...

  4. 微服务与SOA的实践应用对比

    关于微服务是什么,面向服务的体系结构(SOA)又是什么,两者之间有何关联真是众说纷纭.困惑颇多.很多人都加入了这场讨论,从ThoughtWorks的Martin Fowler到Cap Gemini的S ...

  5. 微服务和SOA有什么区别?读完你就懂了!

    微服务是新的SOA吗?人们还在谈论SOA吗?让我们来研究一下这两个架构之间的区别. 在深入探讨微服务和SOA之间的区别之前,让我先告诉您单片体系结构.SOA和微服务之间的基本区别: 用外行的话说,一个 ...

  6. 微服务和SOA架构的区别

    经常会有同学问,微服务和SOA架构有什么区别.这个区别一定要从架构的发展过程来了解.这两种架构模式,其实本质上应该是在分布式架构这条时间线上,基于服务化思想的不断完善,以及基础设施的逐步成熟之下的一种 ...

  7. 微服务、SOA 和 API对比与分析

    摘要: 对比微服务架构和面向服务的架构(SOA)是一个敏感的话题,常常引起激烈的争论.本文将介绍这些争论的起源,并分析如何以最佳方式解决它们.然后进一步查看这些概念如何与 API 管理概念结合使用,实 ...

  8. 在Spring Boot中实现相关ID(用于SOA /微服务中的分布式跟踪)

    上周参加了在Geecon上Sam Newman的微服务讨论后,我开始思考更多有关用于监视,报告和诊断的面向服务/微服务平台最可能的基本功能:相关ID. 关联ID允许在面向服务的复杂平台中进行分布式跟踪 ...

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

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

最新文章

  1. POJ - 3417 Network LCA+树上差分
  2. Excel如何批量将表中的0替换成空值?同时不能影响正常数字中包含的0
  3. Daily Scrum02 12.07
  4. 电子书下载 | 超实用!阿里售后专家的 K8s 问题排查案例合集
  5. JavaFX UI控件教程(二十五)之Color Picker
  6. 【qduoj - 夏季学期创新题】矩形剖分(递归,dp)
  7. 【软件质量】软件可移植性
  8. Finalize,Dispose,SuppressFinalize
  9. 【python简洁之道】-----1. 注释规则
  10. 指针 多维数组 数组指针 指针数组
  11. win10系统 计算机配置要求高吗,win10流畅配置要求有哪些
  12. 令牌环 典型例题分析解答
  13. python ks值计算_风控模型中的K-S理解以及python实现
  14. [转]Repeate分页
  15. 华为云服务器安装win10系统,云服务器安装win10
  16. 介绍一下Emily----大一
  17. [计算几何] (二维)圆与直线的交点
  18. switchport nonegotiate
  19. RGB色彩模型图像/像素深度
  20. 我国信创行业迅速发展,IT产业等领域有望实现国产化

热门文章

  1. B2117 整理药名
  2. 好用的富文本编辑器TinyMCE介绍及使用
  3. 批处理设置windows防火墙协议规则
  4. LabVIEW编程LabVIEW开发需要加班吗
  5. 最好用的ftp客户端:SecureFX for Mac
  6. 最新多屏群控技术---手机控制手机/苹果群控/IOS群控/实时同步操作群控功能讲解以及入门教程
  7. 微信小程序-人脸识别+输出人脸匹配信息
  8. Intellij idea Ultimate版本学生免费注册使用步骤以及Github学生包
  9. Gaussian 计算静电云图确定吸附位点
  10. Hermite Polynomials(厄米多项式)