在Node JS Clusters之间划分快速路由

时间:2017-02-27 02:56:42

标签: node.js multithreading express nginx

我在Node JS应用程序中有很多路由,我试图扩展到多个CPU核心(通过NodeJS集群)。

我想到的计划是让不同的工人处理一组不同的express.js路线。例如:

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

仅使用带有工作者ID的条件是不够的,因为请求仍然可以落在错误的工作者身上。此外,这些进程都在同一个端口上运行,因此我无法匹配&来自nginx内部的URL的proxy_pass。

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

1 个答案:

答案 0 :(得分:1)

我的解决方案是在不同的端口上运行多个快速应用程序,并在前面设置Nginx服务器以代理请求

假设您有三个快速应用程序,每个应用程序将处理特定类型的路由器,并在单独的端口(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); )上进行监听,当然,它们也是应该在集群模式下运行:

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
    }
}

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

proxy_pass

8081只是告诉nginx将请求转发给/ api到监听<xsl:value-of select="substring-before(., '#')"/> 的服务器。您可以查看完整的文档here