【问题标题】:Dividing express routes among Node JS Clusters在 Node JS 集群之间划分快速路由
【发布时间】:2017-02-27 14:01:19
【问题描述】:

我在一个 Node JS 应用程序中有大量路由,我正在尝试扩展到多个 CPU 内核(通过 NodeJS 集群)。

我的计划是让不同的工作人员处理一组不同的 express.js 路由。例如:

/api/ requests handled by WorkerA
/admin/ handled by WorkerB
/blog/ handled by WorkerC
etc

仅使用带有工作人员 ID 的条件是不够的,因为请求仍然可能到达错误的工作人员处。此外,所有进程都在同一个端口上运行,所以我不能只在 nginx 内部匹配 & proxy_pass 的 URL。

此时,我正在考虑更换集群路由(从主节点到工作节点)以匹配 URL 并路由到正确的工作节点,而不是仅使用内置的循环方法。但这似乎有点hacky,我想知道是否其他人已经解决了这个问题,或者可能有任何其他想法。

【问题讨论】:

  • 你们有没有重新审视这个并找到其他选择?希望通过路由和集群模块的组合来处理这个问题

标签: node.js multithreading express nginx


【解决方案1】:

我的解决方案是运行多个在不同端口上监听的 express 应用,并在前端设置一个 Nginx 服务器来代理请求

假设您有三个 express 应用程序,每个应用程序都将处理特定类型的路由器,并侦听不同的端口(@98​​7654322@、80828083),当然,它们应该以集群模式运行:

//API app used to handle /api routing
apiApp.listen(8081);

//Admin app used to handle /admin routing
adminApp.listen(8082);

//Blog app used to handle /blog routing
blogApp.listen(8083);

并配置 Nginx 服务器来代理请求:

server {

    # let nginx server running on a public port 
    listen       80;

    location /api {
       proxy_pass http://127.0.0.1:8081
    }

    location /admin {
       proxy_pass http://127.0.0.1:8082
    }

    location /blog {
       proxy_pass http://127.0.0.1:8083
    }
}

proxy_pass 只是告诉 nginx 将请求转发到 /api 到监听8081 的服务器。可以查看完整文档here

【讨论】:

  • 很烦人,但我想这是唯一的选择:|
  • 你们有没有重新审视这个并找到其他选择?希望通过路由和集群模块的组合来处理这个问题。 @Antoine
猜你喜欢
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 2019-02-20
  • 2018-07-15
  • 2017-06-14
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多