我应该在微服务之间共享我的库吗?

Posted

技术标签:

【中文标题】我应该在微服务之间共享我的库吗?【英文标题】:Should I share my library between Microservices? 【发布时间】:2020-10-22 03:43:11 【问题描述】:

我获得了第一次使用微服务的经验,在做出重要决定时需要帮助。

例子:我们有

CustomerService(包含 CustomerDTO) InvoiceService(包含 CustomerDTO、InvoiceDTO) PrintService(包含 CustomerDTO、InvoiceDTO)

如你所见,我这里有大量的代码重复,每次修改 CustomerDTO 时,我都需要在 3 个不同的微服务中进行。

我的潜在解决方案是将重复的类排除到库中,并在微服务之间共享该库。但在我看来,这会破坏微服务方式。

那么,处理我的问题的正确方法是什么?

【问题讨论】:

【参考方案1】:

与大多数事情一样,没有单一的正确方法可以解决这个问题。根据您的具体情况,每种方法各有利弊。

这可能是您的主要选择

    创建一个新的公共服务:

    如果您的逻辑足够复杂,那么您有许多服务需要此逻辑,并且您有时间可以考虑创建一个通用服务来满足此需求。这可能不是一项小任务,因为您现在必须创建更多需要管理/部署/扩展的服务

    只接受重复:

    这可能看起来违反直觉,但是如果逻辑足够小,最好只复制它而不是将微服务与库耦合

    创建库

    现实生活与教科书不同。我们经常受到时间和预算等因素的限制。如果您的微服务足够小,并且您知道此逻辑不会发生太大变化,或者您只需将其取出,复制将花费更多时间。采取这种方法。当你有时间/预算时,没有什么可以说你不能在以后解决这个问题。无数的博客文章会因为你这样做而尖叫,然而,他们不是你,也不知道你的项目的情况。

【讨论】:

虽然在某些情况下听起来是正确的,但考虑到问题明确提到了 DTO,我会说这是错误的。您不应该为 DTO 创建共享库,我假设您的微服务之间存在某种合同。 @cool 如果只是 DTO 本身的情况,我同意你的看法。但是,我认为他也意味着处理这些对象的逻辑

以上是关于我应该在微服务之间共享我的库吗?的主要内容,如果未能解决你的问题,请参考以下文章

在微服务之间共享代码 - 在这种情况下是不是合理?

在微服务之间共享文件

JWT 注销:在微服务架构中的服务之间共享被列入黑名单的无效令牌

如何在微服务架构中使用 docker-compose 最好地处理共享服务以进行本地开发?

在微服务之间传播访问令牌

我们应该在微服务之间使用api网关(例如zuul)吗?