2017-04-23 88 views
2

我正在为该应用程序创建Web应用程序和micorservice,并且都需要使用Sequelize创建相同的数据库模型。用NodeJS处理这个任务的方法是什么?在两个NodeJS微服务之间共享自定义代码

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

但我想知道是正确的方法还是什么是正确的方式来分离少数微服务之间的共享私人模块,在我的情况下,它是数据库模型? 我应该干还是不干?

在此先感谢!

回答

1

没有关于微服务的规则,代码不应该被重用。事实上,说明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?。如果他们最终将使用共享数据库,则实际上将两个微服务紧密耦合,因此他们可能应该被认为是同一服务的一部分而不是单独的。

我觉得这是尽我所能说不知道更多关于您的服务和目标。

1

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

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