问题标签 [job-queue]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 将数据库表用作作业队列(又名批处理队列或消息队列)的最佳方式
我有一个包含约 50K 行的数据库表,每行代表一项需要完成的工作。我有一个程序从数据库中提取工作,完成工作并将结果放回数据库。(这个系统现在正在运行)
现在我想允许一个以上的处理任务来完成工作,但要确保没有任务被完成两次(作为性能问题而不是这会导致其他问题)。因为访问是通过存储过程进行的,所以我目前的做法是用看起来像这样的东西替换所述存储过程
顺便提一句; 工人的任务可能会在获得工作和提交结果之间失去联系。此外,除非我把那部分搞砸(每分钟约 5 个工作),否则我不认为数据库会接近瓶颈
这有什么问题吗?有一个更好的方法吗?
注意:“数据库作为 IPC 反模式”在这里只是稍微恰当,因为
- 我没有做 IPC(没有生成行的进程,它们现在都已经存在)和
- 针对该反模式描述的主要抱怨是,当进程等待消息时,它会导致数据库上出现不必要的负载(在我的情况下,如果没有消息,一切都可以在完成后关闭)
mysql - 在 mysql 中实现消息队列表的最佳方法是什么
这可能是我第十次实施这样的事情,而且我从未对自己提出的解决方案感到 100% 满意。
使用 mysql 表而不是“适当的”消息传递系统的原因很有吸引力,主要是因为大多数应用程序已经使用一些关系数据库来处理其他东西(对于我一直在做的大部分事情,这往往是 mysql),而很少有应用程序使用消息系统。此外 - 关系数据库具有非常强的 ACID 属性,而消息传递系统通常没有。
第一个想法是使用:
然后入队看起来像这样:
出队看起来像这样:
表和入队看起来不错,但出队有点困扰我。回滚的可能性有多大?还是被封杀?我应该使用什么键使它成为 O(1)-ish?
还是有比我正在做的更好的解决方案?
sharding - 有关于作业排队和数据库分片的好的链接/文章吗?
有没有人有关于如何/何时/为什么使用作业队列来扩展 Web 应用程序的良好链接?此外,关于 db 分片的文章也会很有用 :)
grails - 在 Grails 应用程序中为长时间运行的作业构建队列的最佳方法是什么?
我有一个 Grails 应用程序,它进行了一些计算密集型优化,运行时间约为 5 分钟(也许更多)。目前,我在主请求线程中执行这些操作,即请求返回需要 5 分钟。它有效,但从可用性的角度来看当然是可怕的。
那么以异步方式实现这一点的最佳方法是什么?我假设必须涉及一个 ThreadPoolExecutor,但是我该如何启动和访问它呢?我可以将它建模为 Grails 服务吗?还是一份工作(但似乎这些只适用于经常性工作)?
另外,处理工作状态的最佳方法是什么?通过 aa 标志或数据库中的全新类?浏览器是否显示微调器并继续轮询直到状态发生变化?
python - python的作业队列实现
你知道/使用任何用于 python 的分布式作业队列吗?你能分享链接或工具吗
asp.net - ASP.NET MVC 的排队解决方案
我研究了 Web 应用程序排队的概念(即将某些类型的作业放入队列中以由单独的工作人员完成,而不是在 Web 请求周期中完成)。
我想知道是否有任何可以在 ASP.NET MVC 环境中使用的好的解决方案。
有没有人有任何(好的或坏的)经历?
谢谢!
更新:
澄清一下,我不是在谈论排队传入的请求。我将尝试说明我的意思...
1)标准情况:
- 来自浏览器的请求
- 服务器处理开始
- 漫长的工作开始
- 漫长的工作完成了
- 服务器处理完毕
- 响应返回到浏览器
2)我正在调查的内容:
- 来自浏览器的请求
- 服务器处理开始
- 排在队列中的长作业
- 服务器处理完毕
- 响应返回到浏览器
在另一个过程中(可能在发送响应之后):
- 从队列中取出的长时间工作
- 漫长的工作开始
- 漫长的工作完成了
在第一种情况下,用户等待服务器响应很长时间,在第二种情况下它很快。
当然,某些类型的工作适合此,有些则不适合。
更新2:
客户端不必立即使用长期工作的结果进行更新。只要用户碰巧刷新页面(当然是在作业完成之后),这些更改就会在应用程序中显示出来。
想想堆栈溢出中发生的一些事情——它们不会在应用程序的每个部分立即更新,但这发生得很快——我怀疑其中一些作业正在排队。
perl - 我应该如何使用作业队列 [和 Perl/Catalyst] 最好地构建我的 Web 应用程序?
我正在使用Catalyst 框架编写一个 Web 应用程序。我还使用了一个名为TheSchwartz的作业队列。
我想要使用作业队列,因为我想要尽可能多的应用程序特定代码与 Web 应用程序接口代码分离。
基本上整个系统由三个主要部分组成:
- GUI(催化剂网络界面)
- 一个爬虫
- 一个“攻击组件”(正在编写该应用程序以查找其他 Web 应用程序/站点中的 XSS 和 SQLi 漏洞)
所以理论上 GUI 为爬虫创建作业,而爬虫又为“攻击组件”创建作业。
目前我在 Catalyst 中有一个模型,它实例化了一个 TheSchwartz 对象,以便网络应用程序中的控制器可以将作业添加到作业队列中。
我还需要创建一些作业工作者脚本来持续侦听(/检查数据库)新作业,以便他们可以执行所需的操作。目前,TheSchwartz 的数据库特定内容位于 Catalyst 的模型中,我认为我无法在 Catalyst 之外轻松访问它?
我不想在模型中复制 TheSchwartz 作业队列的数据库连接数据,然后在我的作业工作者脚本中复制。我是否应该将 TheSchwartz 对象的创建包装在 Catalyst 之外的另一个类中,并在当前实例化 TheSchwartz 对象的模型中调用它?然后我也可以在工作脚本中使用它。或者我应该将数据库数据放在配置文件中,并在需要时实例化新的 TheSchwartz 对象(在 Catalyst 中/在作业工作者脚本中)?
还是我只是在想这个?
一些指向丰富的网络应用程序架构文章的链接也可能有用(我以前从未构建过中等复杂性的文章......)。
干杯
ajax - 为 Web 应用程序异步执行任务
我正在开发的 Web 应用程序需要执行在 http 请求/响应周期中执行时间过长的任务。通常,用户将执行请求,服务器将接受此请求,除其他外,运行一些脚本以生成数据(例如,使用 povray 渲染图像)。
当然,这些任务可能需要很长时间,因此在将响应发送给客户端之前,服务器不应该挂起等待脚本完成执行。因此,我需要异步执行脚本,并给客户端一个“资源在这里,但尚未准备好”,并可能告诉它一个 ajax 端点进行轮询,以便它可以在准备好时检索和显示资源。
现在,我的问题与设计无关(尽管我也非常喜欢这方面的任何提示)。我的问题是:解决这个问题的系统是否已经存在,所以我不重新发明方轮?如果必须,我会使用进程队列管理器来提交任务并放置一个 HTTP 端点来输出状态,比如“待定”、“中止”、“完成”给 ajax 客户端,但如果已经有类似的东西专门为这项任务而存在,我最喜欢它。
我在 python+django 工作。
编辑:请注意这里的主要问题不是服务器和客户端必须如何协商和交换有关任务状态的信息。
问题是服务器如何处理非常长的任务的提交和排队。换句话说,我需要一个比让我的服务器在LSF上提交脚本更好的系统。不是说不行,而是我觉得有点过分了……
编辑2:我添加了一个赏金,看看我是否能得到其他答案。我检查了 pyprocessing,但我无法提交作业并在稍后阶段重新连接到队列。
monitoring - beantalkd 的统计/监视器/检查器
有谁知道可以监控 beanstalkd 队列的应用程序?我正在寻找能够显示管道和工作统计数据的东西,并允许您检查详细信息。
我对语言/平台并不是很挑剔,只是想知道在我自己写之前是否有什么东西。
django - 任何允许按日期安排作业的作业队列系统?
我有一个 Django 应用程序。
我的一个模型看起来像这样:
每次更新 MyModel 的实例时,我都需要在 N 天后清理数据。所以我想安排一个工作来打电话
从现在开始 N 天。
是否有任何工作队列可以让我:
- 与 Django 很好地集成 - 允许我调用单个模型实例的方法
- 仅运行计划在今天运行的作业
- 理想地优雅地处理故障
谢谢