【发布时间】:2017-11-18 21:36:53
【问题描述】:
在过去的一年中,我已经使用 nodejs 启动了大约 40 个独立的 Web 应用程序(每个都使用 express + socket.io 使用自定义端口运行它自己的服务器)。真正困扰我的是 pm2 进程列表有一个垂直滚动 )))
问题是:运行这么多节点服务器正常还是有更好的办法?
【问题讨论】:
在过去的一年中,我已经使用 nodejs 启动了大约 40 个独立的 Web 应用程序(每个都使用 express + socket.io 使用自定义端口运行它自己的服务器)。真正困扰我的是 pm2 进程列表有一个垂直滚动 )))
问题是:运行这么多节点服务器正常还是有更好的办法?
【问题讨论】:
运行多个节点服务器没有问题,事实上,当涉及到微服务架构时,你分解得越多越好。这有很多优点和缺点,你需要弄清楚缺点对你的系统的影响是否超过你愿意牺牲的程度。我假设您刚开始时不知道遵循微服务架构,但是由于您的应用程序现在分布在 40 多个服务上,因此以下文章可能会让您对如何正确管理它有所了解。
https://derickbailey.com/2016/12/12/making-the-quantum-leap-from-node-js-to-microservices/
【讨论】:
如果您愿意,可以在一个 NodeJS 进程中启动多个 express 和 socket.io 实例,如下所示(基于 Express Hello world 示例):
const express = require('express');
// First app
const app1 = express();
app1.get('/', function (req, res) {
res.send('Hello World!');
});
app1.listen(3000, function () {
console.log('Example app1 listening on port 3000!');
});
// Second app
const app2 = express();
app2.get('/', function (req, res) {
res.send('Hello World 2!');
});
app2.listen(3001, function () {
console.log('Example app2 listening on port 3001!');
});
但有几个方面需要考虑:
【讨论】:
如果它们都是独立的,那么您必须创建单独的服务器。但是如果他们正在互相交谈(我认为他们正在通过 socket.io 互相交谈),那么您可以使用 RPC 调用。他们是一些像 grpc(Google) 和 tchannel(Uber) 这样的库。我希望他们能解决你的问题。
【讨论】: