gpt4 book ai didi

node.js - 自主维护可用工作人员状态的最佳方法是什么

转载 作者:可可西里 更新时间:2023-11-01 11:24:13 25 4
gpt4 key购买 nike

目前我的系统是如何设计的,我假脱机了一个只允许一个编码工作的 1 核实例。此实例连接到 redis 并等待填充编码作业列表。然后工作人员从列表中弹出作业并在作业运行时将自己设置为忙碌状态,一旦作业完成 - 它会继续寻找更多未完成的作业。

我的示例 worker.js

module.exports = function (redisClient) {
const spawn = require('child_process').spawn;
var busy = false;
function startCoStream(job) {
console.log(job);
busy = true;
var proc = spawn('./costream.sh', [job.streamKey, job.leftIngest, job.leftKey, job.rightIngest, job.rightKey]);
proc.on('exit', function (code, signal) {
busy = false;
readJobBus();
});
proc.stderr.setEncoding('utf8');
proc.stderr.on('data', (chunk) => {
console.log(chunk);
});
}
function readJobBus () {
if (busy) return;
redisClient.lpop('jobbus', function(err, reply) {
if (!reply && !err) {
setTimeout(readJobBus, 1000);
}
else {
var job = JSON.parse(reply);
if (job.type==0) {
startCoStream(job);
}
}
});
}
readJobBus();
return redisClient;
}

这在我当前的设置中运行良好,唯一的问题是我需要提前知道预期的编码进程数量并手动配置实例。我的问题是,保持该系统自主和松散耦合的最佳方式是什么,同时维护一个忙碌且可用的工作人员列表以便我实现自动缩放。

想法 1) 在启动时在可用的工作人员列表中注册工作人员,然后在流程开始时从列表中删除并在流程完成后添加回来。问题 1) 如果 worker 在可用列表中死亡时怎么办,那么该列表将显示比应用程序的实际状态多 1 个可用的 worker。

什么是解决此问题的好方法?想要的结果很简单。当一个工作人员被提供时,它连接到 redis 并将自己放在工作人员列表中,当工作人员列表中超过一半的工作人员处于忙碌状态时,然后提供更多的工作人员。如果没有维护列表的专用系统,维护此列表的最佳方法是什么。

最佳答案

当然,最简单的方法是让主管 Node 对其进行评估。如果做不到这一点,您将不得不将该角色分配给您的工作 Node 。我建议您让每个等待工作的空闲 Node 检查工作人员列表并测试是否需要配置更多工作人员。

这很棘手,因为您必须使用分布式锁来防止多个工作人员同时执行此任务。

  1. 尝试获取主管锁,如果被阻止,转到#4
  2. 检查忙碌员工的数量,并在必要时提供更多
  3. 释放主管锁
  4. 找工作

关于node.js - 自主维护可用工作人员状态的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52626200/

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