<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

        趁周末,做了一個java memcached client的性能benchmark,比較了4個開源的client: spymemcachehd,xmemcached,java-MemCached和岑文初的asf-cached。這個測試可能不是那么準確,為了保證命中率,無法測試更多并發(fā)下的表現(xiàn),以后再測試多個memcached server下的表現(xiàn)可能更有價值。詳細的測試報告在這里 http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html,包括了測試場景、結果、軟硬件情況說明等等。從測試分析產(chǎn)生的報表來看,在低并發(fā)下,基于傳統(tǒng)的阻塞io的clients表現(xiàn)還可以,經(jīng)過岑文初優(yōu)化的版本超過了原始的java-MemCached。而在并發(fā)相對高一點的情況下,基于nio的spymemcached和xmemcached都超過了傳統(tǒng)clients,不過這個差距隨著value大小的增大而減小。另外,xmemcached在value比較小(小于1K左右)的性能高于spymemcached,而在更大value的情況下卻是比不上spymemcached,不過這個差距隨著并發(fā)增大而減小。更多信息請自己查看報告,checkout源碼來分析。

        xmemcached正式發(fā)布1.1.1,這個版本可以說是更強壯,更穩(wěn)定的版本,也是支持二進制協(xié)議前的過渡版本。主要的改進如下:

    1、yanf4j從0.60升級到0.61,因此使用的時候請?zhí)鎿Q這個jar包。
    2、更多的單元測試,單元測試覆蓋率達到63%,并覆蓋了絕大多數(shù)關鍵代碼。
    3、進行了24小時壓測,觀察內(nèi)存使用情況等,未發(fā)現(xiàn)有內(nèi)存泄漏的隱患。
    4、最重要的重構,將原來基于switch語句的協(xié)議解析部分修改為了更為OO的Command繼承體系,盡管因為多態(tài)調(diào)用帶來一點性能損失,然而整體結構更加合理,并易于添加新的協(xié)議支持和擴展(比如binary協(xié)議)。性能將會持續(xù)在后續(xù)版本進行改進。
    5、修復BUG和添加新特性,并deprecated部分方法和類,具體信息參考Changelog


       項目首頁:    http://code.google.com/p/xmemcached/
       javadoc文檔: http://xmemcached.googlecode.com/svn/trunk/apidocs/index.html
       下載地址:     http://code.google.com/p/xmemcached/downloads/list
       wiki地址:     http://code.google.com/p/xmemcached/w/list
       svn地址:     http://xmemcached.googlecode.com/svn/trunk/
       

    posted @ 2009-06-07 23:37 dennis 閱讀(2013) | 評論 (0)編輯 收藏

        成都公交起火事件,死亡24人,剛報道的時候還在各大網(wǎng)站首頁有專題報道,現(xiàn)在卻在首頁上找不到了。一個黨的喉舌見馬克思去了,卻是連續(xù)幾天占據(jù)著首頁頭條。這人命果真是有高低貴賤。
       另一方面,我發(fā)現(xiàn)一個可怕的公式,在這里是
       1人=24人
       在某些人看來,人命價值差距是24倍。那么,6000萬x24=?
      

    posted @ 2009-06-06 19:49 dennis 閱讀(1023) | 評論 (1)編輯 收藏

        端午回了一趟家,兒子一個月一個模樣,現(xiàn)在會翻身和抓東西了,帶來的后果是有一次翻身不小心掉下了床,摔的哇哇大哭,幸好沒什么事,另外就是抓到什么東西都往嘴里塞。俺知道他現(xiàn)在只能靠手和嘴來感受世界,已經(jīng)不阻止他吃手了,但是什么東西都往嘴里塞那還得了。本來以為一個月沒見,兒子會對我比較生疏,沒想到還是很喜歡我呀,哈哈,常常“深情”地看著俺寫代碼,心里那個美。

        端午到現(xiàn)在,另一個比較重要的進展是xmemcached 1.11基本完成了,這個版本在添加了大量單元測試的基礎上重構了一大批代碼,單元測試的覆蓋率達到60%了,整體的結構也比較理想,從過程式的switch派發(fā)修改成了更為OO的繼承結構,為1.20引入binary協(xié)議做了好準備。最近都趁晚上在公司做壓測和benchmark測試,搞了一個更為嚴謹?shù)腷enchmark測試,計劃這周日能正式發(fā)布1.11版本了。

        工作上,暫時只是小打小鬧,做些小的改動和測試,不過下周開始要投入新版本的開發(fā)工作和一些績效需要的工作,因此對于xmemcached投入將減少,初步計劃是在7月份發(fā)布1.20版本支持二進制協(xié)議和noreply選項。

        讀書的話,sicp的第五章最近快讀完了,讀完了將練習整理下再發(fā)到這里。而其他書基本沒碰,《新宋》倒是一下子看完了,果然是小說讀的爽快,技術書讀的又苦又累。最近天天晚上睡不著,也許是太熱了,睡眠不足的后果就是白天昏沉沉的,寫代碼的時候卻又精神抖擻,所以標題取作累并快樂著。晚了,希望能睡著。
       

       





    posted @ 2009-06-04 00:43 dennis 閱讀(593) | 評論 (1)編輯 收藏


        最近遇到一個選擇題,在xmemcached中,get方法原來的簽名是這樣的:
    public Object  get(final String key) throws TimeoutException,InterruptedException,MemcachedException;
        那么用戶使用的時候,需要自己轉型,也就是這樣

    String value=(String)client.get("key");

        后來我將get方法的簽名改成了泛型方法,xmemcached幫你做這個轉型工作,
    public <T> T get(final String key) throws TimeoutException,InterruptedException, MemcachedException;

        方法的實現(xiàn)因為有了個轉型,不得不加上抑制警告,
        @SuppressWarnings("unchecked")
        
    public final <T> T get(final String key) throws TimeoutException,
                InterruptedException, MemcachedException {
            
    return (T) get(key, DEFAULT_OP_TIMEOUT);
        }
        這樣用戶使用的時候,就不需要顯式轉型,而是xmemcached幫你做了,
    String value=client.get("key");
        后來,我仔細想了這個問題,盡管這里使用了泛型方法,似乎簡化了用戶的工作,然而卻丟掉了編譯警告,抑制警告讓用戶可能忽略這里可能的轉型失敗,這與泛型的初衷似乎不符。可是,另一個觀點冒出來支持我,用戶往memcached存進去一頭大象,他(她)不會希望取出來的時候變成驢子,我們幫他做這個轉型工作可以讓用戶使用起來更簡便。你怎么看呢?
        
         

    posted @ 2009-05-24 20:05 dennis 閱讀(2195) | 評論 (5)編輯 收藏

        Ruby中的Object.object_id是返回一個Fixnum類型的標識符來代表一個對象。沒有兩個active的對象的object_id是一樣的,如:
    a="1.8.6"
    b
    ="1.8.6"
    a.object_id  
    => 24393910
    b.object_id  
    => 24390830
        盡管a==b,然而兩者的object_id是不同。
        但是這里有兩種例外情況,對于常量,哪怕你將它賦給不同的變量,它們的object_id是一樣的:

    a=RUBY_VERSION
    b
    =RUBY_VERSION
    a.object_id  
    => 21628310
    b.object_id  
    => 21628310

    C="hello" 
    a=C 
    b=C 
    a.object_id =>  24243480 
    b.object_id =>  24243480 
       
        除此之外,對于symbol類型,返回的也將是同一個object_id:

    a=:name
    b
    =:name
    a.object_id 
    => 34258
    b.object_id 
    => 34258
       
        為什么會出現(xiàn)這種情況?查看源碼可知:
    VALUE
    rb_obj_id(VALUE obj)
    {
     
       
    if (TYPE(obj) == T_SYMBOL) {
           
    return (SYM2ID(obj) * sizeof(RVALUE) + (4 << 2)) | FIXNUM_FLAG;
       }
       
    if (SPECIAL_CONST_P(obj)) {
           
    return LONG2NUM((long)obj);
       }
       
    return (VALUE)((long)obj|FIXNUM_FLAG);
    }
        Object.object_id方法對這兩種情況做了特殊處理,常量和symbol都應當是唯一的。

    posted @ 2009-05-24 12:46 dennis 閱讀(1757) | 評論 (0)編輯 收藏

        在博客書城買了一套《新宋》,一共十本,250來塊。其實大部分已經(jīng)在網(wǎng)上讀過兩遍,除了《燕云》部分未讀完。這是我第一次購買網(wǎng)絡小說,確實非常喜歡《新宋》,比之泛濫的YY三妻四妾的小說,在這個頻繁失語的年代,YY歷史總那么靠譜一點點。
        寫歷史穿越小說,最忌諱的是主角成了萬能博士,技術、工商、文學詩歌樣樣精通,不發(fā)明點火藥、火槍,不引用點后人詩歌就白穿越了(邪惡的《尋秦記》里的一滴蜜糖應該是始作俑者)。新宋里面同樣也出現(xiàn)了火藥,但是火藥慶幸不是石越發(fā)明的,而是他的學生趙同學,石越只是科普了下最基本的物理化學常識,控制了自己指手畫腳發(fā)明一切的愿望,這一點難能可貴。當然,這僅僅是新宋這個YY世界里很小的一部分,更顯然的是阿越在整部小說里闡述了一套政治理想,并近乎可信地描述了這套理想在神宗年間逐步地在實現(xiàn)。
        《新宋》只能叫《新宋》,它發(fā)生的年代也似乎注定只能在那個時代,那個天子與士大夫共治天下、政治相對清明的時代,那個神宗力圖富強啟用王安石變法的時代,那個中國古代科學技術又一次達到高峰的時代,那個古文運動末期、宋代理學開始興起的時代,那個相對自信開放又一個航海史上高峰的年代。



    posted @ 2009-05-23 20:42 dennis 閱讀(420) | 評論 (0)編輯 收藏


        相比于RC3版本,做出的主要改進是:
    1、改進批量get操作(multi-gets)的性能,現(xiàn)在已經(jīng)與spymemcached相近。額外的益處是進一步在get操作上擴大了對spymemcached的領先優(yōu)勢。
    2、做了兩個重構:
    a)將MemcachedTCPSession、MemcachedHandler、MemcachedConnector等網(wǎng)絡相關的類和接口從net.rubyeye.xmemcached轉移到net.rubyeye.xmemcached.impl包。

    b)引入兩個新的接口: MemcachedClient,MemcachedClientBuilder

    3、更多單元測試

    4、將xmemcached 1.10從trunk轉移到分支branches/xmemcached-1.10。Trunk將做1.2版本的開發(fā),實現(xiàn)二進制協(xié)議。

    到目前為止,xmemcached的特性一覽
    1、高性能
    2、支持完整的memcached文本協(xié)議,二進制協(xié)議將在1.2版本實現(xiàn)。
    3、支持JMX,可以通過MBean調(diào)整性能參數(shù)、動態(tài)添加/移除server、查看統(tǒng)計等。
    4、支持客戶端統(tǒng)計
    5、支持memcached節(jié)點的動態(tài)增減。
    6、支持memcached分布:余數(shù)分布和一致性哈希分布。
    7、更多的性能調(diào)整選項。

    xmemcached與spymemcached的對比

    1、xmemcached比spymemcached有更好的性能表現(xiàn),在get、set、delete、multi-gets等操作的測試中都遠遠超過或者接近spymemcached。
       xmemcached在win32和linux兩個平臺上都有極佳的性能表現(xiàn)。
    2、xmemcached支持動態(tài)地添加或者移除memcached server,可以通過編程或者JMX來做到,spymemcached暫未支持。
    3、xmemcached支持JMX,可以通過jmx調(diào)整性能參數(shù)、添加/移除memcached節(jié)點、查看統(tǒng)計,spymemcached暫未支持
    4、xmemcached有客戶端統(tǒng)計,可以統(tǒng)計xmemcached客戶端的各種操作的總次數(shù),spymemcached暫未支持
    5、xmemcached允許調(diào)整更多的網(wǎng)絡層參數(shù)和優(yōu)化選項,spymemcached不允許設置這些參數(shù)。
    6、xmemcached暫未支持二進制協(xié)議,計劃在1.2版本中實現(xiàn),spymemcached支持。
    7、xmemcached的API模型是同步的,而spymemcached的API模型是異步模型,同步模型對應用編程來說更容易使用和直觀。

    8、xmemcached的序列化機制,是使用了spymemcached的序列化機制,并做了部分改造。

     項目主頁:http://code.google.com/p/xmemcached/

     下載地址:http://code.google.com/p/xmemcached/downloads/list

     wiki地址:http://code.google.com/p/xmemcached/w/list

       討論組:http://groups.google.com/group/xmemcached

         協(xié)議: Apache License 2.0

      svn地址:http://xmemcached.googlecode.com/svn/branches/xmemcached-1.10/

     

    歡迎任何建議和bug報告。



    posted @ 2009-05-22 18:42 dennis 閱讀(2921) | 評論 (1)編輯 收藏

        String.split方法很常用,用于切割字符串,split傳入的參數(shù)是正則表達式,它的內(nèi)部是每次都comiple正則表達式,再調(diào)用Pattern.split方法:
    public String[] split(String regex, int limit) {
        
    return Pattern.compile(regex).split(this, limit);
        }

      
    public String[] split(String regex) {
            
    return split(regex, 0);
        }

        因此,如果你調(diào)用String.split非常頻繁的話,每次都重新編譯正則表達式的代價很高,性能會受到很大影響,此時最好自己預編譯Pattern,再調(diào)用Pattern.split方法為妙。
    String []items=line.split(" ");

    //替代為

    static Pattern pattern=Pattern.compile(" ");



    String []items
    =pattern.split(line,0);


    PS.今天支付寶的蔡學鏞大師到公司演講,做的是《關于我的IT學習生活》的主題講座,介紹了他的經(jīng)歷和經(jīng)驗,留下深刻印象的是他看起來很年輕,和照片相差比較大,并且上過3所大學,呆過兩家同一個人開的公司并都倒閉了,非常有趣的經(jīng)歷。







    posted @ 2009-05-21 22:49 dennis 閱讀(3208) | 評論 (2)編輯 收藏

        從廈門來到美麗的杭州,已經(jīng)三周多。還記的是20號凌晨下的飛機,到了杭州市區(qū),卻找不到酒店入住,原來周末這邊很多人來旅游,都注滿了人。原來預定的酒店,據(jù)說集團開什么會,打電話跟我說沒辦法預定了,真是倒霉透了。萬般無奈之下,在麥當勞呆了一個晚上,第二天早上才找到個酒店入住。在酒店住了兩天后,聯(lián)系上一個高中的校友,搬過去他的宿舍暫住了兩天,也在這兩天搞定了房子的事情。房子找在了離公司很近的地方,價格便宜,地方很小,考慮到就我孤身一人,能有個地方睡覺就行了。
        公司的氛圍我很適應,沒有那種到陌生地方上班的感覺。暫時沒什么實質(zhì)性的工作,就是整理文檔,看看源碼,不過上周計劃了下以后的開發(fā)工作,在下周培訓后就要開始。趁空閑時間,我花了點時間改進了下xmemcached,也讀了兩三本閑書,技術書倒是一本都沒讀完,似乎暫時不想去碰這類書。部門昨天搬了一個新地方,來之前朋友說的幾個月搬一次是家常便飯的話是真的,離我住的地方又遠了一些,以后要早起10分鐘了,以免遲到。

        說說杭州的印象,其實我在10年前來過一次杭州,那時還是高一上學來旅游的,去了蘇杭、上海,現(xiàn)在除了美麗的導游姐姐外沒剩下多少印象。上個月來杭州面試的時候,因為買的是晚上的機票,恰好有一個下午的時間逛西湖,沿著白堤走,看了看浙江博物館的歷史館,春天的西湖非常美麗,桃花盛開,楊柳依依,游人如織。那時候我在想,如果周末都過來這邊坐坐,那可真不錯,而實際呢,是我來了之后也就一次去過西湖,近了,反而提不起興致了。杭州給我的感覺跟我呆過的幾個地方都不一樣,廣州是活力,廈門是悠閑,杭州如果要用一個詞來形容,那也許是幸福,它不像廣州那樣忙忙碌碌活力四射,又不是廈門那種慢悠悠的生活節(jié)奏,而是一種恰到好處的生活,如我見到幾個杭州人,充滿著自信和滿足。杭州街上的女孩,通常都會化妝,可以遠觀,精致的像一幅畫,然而似乎缺少市井生活的氣息,不那么親切,也可能是我自己的感覺作怪。不過見到美女的比例大大提高。杭州話果然是吳儂軟語,但是在某天早上,我卻被一陣機關槍式的吳儂軟語吵醒,原來是小區(qū)內(nèi)的在吵架,吳儂軟語變成了機關槍,真是大煞風景。杭州的小吃,我只嘗過新豐小吃的包子和餛飩,可惜離我住的地方偏遠,不然每天早上吃上那么一籠蝦肉包還真是不錯,吃過一次杭幫菜,對東坡肉念念不忘,下次去吃一定還要點。
        這個月有個RubyConf,報名了,看看有沒有機會去參加。我參會的目的很簡單,聽演講,知道現(xiàn)在大家在關注什么,可能的話認識些人,最后就是能不能順手再賺一件T-shirt。閑話一堆,到此為止,說說愿望,希望能在杭州長期干下去,希望能去紹興看看魯迅故居,希望能磨練自己的心性,更自在地面對困難和問題。

    posted @ 2009-05-10 09:56 dennis 閱讀(715) | 評論 (5)編輯 收藏

        在某用戶(可能是唯一用戶)的反饋和建議下,xmemcached做了不少改進和修正,特此感謝。
        XMemcached發(fā)布1.10-RC3,這可能是1.10 release前最后一個RC版本,此版本的主要改進:

    1、引入XMemcachedClientMBean接口,添加一個新的MBean,主要功能是允許通過JMX動態(tài)添加或者移除memcached server。如圖:



    除了通過JMX之外,也可以通過編程來動態(tài)添加或者移除memcachd server節(jié)點。例如:

    XMemcachedClient client
    //添加server
    client.addServer("192.168.111.222:11211 192.168.111.221:11211");
    //移除
    client.removeServer("192.168.111.222:11211 192.168.111.221:11211");


    2、引入新的cas重載方法,允許用戶自主傳入GetsResponse(gets協(xié)議的返回結果),而不需要xmemcached去自動獲取首次gets結果。

    <T> boolean
        cas(java.lang.String key, GetsResponse
    <T> getsReponse, CASOperation<T> operation) 

    <T> boolean
        cas(java.lang.String key, GetsResponse
    <T> getsReponse, CASOperation<T> operation)

    3、重構和修改bug等,重命名transcoder包防止與spymemcached沖突,更多單元測試和相應重構。

    4、附帶最新的測試結果
    測試環(huán)境:
    服務端:memcached server跑在4核,4G內(nèi)存的linux機器上,linux內(nèi)核是2.6.9-55。 memcached啟動參數(shù):memcached -p 12000 -m 2048 -d

    客戶端:跑在8核,16G內(nèi)存的linux機器上,內(nèi)核是2.6.9-67。xmemcached版本是1.10-RC3,spymemcached的版本是2.3.1,兩者都是默認配置。

    測試用例:  key和value都是100個字節(jié)的字符串,啟動N個線程并發(fā)地操作同一個memcached client,進行set、get、delete操作,各操作總次數(shù)均在100萬次以上,最后統(tǒng)計TPS。

    具體結果請看下面








    結果說明:

    圖片采用jfreechart生成,spymemcached在100個并發(fā)及以上,get操作無法設置超時時間導致拋出很多超時異常,因此無法給出有價值的數(shù)據(jù)。

    下載地址在這里

    posted @ 2009-05-09 15:42 dennis 閱讀(1393) | 評論 (2)編輯 收藏

    僅列出標題
    共56頁: First 上一頁 16 17 18 19 20 21 22 23 24 下一頁 Last 
    主站蜘蛛池模板: 亚洲av永久无码精品天堂久久| 在线观看亚洲精品专区| 成人毛片免费观看视频在线| 久久亚洲精品无码av| 亚洲精品乱码久久久久久久久久久久 | 日本一区免费电影| 黄桃AV无码免费一区二区三区| 久久精品国产精品亚洲毛片| 国产真实伦在线视频免费观看| 免费91麻豆精品国产自产在线观看 | 免费一级毛片在线播放| 8x网站免费入口在线观看| 爱情岛亚洲论坛在线观看 | 中文字幕亚洲综合久久菠萝蜜| 亚洲第一成年免费网站| A毛片毛片看免费| 亚洲AV无码国产剧情| 久久精品国产亚洲AV香蕉| 免费人成网站在线高清| 999在线视频精品免费播放观看| 免费无码一区二区| 四虎亚洲精品高清在线观看| 亚洲精品午夜无码专区| 四虎影院永久免费观看| 亚洲日本在线免费观看| 国产午夜无码片免费| 精品在线免费视频| 色噜噜亚洲男人的天堂| 亚洲an天堂an在线观看| 亚洲精品无码av天堂| 日韩精品免费一区二区三区| 97热久久免费频精品99| 免费观看久久精彩视频| 四虎国产精品成人免费久久| 亚洲国产精品一区二区三区在线观看| 亚洲色四在线视频观看| 亚洲精品无码久久久影院相关影片 | 99re免费在线视频| 999zyz**站免费毛片| 4hu四虎免费影院www| 国产精品亚洲一区二区三区久久 |