面向服务的架构与微服务

Service oriented architecture vs Microservices

?我看了很多文章,还是搞不懂SOA vs Microservices。我仍然认为两者是一样的。 谁能帮我举个例子或用外行的术语。

我想 SOA 对不同的人意味着不同的东西,所以很难说出微服务和面向服务的架构之间的所有差异对我们所有人来说都是正确的,所以我会说出我的理解两种方法。

SOA

首先:在的理解中,SOA是一种软件架构风格(Service-oriented Architecture)。

SOA 适用于需要集成不同应用程序(例如:人力资源、计费、物流...)的企业环境。此集成必须通过使用 service interfaces 进行 - 这就是它面向服务的原因。

由于这些服务接口使用通用的通信标准,SOA可以促进应用程序之间的解耦,使开发更简单、更快速。 SOA 没有定义在集成系统时使用哪种协议,但最常见的可能是通过 HTTP 请求和消息传递。此外,它没有定义它是否必须是同步或异步服务接口,您可以使用同步、异步甚至两者。

有一些架构模式可以帮助企业实施 SOA 生态系统,但最常见的是 ESB - 企业服务总线。市场上有一些大公司拥有实现这种模式的产品,例如:Oracle 的 Oracle Service Bus、IBM 的 IBM Integration Bus(Oracle 有一系列产品专注于面向服务的架构,称为 Oracle SOA Suite)。

总结:SOA 是一个企业范围的概念,它使现有应用程序能够通过松散耦合的接口相互通信,该接口可以使用多种协议、消息传递、同步和异步接口,以便一个应用程序可以公开其功能以在其他应用程序中重用。

微服务

微服务是一种架构风格,旨在将应用程序开发为一套小型独立服务。

看到了吗?它说必须将一个应用程序开发为一套小型服务。

这种方法有什么好处?嗯:

  1. 因为它们很小,所以更易于维护
  2. 它们是松散耦合的(当然,这取决于你如何设计你的生态系统)
  3. 它们可以独立部署,这意味着您可以扩展应用程序的一部分而无需扩展另一部分。

当然,也有一些缺点,所以不要相信有人说每个应用程序都应该以这种架构风格开发:分布式系统增加了复杂性(!!!)

微服务架构风格没有定义微服务如何相互交互。它可以像 SOA 一样,通过 HTTP 请求、消息传递、文件等。此外,它没有定义一个应用程序(不要与微服务混淆)如何与另一个应用程序交互——为此,我们可以研究企业范围SOA.

阐明这些语句在微服务架构中的含义:

  • 应用程序 - 一套小型、独立、松耦合的服务
  • 微服务 - 套件的一个服务

差异

虽然 SOA 是一个企业范围的概念,旨在通过松散耦合的服务接口将应用程序相互集成,但微服务是一个应用程序范围的概念,旨在将一个应用程序开发为一组小服务。

这是我对这两个概念的看法,当然,可能存在分歧

在 Microsoft 和 IBM 介入之前,微服务就是 SOA 的本意,并且在 SOAP(这很糟糕)和 XML(这很糟糕)和 UDDI(更糟糕)使它变得面目全非之前) 和 UML(这是不必要的)。真正的区别在于实现,而不是概念。

"plus ça change plus c'est la même chose"

一个很大的区别是 'ESB','Enterprise Service Bus' 基本上是一个跨越整个组织的消息传递系统。我们仍然使用这个概念,但现在我们称它为 Kafka 并且它可以正常工作*。

如今,微服务主要服务于基于 REST 的 API,因为事件驱动架构已经演变为 DDD,尽管需要,但对于大多数 PHP 和 Python 程序员来说,这太难理解了在所有重要的应用程序中**

SOA 和微服务之间的另一个主要区别是 SOA 是标准驱动的,而微服务的定义相当模糊。这不是批评,这是一个特点。正因为如此,PHP 程序员尽管没有有用的技能,但仍有可能显得相关。

最后的区别就是侧重点。 SOA 侧重于接口,而微服务侧重于 'micro' 位——将单体巨型结构分解为更小、更易于管理的组件。在很多方面,微服务比大多数 OO 语言更接近纯 OO - 特别是如果你有一个非平凡的应用程序(即,使用事件源而不是 REST APIs 的应用程序***)。

  • * 其他消息系统仍然存在,差不多,但主要是 Kafka
  • ** 如果您没有使用它,那是因为您的应用程序很普通,而不是因为您有一个不需要它的非普通应用程序。
  • *** 事件溯源并不排除使用 REST,您始终可以使用通过队列调用您的服务的事件处理程序来使您的服务适应事件总线。但是你会越来越接近旧的 SOA 模型。