<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
    Author:放翁(文初)
    Email:fangweng@taobao.com
    Blog:http://blog.csdn.net/cenwenchu79 

     

    當前問題:

    1.       不小比重的Rest請求都是無效請求,全部接納數據消耗比較多的時間。

    2.       Multipart類型的大文件流請求無法做到合理快速過濾。(參數錯誤請求,數據文件過多請求,文件大小過大請求)

    歸結來說,TOP平臺處理的服務在解析參數時比較消耗時間和帶寬(客戶端網絡速度慢導致傳輸字節流比較慢,文件比較大導致帶寬占用嚴重)

    處理方式:

    通過自行解析字節流方式來lazy化處理請求,減少無效請求對于解析參數時間消耗(導致web容器連接消耗)及帶寬消耗。

    優化目標:

             Get由于內容長度有限不列入在優化范圍。

             優化Post方式的請求(普通的和Multipart),要求優化后:在正常請求處理上兩者處理速度不低于傳統方式,非正常請求在策略命中情況下(后面會談到什么情況下優化失效),性能有明顯提高。

    具體實現:

            由于現在用的是傳統IO模式,因此可以用流的方式來lazy解析和處理請求(NIOchannel + buffer package就無法lazy了)。




             一共有三個組件角色:

    1. 請求處理配置策略:配置在解析參數時,優先的規則(參數可以從header,uri,post body中獲取,相互之間的優先性),異常拋出規則(字節流長度,文件大小,文件個數限制等),字節流解析模塊的參數配置(字節流解析的窗口大小,超時時間等)。

    2. 線程上下文:用來保存處理過的請求參數。一來復用,二來也是由于請求字節流處理不可逆(不保存字節流副本),必須保留。

    3. Http請求字節流解析模塊。根據具體的配置以及解析策略來解析字節流,同時將解析結果保存在線程上下文中。主要的實現代碼在于對Post消息體逐步解析部分(普通的Postmultipart

    壓力測試結果:

        正常請求場景( 100并發用戶,multipart 文件大小300k,當前業務場景這個值已經滿足了):

    普通post的處理能力1000TPS。(servlet方式處理差不多,不過有波動)  

      multipart處理能力610TPS。(apache開源項目fileupload,處理能力400TPS左右)

    錯誤請求場景

             異常情況的處理有了很大提高,對于遠程客戶端傳輸較慢或者是大流量圖片的錯誤請求都有很大的優化。

    優化存在問題:

    1. 參數缺失導致優化失效。

    2. sign類似的交驗,導致獲取所有的參數。

    3. 當前圖片限制在300k,由于考慮處理速度快,就都沒有設置超過閥值存儲到本地,因此在高并發大流量的情況下也會有內存問題,當然已經做了部分保護。

    針對上面的兩個問題,作了部分的協議限制,對于API2.0希望將所有的系統參數和業務參數區分開,放入到Http header中或者url中,這樣可以避免系統參數缺失導致優化失敗,同時大量過濾系統參數出現問題的無效請求。

    Sign類似的交驗放在流程最后,避免過早獲取所有參數。

    作安全保護,設定簡單丟棄或者io交互來緩解這個問題。

             這部分內容還有很多可以做得工作,其實最初的目的就是為了防止系統對于無效請求的處理消耗,我想在很多系統都會有這樣的問題,利用緩存設置黑名單防止攻擊也是這樣的初衷。因此這點可以考慮在很多系統設計的時候都作一樣的優化,對正常的不能優化,起碼對錯誤的可以做一些優化,防止在異常請求高漲的時候,系統被擊垮.

    posted on 2009-12-08 01:51 岑文初 閱讀(2243) 評論(2)  編輯  收藏

    評論

    # re: Lazy Request Parameter Parser 2009-12-10 14:55 changfeng
    Hi 文初,
    怎么可以實現呢?是拋棄struts等框架呢,還是在框架中增加攔截器?
    謝謝。  回復  更多評論
      

    # re: Lazy Request Parameter Parser 2010-01-06 18:25 lalan
    吃飽了沒有?  回復  更多評論
      


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品无码精品mV在线观看| 亚洲精品天堂无码中文字幕| 全部在线播放免费毛片| 免费看大美女大黄大色| 精品亚洲一区二区三区在线播放| 国产日韩亚洲大尺度高清| 99视频在线观看免费| 99精品全国免费观看视频 | 午夜福利不卡片在线播放免费| 亚洲人成影院在线| 亚洲爆乳无码专区www| 国产zzjjzzjj视频全免费 | 69成人免费视频| 亚洲国产成人精品女人久久久 | 国产国产人免费人成免费视频| 亚洲av日韩精品久久久久久a | 人碰人碰人成人免费视频| AV在线播放日韩亚洲欧| 77777午夜亚洲| 麻豆国产人免费人成免费视频| 国产精品亚洲一区二区在线观看| 又粗又大又长又爽免费视频| 亚洲AV无码一区二区三区人| 成人午夜大片免费7777| 国产偷国产偷亚洲高清人| 中文字幕人成无码免费视频| 亚洲精华液一二三产区| 亚洲第一区精品观看| 鲁丝片一区二区三区免费| 国产成人免费片在线观看| 好湿好大好紧好爽免费视频| 亚洲嫩模在线观看| 成年人免费视频观看| 久久er国产精品免费观看8| 久久久久亚洲Av无码专| 日本视频免费在线| 国产精品99精品久久免费| 亚洲国产成人一区二区三区| 免费三级毛片电影片| 一级做a爰性色毛片免费| 亚洲美女视频免费|