fqueue初步分析

   fqueue是国产的一个类似memcacheq,kestrel这样的支持memcached协议的轻量级开源MQ。它的项目主页:
http://code.google.com/p/fqueue/downloads/list,介绍和特点都可以看主页,我就不废话了。

    今天老大提到, co了源码看了下,写个初步分析报告。

    首先是它的存储层,主要是一个FQueue这么一个抽象队列,内部实现是FSQueue,也就是基于文件的FIFO队列。这个队列是多个文件组成的。每个文件默认大小在150M,超过即切换一个新文件来写。读的时候如果读到尾部,则查找下一个文件进行读取。数据文件名以idb为后缀,并且从编号1开始递增,除了数据文件外,每个队列还有个db为后缀的索引文件,记录当前写和读的数据文件编号和偏移量。目录结构大概是这样:
    --fqueue
        --fqueuedata_1.idb
        --fqueuedata_2.idb
        --……
        --icqueue.db

    文件的存储比较有特色,采用MappedByteBuffer做文件读写,MappedByteBuffer是java nio引入的文件内存映射方案,读写性能极高,但是也有一定的问题,比如说内存占用,以及数据刷入设备的不确定性和关闭问题。在fqueue中,每隔10毫秒会强制force一次buffer,将修改过的数据刷入设备。对于关闭问题,则采用那个技巧,示例代码:

/**
     * 关闭索引文件
     */
    public void close() {
        try {
            mappedByteBuffer.force();
            AccessController.doPrivileged(new PrivilegedAction<Object>() {
                public Object run() {
                    try {
                        Method getCleanerMethod = mappedByteBuffer.getClass().getMethod("cleaner", new Class[0]);
                        getCleanerMethod.setAccessible(true);
                        sun.misc.Cleaner cleaner = (sun.misc.Cleaner) getCleanerMethod.invoke(mappedByteBuffer,
                                new Object[0]);
                        cleaner.clean();
                    } catch (Exception e) {
                        log.error("close logindexy file error:", e);
                    }
                    return null;
                }
            });
            fc.close();
            dbRandFile.close();
            mappedByteBuffer = null;
            fc = null;
            dbRandFile = null;
        } catch (IOException e) {
            log.error("close logindex file error:", e);
        }
    }

    利用反射,并且使用了sun特有的类,不具有可移植性。MappedByteBuffer还有一个问题是map的代价比较高,可能在切换文件的时候fqueue会有一定程度的阻塞现象。

    存储的性能,我在我的机器测试了下,似乎没有作者宣称的那么高,我的机器是5400转的普通SATA盘,写入1K数据的平均QPS在8000左右。我估计fqueue的性能跟磁盘有很大关系,如果使用15000转的SAS盘应该能有很大改观。

    网络层直接使用了jmemcached的实现,jmemcached是一个java实现的memcached,通常用于单元测试之类。看情况fqueue也支持memcached的二进制协议了。网络框架使用了netty3,这些就不多说了。自己看都明白。额外提一下,作者做的单元测试使用了xmemcached,咔咔,广而告之。

    总体来说fqueue是一个整体上很清爽和轻量级的MQ实现,适合一些特定的场景,至于性能,我们下周准备做个压测,到时候再谈吧。

文章转自庄周梦蝶  ,原文发布时间 2011-09-16

时间: 2024-08-04 19:26:38

fqueue初步分析的相关文章

asp.net中webservice请求发送原理和过程的初步分析

需求:作为服务方,需要监控每个调用webservice的客户端.需要监控的信息大致如下:客户端的ip,客户端调用了哪个类的哪个方法. 于是自己花了点时间对asp.net的webservice机制作了一下探索. 解决方案: 在接口项目中编写一个所有webservice接口的基类,在此基类的构造方法中,通过分析HttpContext.Current.Request得到想要的信息. 1.ip可以通过HttpContext.Current.Request.UserHostAddress得到 2.调用发哪

仿查询分析器的C#计算器——1.初步分析

计算器是很多编程初学者都做过的,从最简单的控制台程序开始,输入值,输入运算符,再输入值,得到一个结果.带界面的基本上是模仿 Windows操作系统的计算器,通过按钮输入值和运算符,然后给出运算结果.能不能直接输入表达式,或者能够对好几个表达式进行计算,或者 选择表达式中的一部分进行计算,如果输入错误能不能指出表达式中的错误位置?这样的要求类似于MS SQL的查询分析器,本系列文章将介绍 如何实现这样一个计算器.(这些内容已经涉及到编译原理,但本人并非计算机专业毕业,只是稍微看了一下编译原理的资料

高性能EL——Fel探秘,兼谈EL

Fel是最近javaeye比较火的关键词,这是由网友lotusyu开发的一个高性能的EL,从作者给出的数据来看,性能非常优异,跟前段时间温少开源的Simple EL有的一拼.首先要说,这是个好现象,国内的开源项目越来越多,可以看出开发者的水平是越来越高了,比如我最近还看到有人开源的类似kestel的轻量级MQ--fqueue也非常不错,有兴趣可以看下我的分析<fqueue初步分析>. expression string -> antlr -> AST -> comiple -

分析新站关键词竞争概况及作出优化方案

两个星期前,我接到一张新的网站优化单,推广关键词为:非晶.纳米晶.超微晶.这几个关键词除了非晶比较有困难外,其他关键词竞争不大.下面笔者先分析网站主关键词非晶的竞争概况然后再作出优化方案.百度一下非晶,相关搜索量有6740000篇,用时0.540秒.粗略看了下前三页的排名情况得出,仅有两个独立域名的网站排名在首页,第二第三页全是行业网站排名,而且排名靠前的企业站还是没有优化痕迹的网站,因此可以说非晶这个关键词虽然有六百万的搜索量,但竞争力度并不大,估计花上两个月的精力,排名上去应该是没有问题的.

怎样进入一个行业以及分析竞争对手

作为站长,你准备进入哪个行业?进入哪个领域?很多时候我们都忘了问自己,于是轻率的进入一个行业,带来的结果是灾难性的,我们浪费大量时间,取没有通过seo取得成功,更别说实现网站的价值.对于新站长来说,建站之初有很多调研工作我们不能省略,也无法省略.第一步就是要进行行业竞争情况的研究.对seo人员来说,行业的竞争情况最直观的体现就是在目标关键词上面.我们应该规划好自己的目标关键词.然后进行竞争分析,网站的关键词进行确定是SEO工作的基础.这个过程我们要做的非常多:包括关键词分析.行业竞争对手分析,网

银杏树价格网优化方案分析

春节后由于忙于生活琐事一直没有开始工作,所以文章更是写的少的可怜.本来想写一篇年底总结来着,但是打开博客点击"新建文章"后却又一个字都不想打,看来是休假休的人变得更懒了.既然懒的对过去总结,那我还是开始手头的工作吧,毕竟还有个肚子要吃饭,不工作怎么行?上午接到一个单子:银杏树价格网(www.yinxingshu.cn)的关键词优化.一个人工作也怪无聊的,而且我个人的力量和知识有限.那就跟大家共同来分析一下这个网站吧,人多力量大嘛.我先用自己的水准来分析一下这个网站,当做是抛砖引玉.有分

百度出外链工具了 分析其有四大作用

10月30日下午,百度站长平台工具更新了,地址http://zhanzhang.baidu.com/wiki/78.出了一个新工具,外链工具.   初步分析,其有四大作用. 第一:可以知道,百度看待的外链,基本上是锚文字才算.没有做锚文字的只能算作相关域,不能算真正意义上的外链. 第二:可以知道,新浪博客,论坛签名,这些地方做链接,依然是有权重的,依然会被百度计为外链. 第三:可以点击下载excel表格,清楚地看到链接的文字是什么,链接的地址是什么.如下图:   第 四:可以检测外链有哪些动向.

网站日志分析研究和分析网站存在的SEO问题

从做SEO开始老大就一直给我灌输:"要做科学的SEO,不管流量是涨还是降都要知道其中来源,而要了解这些同时判断网站流量的走向就必须要靠日志分析,而不是凭感觉的猜测是哪些因素使用流量发生变化".因此从一开始就从数据入手,对于网站的数据时实监控,从数据中判断网站的问题所在,然后做出相应的改变.这也是我们网站能一直稳定发展从流量的直线下降到回升直到大涨的一个原因所在. 最近网站的流量一直涨得非常的快,但是网站某一部份的抓取量却直线下降,不过索引量还在不断的提升流量也在不断的上涨.也就因为这样

Win7中"无法复制,文件路径太深"深度再分析

在上文关于Win7中"无法复制,文件路径太深"的问题所在中,已初步分析过,会出现这种现象的其中二个原因就是文件路径太深和文件名太长.其实除了以上两个人为修改的原因外,还有一种就可能是USB设备问题导致的.因此小编再给大家更深入的探讨下Win7提示"无法复制,文件路径太深"在USB设备中的问题. 原因一:USB设备问题,于其制作原理不无关系. 解决方法: 方法1:安全退出U盘,安全退出后,将U盘从电脑USB接口上拔下来,再将U盘插入电脑,进行数据备份操作. 方法2:如