<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時間),時間長點的用微秒計算也合適.
    主站蜘蛛池模板: 男人的天堂av亚洲一区2区| 亚洲国产成人99精品激情在线| 韩国亚洲伊人久久综合影院| 7723日本高清完整版免费| 亚洲综合亚洲国产尤物| 99久久久国产精品免费无卡顿| 亚洲美女大bbbbbbbbb| 日本免费人成在线网站| 亚洲不卡中文字幕| 成人一a毛片免费视频| 亚洲国产精品无码久久九九大片 | 国内永久免费crm系统z在线| 在线日韩日本国产亚洲| 免费的全黄一级录像带| 亚洲视频欧洲视频| 黄色永久免费网站| 亚洲av无码偷拍在线观看| 免费永久在线观看黄网站| 好湿好大好紧好爽免费视频| 亚洲αv在线精品糸列| 中文字幕在线观看免费视频| 亚洲成无码人在线观看| 我想看一级毛片免费的| 春暖花开亚洲性无区一区二区| 亚洲最大av无码网址| 日韩精品极品视频在线观看免费| 亚洲欧洲国产综合| 国产大片线上免费看| 99麻豆久久久国产精品免费 | 在线v片免费观看视频| 美女裸体无遮挡免费视频网站| 亚洲综合色婷婷七月丁香| 69免费视频大片| 精品亚洲福利一区二区| 国产亚洲3p无码一区二区| 日本免费一区二区在线观看| 国产午夜亚洲精品不卡免下载| 亚洲av午夜福利精品一区| 成人免费在线视频| 波多野结衣免费一区视频 | 久别的草原电视剧免费观看|