我应该在微服务之间共享我的库吗?
Should I share my library between Microservices?
我第一次体验微服务,在做出重要决定时需要帮助。
示例:我们有
- CustomerService(包含 CustomerDTO)
- InvoiceService(包含 CustomerDTO、InvoiceDTO)
- PrintService(包含CustomerDTO、InvoiceDTO)
如您所见,我这里有大量代码重复,每次修改 CustomerDTO 时,我都需要在 3 个不同的微服务中进行。
我可能的解决方案是,将重复的 类 排除到库中并在微服务之间共享该库。但在我看来,这将破坏微服务方法。
那么,处理我的问题的正确方法是什么?
与大多数事情一样,没有单一的正确方法可以解决这个问题。根据您的情况,每种方法都有利有弊。
以下可能是您的主要选择
创建一个新的公共服务:
如果您的逻辑足够复杂,您有许多服务需要此逻辑,并且您手头有时间,然后考虑创建一个通用服务来满足此需求。这可能不是一项小任务,因为您现在必须再创建一项服务 manage/deploy/scale
接受重复:
这可能看起来违反直觉,但是如果逻辑足够小,最好只是复制它而不是将您的微服务与库耦合
创建库
现实生活和课本上的不一样。我们经常受到时间和预算等因素的限制。如果你的微服务足够小并且你知道这个逻辑不会改变那么多,或者你只需要把东西弄出来而复制会花费更多时间。采用这种方法。没有什么可说的,当你有了 time/budget 以后你就不能解决这个问题。无数的博客文章会因为你这样做而对你大喊大叫,但他们不是你,也不知道你项目的情况。
我第一次体验微服务,在做出重要决定时需要帮助。
示例:我们有
- CustomerService(包含 CustomerDTO)
- InvoiceService(包含 CustomerDTO、InvoiceDTO)
- PrintService(包含CustomerDTO、InvoiceDTO)
如您所见,我这里有大量代码重复,每次修改 CustomerDTO 时,我都需要在 3 个不同的微服务中进行。
我可能的解决方案是,将重复的 类 排除到库中并在微服务之间共享该库。但在我看来,这将破坏微服务方法。
那么,处理我的问题的正确方法是什么?
与大多数事情一样,没有单一的正确方法可以解决这个问题。根据您的情况,每种方法都有利有弊。
以下可能是您的主要选择
创建一个新的公共服务:
如果您的逻辑足够复杂,您有许多服务需要此逻辑,并且您手头有时间,然后考虑创建一个通用服务来满足此需求。这可能不是一项小任务,因为您现在必须再创建一项服务 manage/deploy/scale
接受重复:
这可能看起来违反直觉,但是如果逻辑足够小,最好只是复制它而不是将您的微服务与库耦合
创建库
现实生活和课本上的不一样。我们经常受到时间和预算等因素的限制。如果你的微服务足够小并且你知道这个逻辑不会改变那么多,或者你只需要把东西弄出来而复制会花费更多时间。采用这种方法。没有什么可说的,当你有了 time/budget 以后你就不能解决这个问题。无数的博客文章会因为你这样做而对你大喊大叫,但他们不是你,也不知道你项目的情况。