gpt4 book ai didi

node.js - NodeJS Express - 向特定集群工作人员发送特定路由?

转载 作者:太空宇宙 更新时间:2023-11-03 23:18:09 25 4
gpt4 key购买 nike

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

  • 具有express、master进程的API服务器
    • 实例 1:GET/instances/1/*
    • 实例 2:GET/instances/2/*

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

instance/:id 确实代表 WorkerID。

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

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

这不适用于本质上是克隆/镜像的工作人员之间的负载分配。

我的每个工作人员可能正在执行一项长期运行任务的变体(数天、数周、数月)。方法在所有工作进程之间共享,但如果我调用/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 - worker

W1/instances/1/:method - 具有以下方法 namescitiescars

W2/instances/2/:method - 具有以下方法 namesfruitsstats

HTTP 客户端想要访问:

  1. GET/instances/1/name,太好了,name 存在于两个路径中。 - 正确
  2. GET/instances/2/fruits,太好了,fruits 存在于 W2 上的此路径中,但是如果平衡器通过该路由为您提供 W1 服务,则会出现错误,因为 fruitsW1 上不存在 - FALSE

最终答案:

你不能请求worker弹出来服务你的意愿,你能做的最好是在master和worker之间进行一些通信,或者有一些需要一些处理的方法,并根据CPU使用率,在服务低的worker时触发这些方法。但看看好的部分,如果它们死了,您可以fork新的,而不会导致整个应用程序崩溃。

关于node.js - NodeJS Express - 向特定集群工作人员发送特定路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52780222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com