perl – 自行重新排列作业队列的方法
我有一个作业队列(使用Amazon SQS),它将作业交给许多机器,用于通过HTTP获取和处理各种文档.有数百个不同的主机被访问,并且没有可预测的作业顺序.
为了礼貌,我不希望我的系统在一台主机上反复敲击.因此,如果我得到一份工作#123从example.com获取某些内容,但我发现我在过去的X秒内刚刚从example.com获取了另一件事,我应该转向其他内容并保存作业#123 for后来. 问题是,实现这种模式的好方法是什么? 似乎第一步是让作业运行者在所有域的某个位置保留一个列表,并且最后一次访问该域上的某些内容.我想这可能是一个简单的数据库表. 如果消息处理器获得必须延迟的作业,则有许多可能的选项可用于执行操作. >只需将消息的副本推送到队列的末尾,然后将其丢弃而不执行它.希望在下一次出现时,足够的时间过去了.这可能会导致大量冗余SQS消息,尤其是在同一域的大型作业集群同时通过的情况下. 你有设计这种东西的经验吗?你会推荐什么策略? 解决方法
为每个域和域队列分隔队列.
每个处理器应该: >从域队列中选择一个域. 如果将域队列组织为时间优先级队列,则可能会有所帮助 – 按照下一个更新时间的顺序存储域. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |