SOA和微服务之间的真正区别是什么


10

免责声明

我希望我不要踩任何人的脚趾或冒犯任何一个概念的狂热者

背景

我一直在寻找面向服务的体系结构和微服务之间的真正区别,而没有找到明确的答案。

我读到以下内容:

  • SOA的副作用
  • SOA是反模式
  • 微服务来修复SOA的故障
  • ESB并不是真正的ESB,而是EAI
  • 对消息中介的过度依赖
  • 供应商正在滥用SOA的概念并试图出售其产品
  • SOA不受控制地增长

但是,仍然没有明确定义面向服务的体系结构(作为一个概念)和微服务(作为一个概念)之间的体系结构差异

据我了解,它们都具有:

  • 服务提供商,只做一件事
  • 服务网关/ ESB将这些服务提供给消费者
  • 服务使用者,通过ESB /服务网关访问服务

那么,除了将SOA重新标记为微服务之外,还有什么不同吗?限制微服务成为宏的技术约束吗?

注意:我不是在寻找观点,只是在寻找事实,希望在要点中

参考文献

更新资料

似乎在Stack溢出问题中也发生了类似的辩论,无论是否区分微服务都是变相的面向服务架构。

SO问题的结论:

  • MS是SOA 的特例
  • MS支持较小规模的应用程序托管服务
  • MS取决于技术(使用HTTP而非开放协议选项)
  • MS依靠技术来加强纪律(服务的自动部署)
  • MS考虑使用ESB(邪恶),但使用API​​网关,IMHO是ESB的一种

如果满足以下条件,那么可以得出结论,MS是SOA:

  • MS是否支持编排概念?一个或多个主流程管理工作流程
  • MS中是否有消息代理层?一组适配器,将消息格式从服务生产者的消息空间转换为服务使用者
  • 微服务可以从整体企业应用程序读取数据吗?可以是单片应用程序的API吗?还是必须是能够独立运行的独立的自包含应用程序?

如果最后一个问题的答案为否,那么微服务将无法处理复杂的工作流程系统,例如信用卡管理系统或对帐系统


如今,分布式计算的方式是小型的,松散耦合的,分散的,容错的“代理”或“模块”,它们具有明确的特定职责,并通过简单,直接的通信协议连接在一起。SOA与所有这些相反。您正在观察表面相似之处的阴谋,而忽视差异之山。
罗伯特·哈维

1
SOA是否也应该实现小的松耦合组件?我知道在SOA的后端,是多功能的应用中,主要是描述为“最佳”到其他的应用程序和其他应用程序的使用服务提供服务,使用任何消息格式,协议,适用于它的媒体接入
甲.Rashad

它应该,但是正如您刚刚指出的那样,通常不是。
罗伯特·哈维

Martin Fowler's Site (I think he hates it big time)当我去巴塞罗那参加他的演讲时,那不是我的感觉。他知道折衷方案,以及人们如何盲目地转移到此体系结构,而没有考虑到MS并不适合每个人。
2015年

1
微服务是一堆营销。没有区别。人们在几年前就在这样做,现在有人给它起了个名字,现在又有了新的名字。您是正确的,MS是SOA的(非特殊)情况。请停止尝试从中做出一些事情。
凯尔·约翰逊

Answers:


12

服务提供商,只做一件事

对该项目产生广泛影响的核心区别在于,通过微服务,这些服务提供商可以独立部署和扩展

这很棒,因为您可以更加敏捷。如果一项服务需要更改,则只需更改一项,而无需更改。如果您想尝试一种新的框架或语言,只需替换该服务即可。如果您突然需要100倍的容量,请启动一些具有该服务的新计算机来处理大量流量。如果您想对某些东西进行版本控制,只需对它进行版本控制就不会影响整个应用。而且它使事情变得更容易监视,检测,在团队之间分散,过时了...

但这带来了一些健康的含义:

  • 您的发布过程需要更改,因为部署一些服务与部署几十个服务的方式有所不同。
  • 您的发布过程需要更改,因为将服务部署到一台计算机与部署到几十台计算机的方式有所不同。
  • 您的数据库设计,使用和部署需要更改,因为如果服务需要部署此大型共享数据库才能正常工作(破坏所有其他服务),则部署服务就毫无意义。
  • 您需要更改库的设计和使用方式,因为如果需要更新此共享库(破坏所有其他服务),则部署服务就毫无意义。
  • 您的日志记录/授权/会话管理/等需要更改,因为当您只是一项服务时,共享内容非常容易,但是当您拥有一堆组成产品的独立的小服务时,它们就很不一样了,并且它们想分享东西。哦,所有这些共享的东西都可能需要处理不同版本的东西。
  • 您的交流需要改变。只需很少的服务,您就可以沿着不经常发生和/或可能发生缓慢通信的路线破坏事物。借助微服务,他们将互相交流很多,而高延迟不会减少这种情况。

1
出于所有这些原因,我将微服务视为解决特定问题(通过分布式计算进行扩展)的特定解决方案,而不是将其视为整体应用程序体系结构。
罗伯特·哈维,

1
恩,它们产生了足够广泛的影响,我认为应该将它们视为具有可伸缩性/分布式计算的应用程序架构(需要权衡其复杂性和其他缺点)。
Telastyn

1
因此,从体系结构的角度来看,微服务是做一件事情的独立微系统,而SOA是具有向消费者提供多种服务的单片应用程序?
拉希德(A.Rashad)'17年

1
我现在更困惑了!整体应用程序是否可以公开微服务?还是必须是独立的微型应用程序?
拉希德(A.Rashad)'17年

1
看看DZone Microservices vs SOA中的这篇文章。
2015年

2

这里是底线之间的一个明显区别SOA微服务是概念

智能终端哑管

SOA不同,SOA依赖于遗忘的服务使用者和生产者,将流量管理,消息格式转换和服务编排委派给外部系统,例如ESB,服务编排器,消息代理。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.