微服务与SOA的区别

11
我在寻找服务导向架构(SOA)和微服务体系结构之间的差异,并找到了一个好的链接:https://www.infoq.com/articles/boot-microservices
它说:
作为“服务导向架构”(SOA)的继承者,微服务可以归类为同一类“分布式系统”,并延续了许多SOA的概念和实践。然而,它们的不同之处在于赋予每个单独服务的责任范围。在SOA中,一个服务可能负责处理广泛的功能和数据领域,而微服务的一般准则是它负责管理单个数据领域及其相关功能。
请帮助我理解:
单一数据领域的含义(建议用于微服务)是什么?这是否意味着必须建立单独的微服务来管理单个领域/实体(以及与此单个领域/实体相关/组合的领域/实体)?如果是这种情况,则即使要实现基本的功能(企业应用程序),也需要许多(约20至50个)微服务。
编辑: 我已经阅读了微服务架构和SOA之间的区别,但它解释说,在前两个原则上是相同的,在第三点上不同(在SOA中,服务共享模式和合同,而不是类),但那是SOAP合同,那么SOA(使用REST)与微服务之间有什么区别(微服务大多数情况下使用REST)?
6个回答

6

在Sean所说的基础上,微服务是人们在SOA开始被许多公司使用时开始称呼API的名称。领域驱动设计的兴起也导致了该术语的使用增加。目前在行业中,两者之间绝对没有区别,人们称其为适当的。

当您遵循原则时,您说的正确,您最终会得到许多微服务。在我看来,无论是SOA还是微服务,将抽象转化为独立服务应仅取决于用例,服务将如何部署以及有多少团队将同时处理这些服务。如果服务跨主机部署则会增加网络带宽成本(虽然容器和DC/OS框架现在正在解决此问题)。如果是快速变化的服务,并且有许多组成部分,则将大型服务拆分为微服务将有意义。否则,我会避免过早优化,将功能打包到单个(或几个大型)服务中。


ROA和微服务有什么区别? - sakeesh

3

我认为这是一种解释方式:

我认为在SOA中,服务不是一个物理进程(Windows服务/应用程序域),而是一个逻辑边界……在SOA和微服务中,最小自治组件都遵循相同的规则。它们拥有技术授权和数据所有者的意义,也就是说,它们是唯一可以更改一组或多组域属性/字段状态的组件。

现在,在运行时,如果您不需要分发进程,则可以将它们全部部署在同一个进程中(当您需要扩展时,分发您的组件以实现更好的性能)……

有道理吗?


3

我发现了一篇由微软提供的好的解释:

微服务源自于面向服务的架构(SOA),但是SOA与微服务架构不同。在SOA中,大型中央代理、组织级别的中央编排器和企业服务总线(ESB)等特性是典型的。但在大多数情况下,这些都是微服务社区中的反模式。实际上,有人认为“微服务架构是正确执行的SOA。”


2
关于您关于“域”的问题,我认为这是微服务的一个主要特征:微服务应该管理自己的功能域和数据模型。
比如说,在您的公司中有一个产品目录应用程序。您可能不希望许多其他应用程序命中目录持久层并抽象(再次)目录模型,因为这将使模型重构/演化变得困难。可能会导致这些应用程序之间的并发问题,从而防止目录应用程序被扩展。相反,您可能更愿意维护单个目录应用程序,该应用程序将公开由其他应用程序使用的Web服务API(例如REST端点)。
我在这个相关问题中读到了这个评论:“Microservices = SOA - ESB”。确实,ESB与这种微服务特性不兼容:“智能端点和哑点”,这意味着当微服务需要另一个微服务作为依赖项时,它应该直接使用它,而无需任何路由逻辑/组件来处理管道。
最后,您可以查看这个备忘单,基于Martin Fowler对微服务视频的介绍。

1
SOA与微服务不同。 SOA基于特性,需要消息服务中间件来实现组件之间的交互。为了让您省去冗长的理论,让我用最近使用过的一些软件作为示例。
我最近使用过金融解决方案。该解决方案分为两个子解决方案,它们相互通信。
第一个称为Fusion Banking Trade Innovation(FBTI),而另一个称为Fusion Banking Corporate Channel(FBCC)。这些解决方案由不同团队开发,并作为不同的解决方案出售,但作为单个解决方案配合使用。没有FBTI,不能使用FBCC。 FBCC是客户交互的界面,而FBTI是银行与之交互的管理仪表板。
通过像IBM Message queue(MQ)这样的消息服务中间件实现两个功能之间的通信。 FBCC将消息发送到队列中,然后被FBTI拾取,这就是它们的通信渠道。

enter image description here

另一方面,微服务是基于任务的。组件之间的交互是通过Web服务实现的。我将使用一种名为Prestashop电子商务解决方案的解决方案作为示例。

当您下载Prestashop时,所有功能都被分成单独的模块,例如,如果您想更改主页的横幅,则有一个模块可用。导航栏的模块与页脚的模块不同。该解决方案有300多个模块。还有像管理产品、类别、购物车等模块。请参见下图 enter image description here

这种解决方案的模块化特性为其他Prestashop合作伙伴提供了一个平台,可以开发不同的模块,以替换Prestashop中的默认模块,即您可以从合作伙伴那里购买另一个模块来替换默认模块,如购物车、运费计算器等。

总之,SOA概念主要用于两个或多个解决方案之间的交互,而微服务概念用于解决方案内部两个或多个任务之间的交互。


0

SOA服务是关于服务级别的组件化。

微服务是关于服务级别的功能组合。

它们是针对不同问题的两种不同解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接