开源的任务队列服务 HTQ

一、什么是 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分钟就能同步到我们网站了。对于不活跃用户,可能获取时间会变长了些,但不要紧,我们愿意分配更多的资源去满足活跃用户的需求。

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

三、安装和使用

1、安装

首先安装好node环境和redis服务,请参考:http://nodejs.cn/download/http://redis.io/download

clone或下载代码:https://github.com/star7th/htq

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

npm install

安装完毕后,执行以下命令启动:

node htq.js

上面这种启动方式是临时运行的,关闭命令行窗口就会停止了。如果想一直在后台运行,则可:

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

如果想关闭退出,可运行:

killall -9 node

2、如何使用

启动后,HTQ默认监听本机的5999端口。你可以通过此端口访问HTQ的APi,以添加队列和任务。详细的API文档可看:http://www.showdoc.cc/htq?page_id=37198

你可以根据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重新入队列。

文章转载自 开源中国社区[http://www.oschina.net]

时间: 2024-09-13 16:08:49

开源的任务队列服务 HTQ的相关文章

中企开源SaaS运营服务率先获三大国际质量体系认证

中企开源日前宣布全面通过ISO20000.ISO27001.ISO9001国际质量管理体系认证,成为中国IT应用运营服务及SaaS运营领域第一家同时获得三大国际质量管理体系认证的企业.这三项认证标志着中企开源提供的IT应用运营服务已经达到了目前IT服务业最高的国际标准,进一步表明了中企开源在IT服务领域对交付质量的精益求精和对客户信息资产安全管理的郑重承诺. 中企开源获得如此高等级的认证证书,主要归功于中企开源在IT应用运营服务领域长期实践中积累的模式.方法和运营管理经验:归功于中企开源对"中国

私家珍藏:七款开源Linux网络服务系统

出色的软路由系统ClearOS 对于中小企业来说,有很多免费且开源的路由器和防火墙解决方案,甚至可以作为企业的选择.这类产品中,很多都提供局域网服务,如VPN服务.热点网关和通过强制网络门户以共享无线网络. 这里,编者发现了一些开源且免费的路由器项目,这些产品适合于包括小企业.中型.甚至与思科和Juniper规模相当的企业.闲言少叙,我们一起看看这七款开源且免费的Linux下的网络操作系统. 出色的软路由系统ClearOS ClearOS是一款基于CentOS和Red Hat Enterpris

雅虎计划明年开源其云服务平台

北京时间5月12日晚间消息,据国外媒体今日报道,雅虎计划于明年初开源其内部的"云服务"平台,一个介于谷歌应用引擎(App Engine)和亚马逊托管服务E2C(Elastic Compute Cloud)之间的平台. 雅虎内部将其称为"云",该平台是雅虎基础架构的一部分,其作用包括为雅虎内部开发人员提供所需的计算资源.与亚马逊EC2不同的是,EC2只是提供非常初始未经优化配置的虚拟服务器,而雅虎"云"平台则预置了负载均衡.安全保护等服务,这样一来

开源云存储服务ownCloud预告5.0版本

为了提供免费的替代给用户,3年前Frank Karlitschek 启动了对开源版的文件存储.同步及共享软件包ownCloud的开发.而到现在为止,这个软件包已经正式推出了4个版本,一共支持42种语言.而且在具备 Dropbox 或 Box.net 所具有的基本功能之外,ownCloud 还支持通讯录.日历等功能.日前,ownCloud 又发布了 5.0 的 beta 版,预计将会在几周后正式推出. 用户可以利用ownCloud来搭建一个可以完全由自己控制的云服务器.软件包可以安装在用户指定的任

OwnCloud另辟蹊径:提供开源私有云服务

在云的时代,有多少云计算.http://www.aliyun.com/zixun/aggregation/2900.html">云存储服务,让我们为之欢欣,为之赞叹,为之疯狂,为之崇拜.但是,面向个人的云服务,都有一个共性:基于公众云构建.因为这是一种服务,面向公众客户的服务.然而,有多少企业,斥资建立自己的私有云应用?这是个人客户所望尘莫及的. 一项叫做OwnCloud的开源应用,在个人云服务私有化领域开创了一条新的路径.OwnCloud是一个基于Linux系统的开源云项目,允许用户建立

Linux 的春天要来了:开源和云服务是催化剂

说到开源系统,人们几乎遗忘了PC系统Linux, 现在又重提Linux 是因为云服务来了,而且大多数是基于开源的.这笔大生意一来,许多IT大公司都想搭上这趟火车,包括苹果. 有人说Linux PC系统走向衰落有两个原因:1. 事情变化得太快了,就算是开源和专有软件这样的东西.2. Linux 各发行版本的不兼容(比如你开发出一个Top 3 的软件,6个月后你就发现新版本不再支持你的软件了),打击了http://www.aliyun.com/zixun/aggregation/11839.html

分布式服务框架Dubbo疯狂更新!阿里开源要搞大事情?

Dubbo启动维护后,阿里中间件(Aliware)组建了由专职人员和RPC技术专家组成的虚拟维护团队.通过这篇文章,Dubbo的虚拟维护团队将和大家分享一些Dubbo启动维护的历程.取得的成绩以及后续的规划,具体包括Dubbo社区的建设情况.当前的版本维护主线.近期roadmap及后续计划等. Dubbo是阿里巴巴于2012年开源的分布式服务治理框架,目前已是国内影响力最大.使用最广泛的开源服务框架之一,在Github上的fork.start数均已破万. 在过去几年,Dubbo开源社区虽然一直有

跨语言-能同时支撑多语言互为provider,consumer的分布式服务框架,开源的有吗?

问题描述 能同时支撑多语言互为provider,consumer的分布式服务框架,开源的有吗? 能同时支撑多语言互为provider,consumer的分布式服务框架,开源的有吗? 开源的分布式服务框架(dubbo,HSF等)都不支持跨语言(或许有其他,但是我不知道). 如果没有开源的,我的思路是基于同一种协议(hession,thrift,protobuff,avro等)把各种语言支撑的框架集成到一起(例如 php python c++ 的)形成一个支持多语言互为provider,consum

雅虎开源 IaaS 帮助开发者建立自己的云服务

雅虎最近宣布开源的 IaaS(Infrastructure as a Service), 意味着用户可以下载到雅虎内部使用的 IaaS 服务器.开发者通过"云服务引擎"可以在凌驾于虚拟机层面的容器中建立自己的云服务,并能够提供一系列的 IaaS 和 http://www.aliyun.com/zixun/aggregation/16038.html">PaaS 混合服务. 如今新生的云服务提供商想要与现有的IaaS和PaaS引擎展开市场竞争绝非易事,像亚马逊.Racks