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

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

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

    放翁(文初)的一畝三分地

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      210 隨筆 :: 1 文章 :: 320 評論 :: 0 Trackbacks

        在大型網站中常常會遇到大流量的數據輸出問題,過于頻繁的輸出到DB、文件、第三方系統都會帶來不穩定性和低效率。因此需要采用一定的方式來解決這個問題,其實這部分內容的簡單處理框架早就用在實際項目中,不過今天正好有外部的朋友問起我,我就整理了一下作為google的開源代碼放上去了,這里也簡單介紹一下,有興趣的朋友可以去看看,最好是能夠給一些建議。

      

    場景:

             應用頻繁訪問接口服務器,需要控制每個應用在可配置時間段內(例如一分鐘)對于某一服務的訪問次數,同時需要記錄每一次訪問內容到數據庫中。

    幾個點:

    1. 高并發情況下,集群服務器需要全局計數。(需要將更新和判斷作為原子操作,而非兩階段操作,保證高并發事務)

    2. 異步日志批量輸出。防止高頻率訪問第三方系統(DB,本地IO),提高性能。

    3. 采用黑名單簡化計數器判斷。

    1,3通過memcache就可以實現,如果需要使用客戶端可以看看google code上的:http://code.google.com/p/memcache-client-forjava/

    這里主要在說一下2,在很多場景中都會有這樣的需求,一些需要輸出到DB或者文件的內容需要緩存起來異步批量操作,提高性能也降低對于第三方系統的壓力。大致設計結構圖如下:

     

     自上而下來看,ThreadA,B,C都是程序中其他模塊的線程,他們需要輸出記錄到數據庫或者DB中。當有數據到達需要輸出時,僅僅只是將數據放入阻塞隊列中,而有一個消費者線程池中的線程發現隊列中有數據就將數據寫入其中某一個線程的數據分頁中(每一個線程維護一個自己的內存分頁,當頁滿或者到達了配置的輸出間隔時間以后就將頁內數據交給輸出線程池中的輸出線程完成批量數據輸出)。


            

    下面是三個類圖,囊括了這個小工具框架的所有類:

     

             上圖是對外提供的異步輸出模板,其他模塊可以直接使用模板來輸出數據。

    上圖是異步輸出器包,是異步輸出模板的內置邏輯實現,其他線程直接使用異步輸出模板來輸出記錄。

             上圖是消費者和輸出線程的接口和默認實現類,可以替換及擴展。

    整個框架基本都可以通過配置文件擴展每一個角色(異步輸出類,消費者,寫出者),擴展方式就是通過在classpath下增加目錄META-INF/services/然后將需要擴展的接口作為文件名稱,內容就是接口的實現類,這樣既可擴展和替換任何一個角色的具體實現。

    具體的代碼和測試用例可以去http://code.google.com/p/asynwriter/ 下載。

    posted on 2009-02-12 21:09 岑文初 閱讀(2476) 評論(5)  編輯  收藏

    評論

    # re: 大流量數據異步輸出 2009-02-13 03:53 GhostDog
    請問這和直接寫到內存數據庫比有多少性能差別? 感覺都放內存,應該差不多,線程還要多耗點資源。  回復  更多評論
      

    # re: 大流量數據異步輸出 2009-02-13 05:17 岑文初
    如果使用內存數據庫,的卻寫出的頻度可以比普通的數據庫要快,但是就算是內存數據庫,它的連接資源還是有限的,就算使用連接池,其實在每天幾十億的數據量下還是撐不住的.這里雖然用了線程,但是采用的是比較單一的使用方式,線程切換代價不大.不過這個可以測試一下看看,采用mysql內存數據庫,然后每來一條數據就寫,與批量異步寫看看對于系統壓力以及性能來說是否有變化。  回復  更多評論
      

    # re: 大流量數據異步輸出 2009-02-15 23:33 micstart
    請問你的類圖用什么工具畫的?挺不錯的  回復  更多評論
      

    # re: 大流量數據異步輸出[未登錄] 2009-03-23 21:52 Patrick He
    @GhostDog
    采用異步 IO 的好處是服務程序可以不需要等待 IO 操作執行結束即可返回,這樣可以大大提高服務層的吞吐量。  回復  更多評論
      

    # re: 大流量數據異步輸出 2009-04-07 23:18 srboyzj
    你的類圖是用EA畫的嗎?  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 一级毛片成人免费看a| 亚洲国产成人精品无码区二本| 看Aⅴ免费毛片手机播放| 欧洲美熟女乱又伦免费视频| 亚洲色大成WWW亚洲女子| 日韩在线视频免费看| 亚洲av无码成人精品区一本二本| 精品国产免费观看一区| 国产精品亚洲综合网站| 亚洲国产成人久久综合一区77| 男人扒开添女人下部免费视频| 国产av无码专区亚洲国产精品| 亚洲免费视频一区二区三区| 亚洲色中文字幕无码AV| 精品亚洲永久免费精品| 亚洲天堂中文字幕| 91在线视频免费播放| 亚洲国产成人精品无码区二本 | 中国china体内裑精亚洲日本| 24小时免费直播在线观看| 精品国产_亚洲人成在线| 亚洲国产精品日韩| 精品视频一区二区三区免费| 亚洲日本在线观看网址| 好爽好紧好大的免费视频国产| 一级做a爰黑人又硬又粗免费看51社区国产精品视| 免费一级毛片在线播放| 免费黄网站在线看| 精品亚洲AV无码一区二区三区| 四虎永久免费地址在线网站| 伊人免费在线观看| 亚洲xxxx18| 色噜噜AV亚洲色一区二区| 1000部羞羞禁止免费观看视频 | 9277手机在线视频观看免费| 久久久久久亚洲精品影院| 亚洲精品国产va在线观看蜜芽| 久久亚洲免费视频| 国产偷国产偷亚洲清高APP| 亚洲精品卡2卡3卡4卡5卡区| 在线观看AV片永久免费|