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

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

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

    笨笨的思想片斷

    零碎片斷,雜七雜八。
    posts - 25, comments - 79, trackbacks - 0, articles - 0

    JSRB設計思想-無狀態的,粗粒度的SERVICE

    出于提高性能和負載均衡實現的考慮,JSRB 采取了無狀態的,粗粒度的SERVICE請求和響應機制。
    該思想與有狀態的ORB(如CORBA或EJB Container)的設計思想截然相反.本文將詳述原因.


    JSRB定位與想要解決的問題

    JSRB定位于傳統的SERVICE REQUEST BROKER地位,就是原始意義上的中間件的位置: 負責將大量客戶端(N千或N萬)的請求,排隊到幾十或幾百個的請求處理進程(線程)中,最優化的使用系統資源,從而達到吞吐量最大化的目的.
    從這個角度來看, EJB Container和CORBA ORB是標準的中間件. Java Web Container由于內建了線程池,也算是中間件(前端協議HTTP,后端協議是JDBC).

    無狀態vs有狀態,遠程調用的選擇.

    有狀態要求服務器在遠程調用之間保存對應客戶端的Session數據,這種設計思想會簡化程序代碼,有助于將分布式的程序寫得更非分布式程序.

    但是在某些情況下,這種設計會帶來嚴重的性能問題.在金融的在線交易系統中,業務系統需要處理十萬至千萬級別的用戶信息(例如網銀系統),而中間件服務器較為合適的session池數量不過萬.要在中間件服務器的JVM內存中處理如此巨量的數據,肯定會將系統撐爆; 而如果存儲大部分數據到硬盤(鈍化技術)來應對,則就會面臨IO性能還不如 RDBMS 的窘境. RDBMS 在目前階段始終是最快速的數據存儲方案.

    當業務系統面臨大數據量的問題時,需要采用應用相關的解決方案(數據分區,存儲過程等等)解決.將問題推給應用服務器固然方便,但是卻會帶來系統的性能和可擴展性的問題.遠程調用的代價本來就很大,不必要讓ORB再承擔session數據的重擔了.與之相反,無狀態的遠程調用在可擴展性和負載均衡方面的實現要簡單得多,也沒有session遷移的問題.


    SERVICE的粒度問題

    SERVICE遠程調用的粒度需要粗一點,在保證SERVICE可重用的前提下,應該盡量減少SERVICE的調用次數, 因為SERVICE的調用開銷非常大(一般的遠程調用都是以毫秒記,而普通方法的執行時間是以微秒或納秒為單位的).
    有狀態SERVICE的一個副作用就是容易出現過細粒度的設計(同時由于Stub/Skeleton的生成很方便,這種設計就更加容易出現了),導致交互次數過多,會嚴重降低業務系統的性能.

    這方面一個鮮明的對比是大型機的智能終端和telnet協議.智能終端只有等到用戶填充完一個表單并確認發送后,才會將請求數據發送到主機,并且自行解釋和顯示主機返回的數據(非常像Broswer/HTTP), 而telnet協議則將每個按鍵事件發送到主機,主機處理保存有所有的session數據. 主機可以毫不費勁的處理N萬個并發的客戶端,而UNIX主機在連接了幾千個telnet客戶端后,自身的正常運行都會出問題了.

    順便說一句, 類似的, 從個人項目經歷來看, 由于 Hibernate 隱藏JDBC調用很成功,查詢或更新數據庫非常方便, 程序員就很容易濫用; 有可能導致程序從邏輯上來看毫無問題, 但是運行起來卻出現性能低下, 并且這種性能問題還很難改正(性能低下是由于數據庫查詢過多引起的,要調整的代碼遍布整個項目).


    其它

    1. 本文的一些思想來源于MidWay(midway.sourceforge.net)和個人的項目經驗,僅為一家之言.
    2. 大型項目(企業級)和小項目(部門級)的區別主要就在于,大項目在各個階段都要將非功能性的要求(性能,容錯,恢復,分布式,響應時間,事務等等)放在設計/實現/測試首要考慮的位置,而小項目則幾乎無需考慮這樣的問題.
    3. 本文和JSRB主要集中在真正的中間層( Service/Object Request Broker/EJB Container).


    Feedback

    # re: JSRB設計思想-無狀態的,粗粒度的SERVICE  回復  更多評論   

    2007-12-21 23:35 by 交口稱贊
    因為SERVICE的調用開銷非常大(一般的遠程調用都是以毫秒記,而普通方法的調用開銷是以微秒或納秒為單位的).

    這個結論怎么得出的?
    樓主知道微秒和納秒是什么概念嗎?

    # re: JSRB設計思想-無狀態的,粗粒度的SERVICE  回復  更多評論   

    2007-12-22 08:37 by 笨笨
    謝謝提醒,個人經驗是凡是涉及到網絡傳輸的遠程調用如JDBC,RMI,它的執行時間,就是從客戶端發起請求到獲取返回數據,耗費時間一般在N毫秒不等.
    而普通方法執行的時間,根據復雜度的不同,最少的可以用納秒計算(例如log4j的check時間),時間長點的用微秒計算也合適.
    主站蜘蛛池模板: 狠狠久久永久免费观看| 18pao国产成视频永久免费| 免费黄色网址入口| 国内精品久久久久影院亚洲| 四虎成年永久免费网站| 亚洲精品永久www忘忧草| 精品国产sm捆绑最大网免费站| 亚洲一区二区三区高清| 99热在线观看免费| 久久精品国产亚洲AV麻豆网站 | 日韩国产精品亚洲а∨天堂免| 成人免费视频软件网站| 亚洲三级高清免费| 免费毛片网站在线观看| 婷婷亚洲综合五月天小说在线| 亚洲?V乱码久久精品蜜桃| 国产99久久久久久免费看| 亚洲国产精品国自产拍AV| 国产好大好硬好爽免费不卡| 亚洲高清中文字幕综合网| 无码区日韩特区永久免费系列 | 最近中文字幕mv手机免费高清 | 亚洲一区二区三区在线| 成年女人男人免费视频播放| 国产亚洲综合精品一区二区三区| 亚洲精品无码久久久| 不卡视频免费在线观看| 亚洲国产精品va在线播放| 97性无码区免费| 狠狠入ady亚洲精品| 日韩亚洲人成在线综合日本| 日本zzzzwww大片免费| 亚洲精品国产摄像头| 亚洲人成网站观看在线播放| 最新亚洲成av人免费看| 亚洲自偷精品视频自拍| 免费的一级黄色片| 黄色网址免费在线观看| 亚洲第一成年人网站| 亚洲精品WWW久久久久久| 在线人成精品免费视频|