- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在开发一个需要按计划从第三方系统收集数据的模块,比如每 5 分钟一次。
启动数据收集的触发器来自 Multi-Tenancy UI。因此,10 个租户可以告诉该模块同时开始收集数据。
我从使用一个简单的 redis 队列开始,所有来自 UI 的启动请求都被发送到队列中,该模块充当工作人员,获取作业并运行它们。
问题是我们需要在 1 分钟内完成一个数据收集周期,如果有 100 个作业,如果我们连续进行,我们将花费一分钟多的时间。数据收集需要按计划进行。所以 UI 说每 5 分钟运行一次数据收集,直到我说停止!
因此,我们添加了另一个可以开始减轻负载的工作器。
我的问题是:如何在不在其中一个工作人员中保持状态(预定线程执行程序)的情况下实现常规计划?
我是不是想太多了,可以用更简单的方法来完成吗?
我现在的设计有一种 cron 作业,每 1 分钟从数据库中读取一次数据收集请求,然后将它们放入工作人员接收请求的队列中。
最佳答案
使用 beanstalkd在这种情况下,可能是比使用 Redis 更好的选择。
Beanstalkd 与 Redis 有很多共同点:易于部署、简单、轻便、快速、默认在内存中、通过简单的文本协议(protocol)进行通信,很多 clients in various languages ...但它专用于任务管理,它不是数据库。您可以动态地添加或删除工作人员,而无需在 beanstalkd 端进行任何配置。
您将作业放入“管”(队列的 beanstalkd 名称),然后工作人员可以保留它们——一次一个。一旦它保留了一个工作,一个 worker 就有完成它的最大时间(称为 TTR — 运行时间),否则该工作将被 beanstalkd 释放,重新放入管中,因此可能由另一个 worker 处理。
作业只是一个字符串;例如,它可以是描述要执行的任务的序列化 Json。
如果我对你的问题的理解是正确的,UI 租户可以创建具有正常优先级的作业来开始数据收集,并将它们放入一个独特的管中。一个或几个 worker 将从这个管中“保留”(获取)一个作业,处理它,删除它以通知 beanstalkd 它已经完成,然后保留另一个作业,等等。
保留删除
-----> [就绪] --------> [保留] --------> *噗*
(此模式的来源:beanstalkd 的协议(protocol)文档)
对于一个没有任何调度器每5分钟重复处理的作业,你可以说每次一个worker消费一个作业,它创建一个新的,并在将它放入时使用beanstalkd的“put with delay”特性 pipe 。因此,只有在延迟到期时(在您的情况下为 5 分钟),工作才会呈现给工作人员。
当 UI 想要取消剩余的作业时,它可以从管中挑选并删除所有作业。或者,如果您希望工作人员删除它们,则 UI 可以将优先级高于数据收集作业的取消作业(将其视为消息)放入管中。您也可以使用另一个电子管,假设您是在另一个线程而不是专门用于数据收集的线程中收听它。
我对你的问题的了解和理解显然是有限的,但你当然可以提炼这些想法来解决你的确切问题。
关于java - redis pub sub 和/或列表来实现数据收集器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39748609/
我在产品类别和子类别网站上工作,可以创建的子类别数量是无限的,这意味着我们可以自己拥有子类别的子类别。一切正常,我只是有一个问题:假设“PRODUCT 1”属于“SUB SUB CATEGORY 1”
我正在学习OCaml,并在代码2022的到来中努力工作。。但似乎读取input.txt文件会导致一些问题。。我收到了这个奇怪的错误,它来自于函数分数。尤其是那个叫得分手HD的表达。不过,当我手动将LI
我有一个奇怪的行为(对于 Python 程序员)子例程,它简化如下: use strict; use Data::Dumper; sub a { my @x; sub b { push @x,
在此页上 http://bit.ly/T3yJIH , drupal 的 Nice Menu 模块不能正确显示子子菜单。如果转到菜单中的第一项,然后转到子菜单中的第一项,就可以看到它。 (Facili
我需要在我的站点内创建一个子结构,我在其中拥有: 实际上我是通过 Javascript 来完成的(伪代码):SUB_Content.height = ParentDiv.height - Sub_He
我有一个与子菜单一起使用的 CSS 手册。我想知道如何向它添加子子菜单。例如,我将鼠标悬停在主菜单项上并弹出子菜单,然后我将鼠标悬停在子菜单项上并弹出另一个子菜单。这是我现在使用的 JS Fiddle
我有一个关于 navmenu 的问题我不能选择导航菜单的 sub sub ul,如果我会做什么它会影响 3.ul。这是一个 wordpress 菜单我没有机会使用类或菜单的 ID。提前感谢您的帮助。
我创建了一个带有 2 级子菜单的简单导航。我正在寻找“sub sub”选项以显示在其父项的右侧而不是下方。对于 CSS 的任何帮助,我将不胜感激。下面是 html 和 css 以及 JS fiddle
我对 VBA、这个论坛和编程很陌生。我有一个工作表,我已经设法根据我的要求谷歌并调整某些代码行。 我的问题是我总共有三个潜艇,必须逐步运行每个 VBA 脚本。我希望将所有三个 VBA 脚本合二为一。
我使用 sub 调用作为另一个 sub 的参数。示例代码: test(isInString(), 'second parameter', 'third parameter'); sub test {
我想使用 HTML ui->FresBox->setText("fres"); 但它在 QCheckbox 中不起作用。如果您使用标签,它会很好用。有什么不同以及如何在 QCheckbox 中使用 H
我没有遇到这个问题,但在处理相关问题时想到了这个问题。让我们: logging = 'something' # bad naming decision import logging as lg
我正在查看 Redis pubsub,消费者是 2-4 节点自动缩放组的一部分(HA 原因) 也许我遗漏了一些明显的东西,但是 Redis pubsub 中是否有某种机制可以管理订阅者/消费者收到的重
对你们来说应该是一个快速和简单的,为什么这不起作用? 代码限制用户只能在文本框中输入文本。 它工作正常,但我有大约 50 个文本框,所以会更干净,更容易调用。 但是,这样做,限制不再起作用 Priva
(编辑)TL; DR :我的问题是,尽管Win32 API定义的是真实的整数常量(如平台SDK header 中一样),而Win32 Perl包装器将它们定义为subs。从而引起一线解析的误解。 在单
我有一个使用 Jersey 实现 REST API 的 Web 应用程序。 Web 容器 id Tomcat 以下是 API 的摘要: /rest/patients 获取患者元数据列表。 /rest/
我与 Czech 一起工作Python 3.4 中的重音文本。 调用 re.sub()用正则表达式对重音句子进行替换效果很好,但使用用 re.compile() 编译的正则表达式然后调用regex.s
对于我的一个新项目,我必须创建一个包含主类别、子类别和子子类别的类别页面。例如; 互联网 互联网 > 发展 互联网 > 开发 > 移动应用 在此类别中,您可以找到有关这些内容的网站。我必须为每个网站提
表1 - 客户数据 c_id(整数) 名称(varchar) 表2 - account_data a_id(整数) c_id (int) -> 使用customer_data。c_id plan_id
我有一些位图文件(jpeg、png、...),我想编写一个 C++ 程序,将这些位图文件连接到 pes 流(mpeg-2 格式),然后创建一个子文件(.sub/. idx:vobsub 字幕文件)。
我是一名优秀的程序员,十分优秀!