微服务是新的SOA吗?人们还在谈论SOA吗?让我们来研究一下这两个架构之间的区别。

在深入探讨微服务和SOA之间的区别之前,让我先告诉您单片体系结构、SOA和微服务之间的基本区别:

用外行的话说,一个整体类似于一个 大容器 ,其中应用程序的所有软件组件都被组装在一起并紧密打包。

面向服务的体系结构本质上是 服务的集合 。这些服务相互通信。通信可以涉及简单的数据传递,也可以涉及协调某些活动的两个或多个服务。需要一些将服务相互连接的方法。

微服务,又名微服务架构,是一种架构风格,它将应用程序构造为围绕业务领域建模的小型自治服务的集合。

微服务 vs SOA

当比较微服务和SOA时,它们都依赖于服务作为主要组件,但是它们在服务特性方面有很大的不同。

面向服务的体系结构

SOA定义了四种基本服务类型,如下所示:

Business Services:

  • 定义核心业务操作的粗粒度服务。
  • 通过XML、业务流程执行语言(BPEL)等表示。

Enterprise Services:

  • 实现业务服务定义的功能。
  • 主要依靠应用服务和基础设施服务来满足业务需求。

Application Services:

  • 仅限于特定应用程序上下文的细粒度服务。
  • 专用用户界面可以直接调用服务。

Infrastructure Services:

  • 实现非功能性任务,如身份验证、审核、安全性和日志记录。
  • 可以从应用程序服务或企业服务调用。

微服务具有有限的服务分类。它们由两种服务类型组成,如下所示。

功能服务:

  • 支持特定的业务操作。
  • 服务的访问是在外部完成的,这些服务不与其他服务共享。
  • 与SOA一样,基础设施服务实现审核、安全和日志记录等任务。
  • 在这种情况下,这些服务不会对外公布。

SOA和微服务架构的主要区别

SOAMSA(微服务)
遵循“尽可能多地共享”架构方法遵循“尽可能少地共享”架构方法
重要性在于业务功能重用重要性在于“有界上下文”的概念
他们有共同的治理和标准他们注重人、合作和其他选择的自由
使用企业服务总线(Enterprise Service bus,ESB)进行通信简单消息传递系统
它们支持多种消息协议使用轻量级协议,如HTTP/REST等
具有更多开销的多线程来处理I/O单线程通常使用事件循环特性来进行非锁定I/O处理
最大限度地提高应用程序服务的可重用性重点在于解耦
传统的关系数据库更常用现代的关系数据库更常用
一个系统性的改变需要修改整体一个系统性的改变是创造一个新的服务
DevOps/Continuous Delivery正在变得流行,但还没有成为主流人们强烈关注DevOps/Continuous Delivery

微服务和SOA在细节上的主要区别

1. 服务粒度 :microservices体系结构中的服务组件通常是 单用途 的服务,它们可以非常非常好地完成一件事情。使用SOA,服务组件的大小可以从小型应用程序服务到非常大型的企业服务。事实上,在SOA中有一个由大型产品甚至子系统表示的服务组件是很常见的。

2. 组件共享 :组件共享是SOA的核心原则之一。事实上,组件共享是企业服务的全部内容。SOA增强了组件共享,而MSA则试图通过 bounded context(有界上下文 )来最小化共享。有界上下文是指组件与其数据作为一个具有最小依赖性的单个单元的耦合。由于SOA依赖于多个服务来满足业务请求,因此基于SOA构建的系统可能比MSA慢。

3. 中间件 vs API层 :microservices架构模式通常有一个API层,而SOA有一个消息中间件组件。SOA中的消息传递中间件提供了MSA(Micro Service Architecture)中没有的许多附加功能,包括中介和路由、消息增强、消息和协议转换。MSA在服务和服务使用者之间有一个API层。

4. 远程服务 :SOA架构依赖于消息传递( AMQP 、 MSMQ )和 SOAP 作为主要的远程访问协议。大多数MSA依赖于两种协议:REST和简单消息传递( JMS 、 MSMQ ),MSA中的协议通常是同构的。

5. 异构互操作性 :SOA通过其消息中间件组件促进多种异构协议的传播。MSA试图通过减少集成选择的数量来简化体系结构模式。如果您想在异构环境中集成使用不同协议的多个系统,您需要考虑SOA。如果您的所有服务都可以通过相同的远程访问协议公开和访问,那么MSA是更好的选择。

最后,我要说的是,判断哪种体系结构比另一种更好并不是那么简单。这主要取决于您正在构建的应用程序的用途。 SOA更适合于需要与许多异构应用程序集成的大型复杂业务应用程序环境; 较小的应用程序不适合SOA ,因为它们不需要消息传递中间件组件。另一方面, 微服务更适合于更小的、分区良好的、基于web的系统 ,在这些系统中,作为开发人员,微服务给了您更大的控制权。结论是,由于它们都具有不同的体系结构特征,所以这主要取决于所构建的应用程序的用途。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐