我理解的是,在SOA和微服务中,模块都应该是独立和可重用的。但是,究竟有什么区别呢?
两者都以服务为主要组件,但存在许多差异。以下是一些例子:
SOA:
微服务:
我倾向于同意Chris Richardson[1]的定义。
SOA和微服务分歧的三个主要领域:
进程间通信
SOA:
Smart pipes eg. ESB
Protocols - SOAP, WS*
Micro service:
Dumb pipes eg. Message broker
Protocols eg. REST, gRPC
数据库
SOA:
Shared databases
Micro Service:
Databases per service
在面向服务的体系结构(SOA)中,服务往往是单块的,而在微服务中则是小型的。[1]: https://microservices.io/index.html
SOA和微服务有很多共同点,乍一看,似乎后者只是SOA已经描述过的一个新的炒作词汇。然而,两者之间还是存在一些差异。
什么是微服务?
首先让我们看看什么是微服务。虽然没有关于微服务的通用定义,但微服务的定义中有几个常见的特征,包括:
什么是面向服务的架构(SOA)?
SOA是面向服务的架构,是一种软件架构风格,其中提供通用服务给同一架构中的其他组件,这些组件根据共享的通用服务提供更复杂的服务。最终类似于公司的共享服务中心。它们之间的区别(来自实际生产项目)在于SOA项目具有ESB(如Mule ESB、Camel或其他),旨在将消息(SOAP、JSON等)从一个服务路由到另一个服务,并充当服务之间的中介层。服务反过来不知道彼此,只是从ESB发送/接收消息。
与SOA相反,微服务架构意味着服务将直接使用某种协议(通常是HTTP)进行通信。 微服务与SOA类似,我们专注于业务功能并将其分成单个、小型可部署块。