微服务应该是可重用的吗?

Should Microservices be reusable?

微服务应该是可重用的吗? 对于可重用,我并不是说共享特定领域的模型。

我的意思是,为一个应用程序创建的微服务是否应该在另一个应用程序中重用? 如果它们可以在应用程序中重复使用就足够了吗?

解耦微服务的最佳方式是什么。 从我的角度来看,一旦一个微服务调用另一个微服务,它就会紧密耦合,这意味着它不能轻易地(未经修改)被提取并放入另一个没有它所引用的相同服务的微服务应用程序 to/from.

要解耦,我认为有以下几种方式:

  1. 微服务 A 需要通过
    与另一个微服务 B 通信 标准 合同例如。一个特定的协议。
  2. 另一个微服务 C 充当网关,向微服务 B 请求数据并将其作为输入传递给微服务 A。

nr 的具体示例。 2 将是:

耦合:

客户端 -> API 网关 -> UserProfileService -> 授权服务

解耦:

客户端 -> API 网关 -> 授权服务 -> API 网关 -> UserProfileService

我假设这一切都归结为微服务的目标是否正确?有没有对错之分?

我是否缺少任何其他解耦微服务的策略?

我认为您可能得到的回复代表的是意见而不是答案,但我会继续说出我的看法!

关于微服务的文献早就说过,"decouple, decouple, decouple",但坦率地说,我认为这不是现实。当有人创建了一个有用的 API 来增强您自己的功能(想到身份验证、支付,显然还有数据库)时,建议这些需要 运行 与您的功能并驾齐驱是错误的吗?大多数人不会通过复杂的、充满逻辑的网关来通过 Stripe 付款或通过 Twilio 发送短信,那么为什么私人托管的 API 会有什么不同?

将您自己的服务设计为可重用且易于 consumable/deployable 的组件非常棒。这不应该意味着它不能有依赖关系,而是我们应该注意那些依赖关系引入的膨胀。这种正念是开发人员在引入依赖项时应该练习的东西,无论它们是应用程序包还是依赖项 services/APIs.

**披露:我和 运行 构建了 framework/platform、Architect.io,以帮助云原生团队协作并相互构建服务。我亲眼目睹了像 Facebook 这样的公司如何使用类似的策略来实现服务的重用和消费,并希望为一般 public.

构建一个微服务依赖解析器

这完全取决于您正在构建的微服务。例如;假设您正在构建电子邮件通知服务。这可以被不同的应用程序重用。另一个例子说你正在构建一个推荐系统。它对单个应用程序非常具体。以可以在不同应用程序中重复使用的方式设计它几乎没有意义。

根据上下文选择。没有正确的方法。这完全取决于应用程序。