您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    用HTTP方式执行异步义务HTQ
    时间:2017-09-01 12:40 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    我们在编写顺序时,偶然会遇到需求用到异步队列的状况。比如说,我发送一万封邮件,假设单纯运用一个for循环来发送,则执行时间要很长,要等很久才能发完,同时很容易招致阻塞、超时等成绩。当邮件更多,比如一百万封的时分,成绩会愈加清楚。这时最好的处置方案就是把这十万封邮件排队,逐一收回去。这就是义务队列的概念。

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

    HTQ ,全称 Http Task Queue ,是一个以Http方式执行异步义务的队列效劳。你可以推送若干url进HTQ队列,HTQ会以Http GET 的方式拜访这些url。假设url所在的脚本写上各种详细的义务操作,如发送邮件等,便可以完成异步操作了。HTQ运用node.js编写,可跟各种后台言语如PHP、java配合运用以增强异步处置才能。目前支持的队列类型有实时异步队列、定时异步队列、可变异步队列。

    假设你依然对HTQ生疏,则可往下看详细的运用场景以加深了解。

    用HTTP方式执行异步义务HTQ

    二、运用场景

    1、实时异步队列

    所谓实时,指的是把义务一推进队列就马上执行。一个典型的运用场景就是我们下面所说的发送邮件。邮件推送进义务队列,队列马上把它收回去。假设它推进队列后有其他邮件正在发送中,它则等候以后邮件发送终了后才发送。

    除了发邮件,我们在发文章、发微博、发评论的时分都可以用得上HTQ的实时义务队列,尤其是数量十分大的时分。比如评论用户太多,假设一瞬间让效劳器处置,效劳器能够由于支撑不了太高的并发从而形成阻塞。这个时分就可以让评论们进入队列再逐一处置。

    2、定时异步队列

    定时,望文生义,就是在特定的时间执行义务队列。这种队列效劳可用于定时邮件、定时短信。需求阐明的是,这里的定时,不一定是精准的定时。假设你设置了明天12点执行某个义务,那么,它在明天12点的时分将进入队列。假设队列中曾经有义务在执行,那么它会等候到前面的义务终了才执行。此时能够是12点01分钟才执行。

    3、可变队列

    我们推送10个义务进队列,这10个队列会重复循环地执行,并且它们的执行快慢可以依据前往状况停止调整,这就是可变队列。比如,我们做扫描监控,会重复地执行“扫描”这个义务。我们希望,在有异常状况的时分,能加快扫描的速度以便更快速地发现成绩;而在没有长期异常的状况能减慢一下扫描速度以节省机器资源。

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

    运用可变队列,能让我们有所侧重地运用我们的资源,以增加糜费、添加应用率。

    三、安装和运用

    1、安装

    首先安装好node环境和redis效劳,请参考这里和这里。

    下载到你想要放置的目录,命令行进入该目录,执行命令:

    npm install 

    安装终了后,执行以下命令启动:

    node htq.js 

    下面这种启动方式是暂时运转的,封锁命令行窗口就会中止了。假设想不断在后台运转,则可:

    nohup node htq.js > ~/htq.log 2>&1 & 

    假设想封锁参加,可运转:

    killall -9 node 

    2、如何运用

    启动后,HTQ默许监听本机的5999端口。你可以经过此端口拜访HTQ的APi,以添加队列和义务。详细的API文档

    你可以依据API文档来在你的项目中调用API以新建义务。官方提供了一个PHP调用的SDK(在/PHPSDK目录)。欢迎其他言语的开发者也将HTQ的API封装成其他言语的SDK

    假设要修正默许端口以及默许的redis地址,可修正配置文件config.json。修正终了需重启HTQ才能失效

    四、安全与容错

    1、顺序安全

    拜访HTQ 的API时需求填写复杂的token认证,认证信息在配置文件config.json里定义。为了安全起见,你可以在下载代码将token设置为其他随机数。假设你曾经启动了HTQ,则需求封锁后再重启才能让新配置失效。

    假设你担忧直接执行url会带来安全隐患,怕本人暴露的url被外部拜访,那你可以在推送进HTQ的url上带参数签名校验。然后在url触发的义务脚本里检验签名即可。

    2、数据安全

    HTQ运用redis来贮存队列。Redis本身带有耐久化功用。如另外需求对数据停止备份,则备份redis即可,不用在业务中完成数据备份。

    3、正确性

    HTQ能执行url,但不能保证业务上的正确。比如说HTQ确实是触发了发文章的脚本,但是这个脚步能够本身由于网络缘由发布文章失败。此时应该在业务层做好相应的容错处置,比如让该url重新入队列。

    【编辑引荐】

    Python pyspider的安装与开发

    暑期干货!2017年8月前端开发者超适用干货大合集

    开发者必备的顺序调试利器,来找到适宜你的那一款!

    Google晋级App Engine防火墙:方便开发者限制特定IP

    Python开发者面向文档编程的正确姿态

    (责任编辑:admin)