Multithreading 具有多个队列工作程序的Beanstalk设置:生成另一个作业的作业

Multithreading 具有多个队列工作程序的Beanstalk设置:生成另一个作业的作业,multithreading,message-queue,task-queue,beanstalkd,Multithreading,Message Queue,Task Queue,Beanstalkd,从一份工作中衍生出多份工作是否安全,这样工人就可以开始处理任何空缺的工作 目前我的设置是这样的。我有20名工人在等待任何工作的推进。其中一个任务是发送iOS推送通知,iOS的问题是,你不能发送批量消息 当前:我做的是一个作业,它按批获取特定用户的列表,从我的数据库获取每个设备令牌并开始发送通知 场景:如果一个主题有1000个用户,我必须获得所有1000个用户及其设备,然后开始在每个设备上发送。这将在我的队列上推送一个新作业,一个工人将选择it应用程序,而其他工人则空着等待传入的作业。如果在给定的

从一份工作中衍生出多份工作是否安全,这样工人就可以开始处理任何空缺的工作

目前我的设置是这样的。我有20名工人在等待任何工作的推进。其中一个任务是发送iOS推送通知,iOS的问题是,你不能发送批量消息

当前:我做的是一个作业,它按批获取特定用户的列表,从我的数据库获取每个设备令牌并开始发送通知

场景:如果一个主题有1000个用户,我必须获得所有1000个用户及其设备,然后开始在每个设备上发送。这将在我的队列上推送一个新作业,一个工人将选择it应用程序,而其他工人则空着等待传入的作业。如果在给定的时间内没有可用的工作,那么工人1必须完成所有的工作发送

我现在工作的是什么。如果一个大的工作岗位,会创造另一个工作岗位,让其他空缺的工人能够接手并完成工作,这安全吗


所有的工作都是在一个管道中进行的。

这听起来很合理,在许多工人中分散了工作量

有些事情我会很小心,比如设定一个适当的优先级。如果创建数十个或数百个以上任务的任务的优先级高于实际执行发送的作业,那么您将很快获得可能数十万个作业,但工作人员可能没有运行这些作业,因此队列将被填满

在优先事项之间留有很大的差距意味着你也可以选择那些真正重要的工作。更重要的客户可能具有接近于零的优先级,因此被处理并发送到较小的客户之前

其他需要考虑的问题包括一个帐户的费率限制——如果你限制在每秒10次通知,那么运行20名员工将是不可能的

我还将把新的工作组放入一个新管道(运行几十个管道并不昂贵)。您可以一次查看多个管道(从其中任何一个管道中获取“最重要”的作业),但无法计算单个管道中不同类型的作业,因此将这些类型拆分为不同的队列可以轻松查看每种类型的作业有多少正在运行。因此,如果正在建立发送进程,您可以在一段时间内降低创建拆分作业的速度,或者在一段时间内将其标记为更低的优先级

最后,为了保持批处理作业的一些优势并避免一些开销,我可能会将1000多个作业拆分为每个作业可能包含25-50个通知的数据包