【问题标题】:Multiple nodejs servers or single?多个nodejs服务器还是单个?
【发布时间】:2017-11-18 21:36:53
【问题描述】:

在过去的一年中,我已经使用 nodejs 启动了大约 40 个独立的 Web 应用程序(每个都使用 express + socket.io 使用自定义端口运行它自己的服务器)。真正困扰我的是 pm2 进程列表有一个垂直滚动 )))

问题是:运行这么多节点服务器正常还是有更好的办法?

【问题讨论】:

    标签: node.js sockets server


    【解决方案1】:

    运行多个节点服务器没有问题,事实上,当涉及到微服务架构时,你分解得越多越好。这有很多优点和缺点,你需要弄清楚缺点对你的系统的影响是否超过你愿意牺牲的程度。我假设您刚开始时不知道遵循微服务架构,但是由于您的应用程序现在分布在 40 多个服务上,因此以下文章可能会让您对如何正确管理它有所了解。

    https://derickbailey.com/2016/12/12/making-the-quantum-leap-from-node-js-to-microservices/

    【讨论】:

      【解决方案2】:

      如果您愿意,可以在一个 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!');
      });
      

      但有几个方面需要考虑:

      1. 性能 - 如果每个应用程序都由单独的 NodeJS 进程处理,那么显然每个应用程序都有更多的 CPU 时间,其中一个应用程序的高负载不会影响其他应用程序。
      2. 日志记录 - 如果多个应用程序由一个 NodeJS 进程处理,您将需要以某种方式区分它们中的哪些输出。否则输出会很乱。
      3. 自动容错 - 如果一个 NodeJS 进程处理多个应用程序,那么在一个应用程序发生严重故障的情况下,所有这些应用程序都会同时崩溃。
      4. 安全性 - 一个应用程序中的一些安全问题可能会影响由一个 NodeJS 进程处理的其他应用程序。

      【讨论】:

        【解决方案3】:

        如果它们都是独立的,那么您必须创建单独的服务器。但是如果他们正在互相交谈(我认为他们正在通过 socket.io 互相交谈),那么您可以使用 RPC 调用。他们是一些像 grpc(Google) 和 tchannel(Uber) 这样的库。我希望他们能解决你的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-08-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多