资讯专栏INFORMATION COLUMN

(转)开源的任务队列服务HTQ

LMou / 1601人阅读

摘要:可变队列会对长期没有更新动态的那部分不活跃用户进行减缓速度,减缓对他们微博的获取频率,同时加大对活跃用户的获取频率。

注:本文为转载,原文请查看star7th的个人博客。

一、什么是 HTQ 先介绍下基本概念。

我们在编写程序时,偶尔会遇到需要用到异步队列的情况。比如说,我发送一万封邮件,如果单纯使用一个for循环来发送,则执行时间要很长,要等很久才能发完,同时很容易导致阻塞、超时等问题。当邮件更多,比如一百万封的时候,问题会更加明显。这时最好的解决方案就是把这十万封邮件排队,一一发出去。这就是任务队列的概念。

并且,我们并不需要等到十万封邮件都发送完毕后才在网站前台通知用户。我们可以把邮件一入队列,就通知用户。这样,用户等待的时间就不是漫长的“发十万封邮件”的时间,而是“把十万封邮件排队”的时间。因此能明显地缩短了用户等待时间。这就是异步的概念。

HTQ ,全称 Http Task Queue ,是一个以Http方式执行异步任务的队列服务。你可以推送若干url进HTQ队列,HTQ会以Http GET 的方式访问这些url。如果url所在的脚本写上各种具体的任务操作,如发送邮件等,便可以实现异步操作了。HTQ使用node.js编写,可跟各种后台语言如PHP、java配合使用以增强异步处理能力。目前支持的队列类型有实时异步队列、定时异步队列、可变异步队列。

如果你依然对HTQ陌生,则可往下看详细的应用场景以加深了解。

二、应用场景 1、实时异步队列

所谓实时,指的是把任务一推进队列就马上执行。一个典型的应用场景就是我们上面所说的发送邮件。邮件推送进任务队列,队列马上把它发出去。如果它推进队列后有其他邮件正在发送中,它则等待当前邮件发送完毕后才发送。

除了发邮件,我们在发文章、发微博、发评论的时候都可以用得上HTQ的实时任务队列,尤其是数量非常大的时候。比如评论用户太多,如果一瞬间让服务器处理,服务器可能因为支撑不了太高的并发从而造成阻塞。这个时候就可以让评论们进入队列再一一处理。

2、定时异步队列

定时,顾名思义,就是在特定的时间执行任务队列。这种队列服务可用于定时邮件、定时短信。需要说明的是,这里的定时,不一定是精准的定时。假如你设置了明天12点执行某个任务,那么,它在明天12点的时候将进入队列。假如队列中已经有任务在执行,那么它会等待到前面的任务完毕才执行。此时可能是12点01分钟才执行。

3、可变队列

我们推送10个任务进队列,这10个队列会反复循环地执行,并且它们的执行快慢能够根据返回情况进行调整,这就是可变队列。比如,我们做扫描监控,会反复地执行“扫描”这个任务。我们希望,在有异常情况的时候,能加快扫描的速度以便更快速地发现问题;而在没有长期异常的情况能减慢一下扫描速度以节省机器资源。

再举一个场景例子,通过API拉取微博新动态。我们网站上有10万绑定了新浪微博的用户,我们需要时常获取他们的最新动态以展示在我们的网站的用户主页上。 如果是采用定时获取动态的方式,那么,假设1分钟能获取1千个用户的动态(因为受API使用频率和网络等原因限制,我们获取不了太快。这里先假设一个数字),那么,获取完所有用户状态需要100分钟。对用户来说,他在微博更新动态后,100分钟后才显示到我们网站。这明显滞后太多。有没有办法加快点呢?此时可以使用HTQ的可变队列。可变队列会对长期没有更新动态的那部分不活跃用户进行减缓速度,减缓对他们微博的获取频率,同时加大对活跃用户的获取频率。这样,一个活跃用户更新微博后,可能10分钟就能同步到我们网站了。对于不活跃用户,可能获取时间会变长了些,但不要紧,我们愿意分配更多的资源去满足活跃用户的需求。

使用可变队列,能让我们有所侧重地使用我们的资源,以减少浪费、增加利用率。

三、安装和使用

安装和使用 请点击该链接

相关文章:
自己实现异步执行任务的队列(一)
自己实现异步执行任务的队列(二)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22373.html

相关文章

  • 如何使用API提交任务

    摘要:摘要当常规的转码工作流无法满足用户的场景时,需用户自己判断业务逻辑,并使用提交转码任务。例如并不是所有的视频都需要转码,不同视频需要设置不同的转码配置。转码支持标准加密,暂不支持阿里云私有加密。 摘要: 当常规的转码工作流无法满足用户的场景时,需用户自己判断业务逻辑,并使用API提交转码任务。例如:并不是所有的视频都需要转码,不同视频需要设置不同的转码配置。本文将介绍API提交转码任务...

    Corwien 评论0 收藏0
  • 】深入理解JS单线程机制【原文作者:MasterYao】

    摘要:的单线程,与它的用途有关。只要指定过回调函数,这些事件发生时就会进入任务队列,等待主线程读取。四主线程从任务队列中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为事件循环。令人困惑的是,文档中称,指定的回调函数,总是排在前面。 原文:http://www.cnblogs.com/Master... 一、为什么JavaScript是单线程? JavaScript语言的一大特点...

    LittleLiByte 评论0 收藏0
  • 微信开源mars源码分析1—上层samples分析

    摘要:微信已经开源了,但是市面上相关的文章较少,即使有也是多在于使用等这些,那么这次我希望能够从这个直接用于底层通讯的部分进行个分析。首先明确下,微信用了的开源协议库,来代替和。核心的部分我们先放下,下一篇再深入分析。 微信已经开源了mars,但是市面上相关的文章较少,即使有也是多在于使用xlog等这些,那么这次我希望能够从stn这个直接用于im底层通讯的部分进行个分析。为了能分析的全面些,...

    caiyongji 评论0 收藏0
  • 即将立秋《课多周刊》(第2期)

    摘要:即将立秋的课多周刊第期我们的微信公众号,更多精彩内容皆在微信公众号,欢迎关注。若有帮助,请把课多周刊推荐给你的朋友,你的支持是我们最大的动力。课多周刊机器人运营中心是如何玩转起来的分享课多周刊是如何运营并坚持下来的。 即将立秋的《课多周刊》(第2期) 我们的微信公众号:fed-talk,更多精彩内容皆在微信公众号,欢迎关注。 若有帮助,请把 课多周刊 推荐给你的朋友,你的支持是我们最大...

    ruicbAndroid 评论0 收藏0
  • 即将立秋《课多周刊》(第2期)

    摘要:即将立秋的课多周刊第期我们的微信公众号,更多精彩内容皆在微信公众号,欢迎关注。若有帮助,请把课多周刊推荐给你的朋友,你的支持是我们最大的动力。课多周刊机器人运营中心是如何玩转起来的分享课多周刊是如何运营并坚持下来的。 即将立秋的《课多周刊》(第2期) 我们的微信公众号:fed-talk,更多精彩内容皆在微信公众号,欢迎关注。 若有帮助,请把 课多周刊 推荐给你的朋友,你的支持是我们最大...

    MRZYD 评论0 收藏0

发表评论

0条评论

LMou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<