node.js - 将我的 Node 应用程序转换为 Docker/Kubernetes?

标签 node.js docker continuous-integration kubernetes microservices

我有一个 Node 应用程序,它由几个独立的模块组成,通过 AMQP 相互通信。该应用程序由一个 index.js 文件启动,该文件实例化我的项目的不同文件夹中的所有其他 index.js,进而实例化实际的模块。

我一直在阅读有关微服务的内容,并且想将我的应用程序转换为 Docker 容器。我找到了如何将简单的 Node 应用程序转换为 Docker 的示例,但我想分离我的应用程序,以便每个模块都位于独立的 Node 容器中(这是因为每个模块都是独立的,不依赖于其他模块来运行)工作。它们从消息队列接收工作,并将结果放入消息队列。

我找不到有关如何组织和部署代码的信息。我是否应该为每个模块创建一个不同的 Node 项目(带有单独的 packages.json)?或者我应该为所有模块创建一个 Node 项目并单独部署每个模块?

组织好项目后,是否有一个脚本工具可以生成(构建*并部署)我的每个模块到其自己的容器?到目前为止,我发现的所有示例都是“hello world”级别的示例,仅打包一个应用程序。

在开发过程中,我是否必须为测试的每个更改部署新容器?

*:构建是因为我使用 ES6 并且必须使用 Babel。

最佳答案

Should I have a separate packages.json for each Dockerfile? From what I've read, I understand the Dockerfile will actually run NPM and download the actual packages. If I have a single packages file I would have a lot of bloat in each of my images, with unused modules.

当然你会臃肿,这就是微服务的美妙之处,并且That's the curse of Microservice .

Should I have a separate packages.json?

好吧,让我尝试具体解决这个问题。假设您的 moduleA 使用 lodash.x.x.x。并且您想在 moduleB 中使用 lodash.x+1.x.x。您确定 lodash.x+1.x.x 不向后兼容 lodash.x.x.x。因此,现在您必须使 ModuleA 的代码与 lodash.x+1.x.x 兼容。如果上述说法听起来属实,那么我们将这些应用程序称为单体应用程序,而不是微服务。要回答你的问题,是的,你可能需要单独的packages.json,除非你可以有一个具有共同依赖项的父package.json和带有它自己的package.json的子模块(我不是来自node-land,所以不确定package.json是否是这样的) json有这样的能力)

What I can't find is information on how I should organize and deploy my code. Should I have a different Node project (with separate packages.json) for each of my modules? Or should I have a single Node project for all my modules and deploy each of them individually?

我已经看到了这两种模式(单独的项目以及同一项目中的子模块)。我个人的观点(就其值(value)而言)是拥有单独的项目和单独的代码库,因为您的“模块”已经在通过与语言无关的协议(protocol) - AMQP 进行通信。明天,您可能想使用 golang/kotlin 来实现“ModuleB”(微服务B,取决于您如何看待它:)),谁知道呢。

After I have my project organized, is there a script tool that will generate (build* and deploy) each of my modules to its own container?

这里需要澄清的一件事是,一个微服务的开发和部署不应该强制您更改/部署其他微服务,只要它们之间的契约保持完整,否则它就是一个分布式单体(哇..我是不是只是发明一个新术语?太棒了!!)。当契约(Contract)发生变化时,您应该升级版本并让两个版本运行一段时间,直到所有相关方(您的其他微服务)都有机会升级。

关于node.js - 将我的 Node 应用程序转换为 Docker/Kubernetes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46975781/

相关文章:

jenkins - 配置文件管理

node.js - Express.js 和 connect-mongo session 持续时间

build - 有没有办法让 Jenkins 共享一个公共(public)源代码目录/ checkout 位置以进行完整和增量构建?

java - Maven 无法检测到我的 Node 安装

docker - Docker中的SonarQube无法解析localhost

postgresql - Docker容器Postgres连接错误

nginx - Docker 容器遇到套接字问题(单独的 Flask + Nginx 容器)

svn - 您使用哪些工具来促进持续集成 (CI)?

node.js - Node 中的 Express 模块导出函数或对象

node.js - 使用nodeJs和 "svn-spawn"模块访问SVN