在两个 NodeJS 微服务之间共享自定义代码

Sharing custom code between two NodeJS microservices

我正在为该应用创建 Web 应用和微服务,两者都需要使用 Sequelize 创建相同的数据库模型。使用 NodeJS 处理此任务的方法是什么?

我正在考虑为我的数据库模型创建单独的模块并将其保存为私有 git 并将此私有 git 作为 npm 依赖项添加到我的 Web 应用程序和微服务中。

但我想知道在几个微服务之间分离共享私有模块的方法是否正确,或者什么是正确的方法,在我的例子中是数据库模型? 我应该选择 DRY 还是不选择?

提前致谢!

你不应该不要在微服务中使用 DRY。想一想使用它们的优势之一:您可以随时用其他堆栈替换一个微服务 (PHP + Apache),系统不会在意,只要它遵守合同。

您可以阅读更多内容 here,第 59 页,DRY and the Perils of Code Reuse in Microservices World

没有关于代码不应重用的微服务规则。事实上,声明 DRY 在微服务中通常是错误的是危险的。相反,您应该问以下问题:Will the shared code be a separate module with a dedicated purpose that rectifies a separately managed lifecycle and releases? 如果是,您绝对应该将其作为单独发布的模块重用 - 类似于重用任何第三方库的方式。这确保了共享代码和微服务之间没有强耦合,因为每个微服务团队都可以自行决定是继续使用模块的特定发布版本还是升级到更新的版本。您要避免的是在重用库发生变化时强制您更改微服务的依赖性(避免连锁反应)。

还有一件事 - 因为您提到它是与数据库相关的模式,所以您必须问另一个问题:Will the schemas being reused in separate DBs or will they refer to the same physical DB in the end?。如果他们最终将使用共享数据库,那么您实际上是将这两个微服务紧密耦合在一起,因此它们可能应该被视为同一服务的一部分,而不是分开的。

我觉得在不了解你们的服务和目标的情况下,我能说的就这么多了。