微服务架构和SOA的区别

我一直在阅读微服务架构,我试图看到它和常规SOA(除了个别部署的服务之外)之间的区别。 任何人都可以告诉我的差异,也许是微服务架构的亲和骗局?

我想你可以把微服务架构风格看作是SOA的专业化。 不要忘记,一个被接受的观点是,所有的SOA真的是四个句子:

  • 边界是明确的
  • 服务是自治的
  • 服务共享架构和合同,而不是类
  • 服务兼容性基于策略

    –Don Box,微软(前.Net 3.0)

这给我们带来了来自Lewis / Fowler 的微服务的标准定义 :

简而言之,微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。 这些服务是围绕业务function构build的,可以通过全自动部署机制独立部署。 这些服务的集中pipe理最less,可以用不同的编程语言编写,并使用不同的数据存储技术。

从这个定义可以明显看出,微服务至less实现了前两个原则(真正强调第二个原则),但是他们是否完成了第三个(我并不真正理解tenet 4,所以我不会评论)是值得怀疑的。

第三条原则可能不适用于微服务的原因是,微服务的特点之一是它们通常暴露在RESTful API之上,可以说,根本不暴露契约和模式(除了常规的HTTP )我们从福勒看到:

一套小型服务,每个小型服务都与轻量级机制(通常是HTTP资源API)进行通信

微服务风格偏离SOA的另一种方式是使用这个规定:

这些服务…可以通过全自动部署机制独立部署

遵循SOA的原则并不妨碍我将我的服务二进制文件手动复制到我的生产环境中,但是通过微服务方法,服务部署和pipe理应该完全自动化。

SOA和微服务的核心区别在于规模和范围。 正如“微”一词所暗示的那样,它必须比SOA往往要小得多。 微服务是一个小的(呃)可独立部署的单元。 当心非常小的微服务反模式 – nanoservice。 SOA可以是一个庞然大物,也可以是多个微服务。 Martin Fowler说他喜欢把SOA看作微服务的超集。

在这里输入图像说明

马丁福勒: https : //youtu.be/2yko4TbC8cI? t = 15m53s

编辑:这是Martin Fowler的另一个video,谈论微服务和SOA之间的区别。 https://youtu.be/wgdBVIX9ifA?t=13m10s

微服务这个术语强调服务的规模,大多数从业者发现这一点相当不幸。 斯蒂芬·蒂尔科夫 ( Stefan Tilkov)认为,你应该从整体应用开始,并明确如何明智地分割。 Sam Newman的演讲强调,你应该根据有界上下文的DDD概念推导出你的微服务

您可能会觉得这很有趣: “build立微服务”

直接从甲骨文的职位 ,关于SOA和微服务之间的区别,简要说明差异可以概括为Torsten Winterberg(Oracle ACE总监)的话:

微服务是我们在过去十年中一直在谈论的那种SOA。 微服务必须是可独立部署的,而SOA服务通常是在部署整体中实现的。 经典的SOA是更多的平台驱动,所以微服务提供更多的select在所有方面。

所以,SOA是应用程序组件向其他组件提供服务的体系结构模式。 但是,在SOA中,这些组件可以属于同一个应用程序 。 另一方面,在微服务中,这些组件是可独立部署的服务套件

微服务是由DevOps实践驱动的SOA架构专业化。 单独部署的服务使得应用持续集成/持续部署变得更加容易

没有区别。 使用的大小或部署方法不是用SOA指定的。 当某些正常的架构决策被制定时,微服务是一种SOA模式。 决定包括服务的粒度和部署/运营方式。 在Martin Fowler为过去常规的SOA架构创build了一个新名称之前,人们曾经在SOA中做出这些决定。 事实上,Sun在2000年将服务定义为“自治”,并且是独立pipe理的。 所以微服务不是新的,只是一个新的营销术语来创造新的咨询收入。 是的,大型软件供应商使用过度膨胀的产品创build了单一的方法,这从来没有代表SOA的原则。 就像将服务的名称改为API,其全部是关于市场营销。

坦率地说,在花了十多年的时间编写面向服务的体系结构之后,我没有看到真正的概念差异。 在我看来,服务的概念(和效用)一直是primefaces的。 通过编写primefaces服务,您允许更大macros服务的“组合”,然后允许您将它们编排成某种业务stream程。

原始的SOA处方中没有任何东西阻止用不同的编程语言编写服务,并允许通过契约接口进行交互。 原始的SOA处方中也没有任何东西阻止人们相互独立地部署他们的服务。 是select在一个Tomcat进程下部署所有服务,还是将它们分解为单独的Tomcat / Nginx进程,并将它们部署到群集中的不同节点上,这只是语义问题。 所以从根本上说,我个人觉得SOA和微服务没有区别。 坦率地说,创造一个新的术语并不是一个发明。

简而言之,微服务可以被认为是在web服务器上独立运行的web服务。
一些主要function如下:

  1. 独立于其他Web服务运行,帮助解耦大型应用程序。
  2. 与其他微服务进行沟通。

所以微服务是:

  1. 较小的问题域。
  2. 自行构build和部署,自行运行。
  3. 运行在自己的过程中。
  4. 通过众所周知的接口进行集成。
  5. 拥有自己的数据存储。

SOA和微服务之间的区别也取决于你对SOA的看法。 对于一些人来说,微服务和他们已经在做的SOA是一样的。 微服务通常被看作是SOA所使用的子集。

Martin Fowler在此提供有关这些差异的帮助概述: https : //www.youtube.com/watch?v = wgdBVIX9ifA