读书人

Kestrel持久化行列服务器

发布时间: 2012-12-18 12:43:41 作者: rapoo

Kestrel持久化队列服务器

http://www.5ishare.com/tech/program/283112.shtml

net.rubyeye.xmemcached.test.unittest.KestrelClientUnitTest

?

http://code.google.com/p/xmemcached/wiki/User_Guide_zh

教程 ? 使用xmemcached 进行连接

http://code.google.com/p/xmemcached/issues/list?can=1&q=&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary&cells=tiles

?

A persistent queue service used by Twitter.

由于工作上的需要,需要找一个高性能的持久化队列服务器,先是发现了Starling,后来就找到了这个Starling的继承者Kertrel,这两个都是Twitter开发的用来分布执行一些异步任务的队列服务,功能和Geraman和JMS差不多,而我感兴趣的是它的队列存储功能。Kestrel一个很大的好处是使用了memcache的协议,而几乎所有语言都有memcache的接口,每个Key对应一个队列,通过set入队列,get出队列,使用上还是非常方便的。在Github上Kestrel的项目介绍里说到,Kestrel是用Scala语言开发的,在JVM上运行,程序代码算上注释不到1500行,应该也是个学习Scala的好资料。性能方面,官方的测试结果,在一个2.5GHz 2008-model macbook pro上可以达到3.23MB/sec (over loopback) and about 4400 puts/sec,还觉得不够用的话还可以distribute一下。

在Github上提供了源代码,用的时候还是需要自己来编译一下的,在此把Build好的打包放在这儿了,包含了所有依赖的包,用的时候直接java -jar kestrel.jar就行了。

在config/里面还有两个配置文件,配置项的含义在Github上的项目主页上有介绍,一帮情况下默认的配置就完全可用了,大规模应用的话,有些配置项还是要调整一下的。

?

安装jdk 环境

下载http://gitub.com/robey/kestrel

在目录下安装,自动安装到本目录

运行$ ./dist/kestrel-VERSION/scripts/devel.sh

使用了 xmemcached 1.3.6 ?进行连接 成功

XMemcachedClient client = new XMemcachedClient("192.168.37.128", 22133);

(记得关闭防火墙)

每秒插入6000~7000 ?条数据相当稳定

?

发现starling 已经几年不更新了。选用Kertrel成为必然的选择

一个信息审核的功能,保存未审核信息的队列。
这个服务在Twitter里是用来处理异步的任务的,一头儿把任务塞进队列,另一头儿有一群Worker从队列里取任务执行。

?

? ?Kestrel是一个scala写的twitter开源的消息中间件,特点是高性能、小巧(2K行代码)、持久存储(记录日志到journal)并且可靠(支持可靠获取)。Kestrel的前身是Ruby写的Starling项目,后来twitter的开发人员尝试用scala重新实现。它的代码非常简洁并且优雅,推荐一读。

Kestrel采用的协议是memcached的文本协议,但是并不完全支持所有memcached协议,也不是完全兼容现有协议。标准的协议它仅支持GET、SET、FLUSH_ALL、STATS,扩展的协议有:

Java代码
    memcachedClient.setPrimitiveAsString(true);??


方法来设置,所有的原生类型都将调用toString转成字符串来存储,字符串前不再自动附加flag。使用KestrelCommandFactory后,也将可以正常调用flushAll方法。

KestrelCommandFactory已经提交到svn trunk,预计在xmemcached 1.2.0-RC2的时候发布。

使用KestrelCommandFactory对kestrel做的性能测试,server和client都跑在linux上,jdk6,单线程单client连续push消息

消息个数?????? 消息长度?????? 是否启用journal?? 时间?????? TPS(/s)
500000????????? 256??????????? ? 否????????????? 123.0s???? 4065
500000????????? 1024??????????? 否????????????? 126.3s???? 3959
500000????????? 4096??????????? 否????????????? 120.6s???? 4145
500000????????? 4096??????????? 是????????????? 122.1s???? 4095
500000????????? 8192??????????? 是????????????? 121.2s???? 4125

从数据上来看比官方数据好很多,可能机器配置不同。是否启用journal带来的影响似乎很小,写文件都是append,还是比较高效的。

kestrel的项目主页??http://github.com/robey/kestrel
kestrel的wiki页????http://wiki.github.com/robey/kestrel
xmemcached项目主页??http://code.google.com/p/xmemcached/

读书人网 >编程

热点推荐