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

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

例子:我们有

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

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

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

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

【问题讨论】:

    标签: microservices clean-architecture


    【解决方案1】:

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

    这可能是您的主要选择

    1. 创建一个新的公共服务:

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

    2. 只接受重复:

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

    3. 创建库

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

    【讨论】:

    • 虽然在某些情况下听起来是正确的,但考虑到问题明确提到了 DTO,我会说这是错误的。您不应该为 DTO 创建共享库,我假设您的微服务之间存在某种合同。
    • @cool 如果只是 DTO 本身的情况,我同意你的看法。但是,我认为他也意味着处理这些对象的逻辑
    猜你喜欢
    • 2019-01-31
    • 2017-05-27
    • 2016-07-30
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 2018-05-01
    • 2017-09-26
    相关资源
    最近更新 更多