qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          Strom及DRPC性能測(cè)試與改進(jìn)

          參考1:storm性能測(cè)試報(bào)告
            參考2:Storm DRPC 使用
            參考3:Storm DRPC 使用及訪問(wèn)C++ Bolt問(wèn)題的解決方法
            參考4:Storm 多語(yǔ)言支持之ShellBolt原理及改進(jìn)
            參考5:Base64編碼及編碼性能測(cè)試
            參考6:Base64編碼及編碼性能測(cè)試 [改進(jìn)]
            參考7:zlib使用與性能測(cè)試
            參考8:十分簡(jiǎn)單的redis使用說(shuō)明及性能測(cè)試
            [參考1]的結(jié)論與局限
            參考種對(duì)Storm性能進(jìn)行測(cè)試,得出了以下結(jié)論:
            storm單條流水線的處理能力大約為20000 tupe/s, (每個(gè)tuple大小為1000字節(jié))
            storm系統(tǒng)本省的處理延遲為毫秒級(jí)
            在集群中橫向擴(kuò)展可以增加系統(tǒng)的處理能力,實(shí)測(cè)結(jié)果為1.6倍
            Storm中大量的使用了線程,即使單條處理流水線的系統(tǒng),也有十幾個(gè)線程在同時(shí)運(yùn)行,所以幾乎所有的16個(gè)CPU都在運(yùn)行狀態(tài),load average 約為 3.5
            Jvm GC一般情況下對(duì)系統(tǒng)性能影響有限,但是內(nèi)存緊張時(shí),GC會(huì)成為系統(tǒng)性能的瓶頸
            使用外部處理程序性能下降明顯,所以在高性能要求下,盡量使用storm內(nèi)建的處理模式
            作者對(duì)strom的處理能力和可擴(kuò)展性進(jìn)行了測(cè)試,給出了很有說(shuō)服力的數(shù)據(jù)。但還不能滿(mǎn)足我們的需要:
            1)由于作者使用的tuple為1000字節(jié),也就是1K,數(shù)據(jù)量相對(duì)較小,而在實(shí)際使用過(guò)程中,storm作為實(shí)時(shí)流處理系統(tǒng),處理的數(shù)據(jù)可能比較大。比如我們用來(lái)進(jìn)行圖像處理,一個(gè)圖片可能有1M左右。這時(shí)候storm的性能如何呢?
            2)為了簡(jiǎn)化storm的集成,我們使用DRPC來(lái)訪問(wèn)storm,具體用法可參見(jiàn)[參考2]和[參考3],在DRPC訪問(wèn)時(shí),數(shù)據(jù)需要從DRPCClient發(fā)送至DRPCServer,再由DRPCServer發(fā)送給topology中的spout,spoout發(fā)送給Bolt........;當(dāng)數(shù)據(jù)處理完畢后,還要由Bolt返回給DPRCServer,由DRPCServer返回給DRPCClient。
            增加了這些步驟以后,Strom DRPC的性能究竟如何呢?
            3)作者在[參考1]中提到,使用外部處理程序時(shí)Storm的性能明顯下降,大概只有1/10的性能。但是我們?cè)趯?shí)際使用中,可能經(jīng)常是在已有的基礎(chǔ)上,將功能集成到Storm中運(yùn)行。通俗點(diǎn)說(shuō):實(shí)際情況是我們經(jīng)常使用外部處理程序,這種情況下,怎么能提高Storm的性能呢?關(guān)于這點(diǎn)可以查看[參考4]。我們使用JNI來(lái)解決。
            測(cè)試與結(jié)論
            1)測(cè)試環(huán)境
            測(cè)試環(huán)境如圖所示
            有客戶(hù)端和兩臺(tái)服務(wù)器組成。
            客戶(hù)端為虛擬機(jī),單核3.2GHz  1G 內(nèi)存,100M帶寬。
            服務(wù)器也是虛擬機(jī),8核2.2GHz,8G內(nèi)存,1G帶寬。
            DRPC Topology由一個(gè)DRPCSpout,CPPBolt和一個(gè)ReturnResult組成。功能是接收一個(gè)字符串并返回。
            Topology運(yùn)行在一個(gè)work中,Spout,Bolt分別由不同的線程執(zhí)行。
           2)測(cè)試方法
            在Client啟動(dòng)0-100多個(gè)線程,不停的訪問(wèn)Topology,向其發(fā)送一個(gè)字符串(1K-1M)。Topology會(huì)原封不動(dòng)的返回該字符串。
            測(cè)試過(guò)程就不詳細(xì)展開(kāi)了。直接說(shuō)測(cè)試結(jié)果。
            3)測(cè)試結(jié)論
            該測(cè)試中,處理速度主要受限于客戶(hù)端帶寬。也就是說(shuō)由于數(shù)據(jù)量大,客戶(hù)端發(fā)的速度慢,低于Storm中topology的處理速度。
            因此該測(cè)試只能得出DRPC方式中單個(gè)請(qǐng)求在不同數(shù)據(jù)大小時(shí),storm的延遲時(shí)間。
            簡(jiǎn)而言之,StormDRPC方式中,最小延遲為50ms(數(shù)據(jù)小于1K),當(dāng)數(shù)據(jù)量大時(shí),256K數(shù)據(jù),延遲為125ms,512K時(shí)延遲為208ms。
            所以Storm數(shù)據(jù)量較大的時(shí),處理的延遲還是比較大的。
            當(dāng)然以上僅是在特定環(huán)境中的測(cè)試,僅供參考。
            改進(jìn)方法
            根據(jù)個(gè)人經(jīng)驗(yàn),針對(duì)以上Storm延遲可以由以下改進(jìn)方法:
            1)數(shù)據(jù)可以先壓縮后再交給storm處理,在具體的bolt中對(duì)其進(jìn)行解壓縮。根據(jù)個(gè)人測(cè)試zlib壓縮1M的數(shù)據(jù),壓縮率為80%,既可以將數(shù)據(jù)研所為原來(lái)的20%。從而可以減小數(shù)據(jù)量,提高效率。而zlib對(duì)1M數(shù)據(jù)進(jìn)行壓縮、解壓縮所用時(shí)間在10ms以?xún)?nèi)。可以使情況選用。見(jiàn)[參考7]
            2)storm本身采用字符型傳輸,對(duì)于二進(jìn)制數(shù)據(jù)必須進(jìn)行編碼。可采用base64編碼。參見(jiàn)[參考5],base64對(duì)1M數(shù)據(jù)的編碼,解碼時(shí)間也分別小于10ms。
            3)在DRPC測(cè)試中,數(shù)據(jù)從Clinet到DRPCServer,到DRPC SPOUT,到BOLT,到RETURN Result,在到DRPCSERVER,最后返回Client傳輸多次,可以考慮使用內(nèi)存數(shù)據(jù)庫(kù)如redis,Client直接將數(shù)據(jù)放入redis,將其在redis中的路徑進(jìn)行傳輸,在需要時(shí),由bolt從redis中獲取。參見(jiàn)[參考8]。將1M數(shù)據(jù)在redis中存取,耗時(shí)也分別在10-20ms。
            4)對(duì)于外部處理程序,如C++,可以采用JNI的方式,對(duì)ShellBolt進(jìn)行改進(jìn),而不是啟動(dòng)新的進(jìn)程在通過(guò)Json編碼,Pipe傳輸與之通訊,從而也可以提交效率。參見(jiàn)[參考4]。

          posted on 2014-12-08 20:40 順其自然EVO 閱讀(296) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 測(cè)試學(xué)習(xí)專(zhuān)欄

          <2014年12月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 庄河市| 边坝县| 兰考县| 新兴县| 瓦房店市| 甘南县| 翼城县| 盐山县| 泽州县| 丁青县| 青河县| 宁海县| 隆化县| 黄浦区| 济宁市| 鄂州市| 太康县| 凤庆县| 麟游县| 江门市| 封开县| 皋兰县| 怀仁县| 黑水县| 宿松县| 宝应县| 从化市| 昌乐县| 原平市| 道孚县| 郎溪县| 绥江县| 湖州市| 凯里市| 冕宁县| 富源县| 朔州市| 萝北县| 金坛市| 中牟县| 德格县|