独立(微)服务是否悖论?

时间:2019-06-08 03:35:59

标签: rest web-services service architecture microservices

关于微服务的想法:

  • 微服务应在功能上相互独立
  • 微服务应专门在自己拥有的域中从事一些有用的工作
  • 微服务旨在相互通信

我发现这些想法是矛盾的。

让我给出一个假设的业务场景。

我需要一个执行工作流程的服务,该工作流程需要执行自动翻译步骤。

我的公司提供自动翻译服务。有一个RESTful API,可以在其中发布源语言,目标语言和文本,并返回翻译。这是有用的独立服务的完美示例。它是可重用的,并且完全不了解其消费者。

我的企业需要的工作流程服务应利用该服务吗?如果是这样,则我的服务对另一个服务具有“依赖性”。

如果您将此推理推向极致,那么世界上的每个服务都将拥有世界上的所有功能。

现在,我知道您在考虑我们可以通过从请求响应(REST)转移到消息传递来打破这种依赖性。我的服务发布翻译请求消息。翻译完成后,翻译响应消息就会发布,并且我的服务会使用此消息。好的,但是我的服务必须冻结工作流程并在消息到达时继续。即使等待是真正的异步等待,它仍在“等待”(例如,工作流状态持续存在,并且转换消息在一天后到达)。这只是一个延迟的请求-响应。

1 个答案:

答案 0 :(得分:1)

对我个人而言,“ 独立”是一种适用于多个维度的品质。从运行时的角度来看,它可能并不独立,但可以独立于开发部署操作可扩展性观点。

例如,翻译服务可以由另一个团队独立开发,部署和运营。同时,他们可以根据他们的需求,独立于您的业务工作流服务扩展翻译服务。并且您可以根据自己的需求扩展业务工作流服务(当然,下游依赖性在这里发挥了作用,但这又是另一个主题)