NodeJS Express - 将特定路由发送给特定的集群工作人员?

NodeJS Express - Send specific routes to specific cluster workers?

我有一个中央 API 服务器启动集群工作实例。每个实例都有一个特定的更大的工作,并且我可能只想对该特定实例进行一些操作。这是我的粗略想法:

每个实例都是一个单独的工作进程,我希望我可以将特定工作人员的所有 API 请求直接委托给工作人员(以在该工作人员中执行功能)。

instance/:id 代表 WorkerID。

客户端可能会请求 workerID = x 的日志,因此 GET /instances/x/logs。

这里的目标是 master 将实例 X 的所有请求路由到标识为 x 的子进程。

这不适用于本质上 clones/mirrors 的工作人员之间的负载分配。

我的每个工人可能都在执行一项长期 运行 任务(数天、数周、数月)的变体。方法在所有工作人员之间共享,但如果我调用 /instances/x/logs 我只想在该特定工作进程上查询它。这就是我想要弄清楚的目标。

// route these to subprocess x
GET /instances/x/logs
POST /instances/x/settings

// route these to subprocess y
GET /instances/y/logs
POST /instances/y/settings

// route these to subprocess z
GET /instances/z/logs
POST /instances/z/settings

// make a new worker process, returns worker ID as reference
POST /instances/

我看到我可以在不同进程的同一个端口上有多个 express 侦听器,但如果我理解正确的话,express 会自动进行负载平衡。我不能根据路径将特定请求路由到特定工作人员,可以吗?

Each instance is a separate worker process, and I was hoping I could delegate all API requests for specific worker, directly to the worker (to execute functions in that worker).

您确实可以这样做,但除非您的实例/:id 代表 WorkerID,否则您就完蛋了。

让我们假设以下示例,其中 :id 不是工人 ID:

W - 工人

W1/instances/1/:method - 有以下方法 names, cities, cars

W2/instances/2/:method - 有以下方法 names, fruits, stats

HTTP 客户端将要访问:

  1. GET /instances/1/name,太好了,name存在于两条路径中。 -
  2. GET /instances/2/fruits,很好,fruits 存在于 W2 上的这条路径中,BUT 如果平衡器用那条路线为你服务 W1 你会遇到错误,因为 W1 上不存在 fruits -

最终答案:

你不能要求worker弹出来服务你的意志,你能做的最好是master和worker之间的一些沟通或者有一些方法需要一些处理,并且根据CPU的用法,触发服务于低级工人时的那些方法。但是看看好的部分,如果它们死了,你可以 fork 新的而不会使你的整个应用程序崩溃。