首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否需要队列管理器来处理生成执行请求的数据库?

是否需要队列管理器来处理生成执行请求的数据库?
EN

Software Engineering用户
提问于 2019-09-24 20:44:16
回答 1查看 121关注 0票数 1

我正在开发一个多用户应用程序,其中用户与UI交互并提交执行请求(ER)。每个用户可以一个接一个地提交多个ERs,多个用户可以同时提交ERs。每个ER将花费大约3-5小时来完成,并使用一个或多个核心来执行。用户在ER完成后通过电子邮件被告知,他们可以再次登录查看分析的结果。

我将ERs写入PostgreSQL数据库,并使用NodeJS服务器作为执行管理器。NodeJS流程的任务是执行形成用户提交的ER的一组任务。目前,我使用数据库触发器在NodeJS流程中生成通知和“监视”通知(受此来源启发)。

相关代码如下:

代码语言:javascript
复制
    pgClient.on('notification', async (data) => {
        const payload = JSON.parse(data.payload);
        console.log('row added!', payload)
        const userid = payload.user_id;
        const simdatetime = payload.sim_date_time;
        const status = payload.status;
        const a_id = payload.analysis_id;

        if (status == 'inserted') {
            console.log("Row inserted successfully - begin the process")
            console.log("Invoking R script... at:", rscript_update_dc);
            callR(rscript_update_dc, a_id)
                .then(result => {
                    console.log("finished with result:", result);
                })
                .catch(error => {
                    console.log("Finished with error:", error);
                });
        }
    })

NodeJS进程接收数据有效负载并运行执行分析的Rscript。我想知道是否需要像公牛这样的队列管理器来管理传入的ERs,还是这个设计足够了?我想要创建一个基本的工作流程,然后让它随着时间的推移变得健壮。我主要担心的是,公牛使用了另一个数据存储区(Redis),并且我想知道我是否引入了不必要的冗余,因为我已经使用了一个存储ER_id (主键)和提交时间(时间戳)的持久化数据库。此外,我认为考虑到ER的不确定计算需求,我认为顺序ER执行可能不是最优的。

EN

回答 1

Software Engineering用户

发布于 2020-02-17 10:13:33

我认为,由于您正在获得一个健壮的系统,并且考虑到性能,所以最好使用队列系统执行作业并设置优先级。

我没有看到任何错误或问题,存储ER和使用触发器从数据库,但我的问题是,为什么我们应该使用触发器,当我们可以使用容错作业队列系统,这是理想的这种情况。

因此,替代体系结构可以如下所示

用户将提交他们的单一或多个ER请求将使用任何队列系统排队,如公牛,同时,我们将保持在数据库中的条目,跟踪进度,ER的状态,将显示每个作业的确切状态。

在任何时候,基于失败的配置,Bull将按照优先级处理退休人员或工作调整。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/398833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档