我应该在微服务之间共享我的库吗?
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 注销:在微服务架构中的服务之间共享被列入黑名单的无效令牌