OSGi 服务和 REST 微服务的区别
Difference between OSGi services and REST microservices
OSGi 谈论微服务,媒体谈论微服务。但是,它们似乎并不相同。这些微服务有什么区别。
我不认为你在这里比较苹果。 OSGI
是一个 应用程序 架构,而 microservices
是一个 分布式系统 概念。
根据我的经验,微服务有很多好处:
- 单个微服务易于部署、测试和维护。
- 微服务与语言无关。这意味着您可以在 python 中编写一个微服务,在 javascript 中编写另一个,在 go 中编写第三个,在 java.
中编写另一个。
- 微服务易于单独扩展。这意味着如果一种类型的请求比其他类型的请求更频繁,您可以扩展您需要的微服务,而无需扩展系统中的任何其他内容。
- 您系统中的每个微服务都拥有自己的数据。这确保了清晰的界限和关注点的分离。
但是,它们也有一些缺点:
- 部署时存在更多基础设施问题。
- 很难保持微服务之间的消息传递干净高效。
- 在具有许多活动部件的系统上进行 end-to-end 测试更加困难。
- 消息传递的开销更大。对另一个服务的调用不是直接方法调用,而是需要使用 HTTP 或其他某种形式的网络通信。
有一篇很好的文章描述了一些差异here。
OSGi 和微服务共享相同的架构风格,但 粒度 不同。我们实际上曾经将 OSGi 服务称为微服务,直到网络窃取了该名称。我们现在有时称它们为 nanoservices。
(micro|nano)服务的原理是通过gate隧道模块之间的通信,具有明确的API。由于 API 是或至少应该是独立于实现的,因此您可以更改一个模块而不影响其他模块。最重要的好处之一是,即使是大型系统的设计在查看服务图时也可以保持易于理解。在某种程度上,基于服务的设计抓住了系统的本质,为模块留下了细节。
对于 web/micro 服务,gate 是一个通信端点(例如主机:端口)和协议(例如 REST)。 API 是非正式定义的,或者用 Swagger/OpenAPI 或 SOAP 之类的东西定义的。
OSGi 将 (nano) 服务定义为可供其他模块(捆绑包)使用的对象。 Java用于定义API.
由于 nanoservices 是 OSGi 最重要的设计原语,因此有很多支持可以使它们易于使用。有趣的是,由于服务注册表是动态的和反射的,因此将纳米服务映射到微服务非常简单,反之亦然。 OSGi 联盟在其 分布式 OSGi、"Remote Service Admin" 模型中对此进行了标准化。此规范允许您采用 OSGi 纳米服务并将其映射到 REST、SOAP 或其他协议。
因此,选择 OSGi 不仅可以让您推迟支持微服务的决定,还可以让您事后向系统添加微服务。为最基本的功能和最高级别的功能采用统一的架构风格,使系统更易于理解和扩展。
OSGi 谈论微服务,媒体谈论微服务。但是,它们似乎并不相同。这些微服务有什么区别。
我不认为你在这里比较苹果。 OSGI
是一个 应用程序 架构,而 microservices
是一个 分布式系统 概念。
根据我的经验,微服务有很多好处:
- 单个微服务易于部署、测试和维护。
- 微服务与语言无关。这意味着您可以在 python 中编写一个微服务,在 javascript 中编写另一个,在 go 中编写第三个,在 java. 中编写另一个。
- 微服务易于单独扩展。这意味着如果一种类型的请求比其他类型的请求更频繁,您可以扩展您需要的微服务,而无需扩展系统中的任何其他内容。
- 您系统中的每个微服务都拥有自己的数据。这确保了清晰的界限和关注点的分离。
但是,它们也有一些缺点:
- 部署时存在更多基础设施问题。
- 很难保持微服务之间的消息传递干净高效。
- 在具有许多活动部件的系统上进行 end-to-end 测试更加困难。
- 消息传递的开销更大。对另一个服务的调用不是直接方法调用,而是需要使用 HTTP 或其他某种形式的网络通信。
有一篇很好的文章描述了一些差异here。
OSGi 和微服务共享相同的架构风格,但 粒度 不同。我们实际上曾经将 OSGi 服务称为微服务,直到网络窃取了该名称。我们现在有时称它们为 nanoservices。
(micro|nano)服务的原理是通过gate隧道模块之间的通信,具有明确的API。由于 API 是或至少应该是独立于实现的,因此您可以更改一个模块而不影响其他模块。最重要的好处之一是,即使是大型系统的设计在查看服务图时也可以保持易于理解。在某种程度上,基于服务的设计抓住了系统的本质,为模块留下了细节。
对于 web/micro 服务,gate 是一个通信端点(例如主机:端口)和协议(例如 REST)。 API 是非正式定义的,或者用 Swagger/OpenAPI 或 SOAP 之类的东西定义的。
OSGi 将 (nano) 服务定义为可供其他模块(捆绑包)使用的对象。 Java用于定义API.
由于 nanoservices 是 OSGi 最重要的设计原语,因此有很多支持可以使它们易于使用。有趣的是,由于服务注册表是动态的和反射的,因此将纳米服务映射到微服务非常简单,反之亦然。 OSGi 联盟在其 分布式 OSGi、"Remote Service Admin" 模型中对此进行了标准化。此规范允许您采用 OSGi 纳米服务并将其映射到 REST、SOAP 或其他协议。
因此,选择 OSGi 不仅可以让您推迟支持微服务的决定,还可以让您事后向系统添加微服务。为最基本的功能和最高级别的功能采用统一的架构风格,使系统更易于理解和扩展。