在NodeJs微服务体系结构中,我应该使用每个服务的package.json吗?
我目前正在开发一个NodeJs中的微服务架构。 我的第一个方法是每个服务的package.json
。 尽pipe访问公共区域(使用日志logging或数据库实用程序)对于所有微服务来说可能非常棘手。 例如:
common-area > logger.js package.json - install module typeorm service1 > app.js - use logger.js package.json - also install module typeorm
当运行node app.js
(服务1)时,我们最终加载了2个typeorm模块,一旦我们做了两个不同的安装,一个在公共区域(logging器使用),另一个在service1。
我应该只使用一个package.json
,对于所有的微服务,只产生一个node_modules
文件夹?
我应该只使用一个package.json,对于所有的微服务,只产生一个node_modules文件夹?
当你在做微服务时,你不应该担心有多个node_modules目录,因为微服务的一个要点是能够把它们放在不同的主机上,或者放在不同的容器中,而且无论如何都不能共享它们的依赖关系。
每个微服务应该是一个单独的服务。 您应该避免紧密耦合,并避免可能因与微服务体系结构对抗而产生的抽象漏洞,并将它们结合在一起。
当然,微服务并不是唯一可以在实践中使用的体系结构,但是你需要微服务,那么每一个微服务都应该是完全独立的。 否则,它不是微服务。
如果在服务之间可以共享任何通用代码,则将其放入所需的全部或部分服务所需的模块中。 您可以将私有模块保留在npm上,您可以托pipe一个私有npmregistry,或者您可以直接从GitHub或GitLab私有回购站安装该模块。 所有你需要做的添加一个私有(或公共)模块托pipe在GitHub将运行:
npm install user/repo --save
其中user
是GitHub上的用户(或组织)名称, repo
是存储库的名称。 请记住,要安装这样一个模块,如果它是在一个私人的回购在该机器上使用的SSH密钥将不得不属于一个用户已经读取回购。 您也可以使用GitHub上的部署密钥来获得更大的灵活性。
您甚至可以通过创build一个包含所有依赖关系的独立模块,并一次性将它们公开给您的服务,从而简化在您的服务中加载外部依赖关系。 例如,如果您创build一个名为dependencies
的模块,如下所示:
module.exports = { _: require('lodash'), P: require('bluebird'), fs: require('mz/fs'), // ... };
那么你可以在你的微服务中使用所有这些模块:
const { _, P, fs } = require('dependencies');
当你有大量的小型微服务时,特别是当这些服务被拆分成多个文件时,这可以简化很多事情。