多任务分布式调度算法——合理分配任务资源

问题:A网站抓取需要8个小时,B网站需要半个小时,如果A网站先开始那么B网站需要8个小时候才能执行到。如果A网站的紧迫性没那么高,只期望能慢慢的刷新譬如论坛网站,而B网站期望能尽快执行完毕。因此我们期望通过调配资源达到谋种和谐状态。
分析:若设置权重B权重高,A权重低,可以满足先执行B网站,但是如果A网站是循环任务,就会导致B网站永远获取不到资源。所以我们期望A网站每次执行的概率大,B网站执行任务的概率小。所以就转化为“权重to概率问题”。
设想方案参见:


调度方案

简述:A、B、C三个网站的任务,权重分别设为:2、3、5,它们衍生出来的抓取请求分别排队入A、B、C队列(当然也可以拓展深度、广度算法,比较简单可自行按需拓展)。


权重池

这个图是当前任务权重池,新来添加完成移除。


权重转概率

每个线程获取任务时根据当前权重池的所有权重,随机一个随机因子看会落到哪个范围,然后从该范围对应的权重队列中获取任务执行。
任务分布式调度时最后几个请求被多个节点并行获取并执行时,很难区分到底是哪一个线程最后执行完毕并通知任务结束。采用from_que/to_que这种方案比较优。
任务分布式调度

并且若某个节点的任务执行一半宕机后,还可以从to_que中将任务恢复并重新拉入from_que中供执行,这些请求需要追加一个retry_times属性,重试多次后需要记录到failed_record表,供问题分析。
还可以从队列中查看待执行的任务、正在执行的任务、需要重试的任务等等做统计和展示。

此方案是针对爬虫分布式多网站抓取所涉及也适用于类似分布式调度, 若有好的建议可以深入讨论分析~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 随着互联网的发展,应用服务中的定时任务数量日益增加,常规的垂直应用架构已无法应对,分布式服务架构势在必行。同...
    凯睿看世界阅读 5,019评论 0 10
  • 阿里妹导读:搜索中台建设过程中,单个系统不再能满足复杂业务的需求,更多时候需要多个子系统互相协作,异步地按照指定流...
    高级java架构师阅读 10,046评论 0 7
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 8,196评论 0 9
  • 真正体会到了每分每秒都活在当下的感觉,脑子里时刻被目标填满,第一次感受到原来人生还有这样的活法。 早上起早赶车,然...
    幽蝴阅读 3,153评论 0 1
  • 张学友——《情书》 你瘦了憔悴得让我好心疼 有时候爱情比时间还残忍 把人变得盲目而奋不顾身 忘了爱要两个同样用心的...
    温故而之馨阅读 2,713评论 0 0

友情链接更多精彩内容