2016-07-04 178 views
3

我有一个套件我正在努力,有几个微服务工作。 我正在使用Docker来设置环境,并且效果很好。微服务之间的共享代码

我的项目组件如下:

  • MongoDB的
  • Node.js的工人,做的是服务于用户的DB
  • Node.js的REST API的一些处理

正如你大概猜测的那样,2个Node.js服务器可以使用同一个数据库。 现在我已经在其中一个项目中定义了我的模型,但是我想知道处理第二个项目时最佳做法是什么。 我真的很喜欢避免复制粘贴我的代码,因为这意味着当我对Schema进行更改时,我必须保持它们都是最新的。 有没有一种很好的方式来分享它们之间的代码?

我的项目是这样的:

rest-api // My first Node.js application 
    models 
     MyFirstModel.js // This is identical to the one in the worker/models folder 
     MySecondModel.js 
    index.js 
    package.json 
    Dockerfile 
worker // My second Node.js application 
    models 
     MyFirstModel.js 
     MySecondModel.js 
    index.js 
    package.json 
    Dockerfile 
docker-compose.yml 

任何投入将是有益的。

感谢。

+0

为什么你有两个单独的应用程序?为什么模型是相同的? – tomliversidge

+0

正如我解释过的。 2微服务使用相同的数据库 – dcohenb

+0

我的意思是为什么你有两个微服务共享数据模型?为什么它不只是一个?这感觉可能是一个造型问题,而不是技术问题 – tomliversidge

回答

1

当然可以。 你必须做的是将你的公共文件放在一个卷中,并与两个Node容器共享这个卷。

您应该设置一个数据卷,在其中放入要共享的所有文件。更多关于这here或其他任何地方使用Google搜索。 干杯。

+0

哦哇,共享卷我没有考虑它.. – dcohenb

+0

好吧,所以我试了一下,它确实工作,但它更复杂的事情,因为我需要保持另一个在代码与它在package.json这些共享模型..我希望有一个更清洁的解决方案.. – dcohenb

+0

您只需要将要共享的文件放入该数据卷。所以我不明白你的问题是什么。你能否给我更多的细节? ;-) – Fares

1

常见的观点如下:两个微服务不应共享相同的数据模型。有几篇关于它的文章和一些与这个话题有关的问题。

How to deal with shared models in micro service architectures

不过,我认为有需要时和可接受的一些情况。即使一切都是内在的,信任也是一种奢侈,因此必须考虑安全性和一致性。任何传入的对象在启动任何进程之前都必须进行标准化,验证和检查。这两个服务应该以相同的方式处理数据。

我用于API和共享模型的管理服务的解决方案: 我创建了3个存储库,一个用于API,另一个用于Admin,第三个用于模型目录。模型应该出现在这两个存储库中,所以我将它添加为git子模块。无论何时在模式上更改某些内容,都应该单独提交,但我认为这是管理更改而不重复代码的最佳解决方案。

+0

实际上,正确的做法是创建第三个微服务,充当数据库的网关。它将获得在数据库上执行的CRUD请求并处理所有验证缓存等。 – dcohenb