<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永久综合在线观看尤物| 91丁香亚洲综合社区| 亚洲AV日韩AV永久无码绿巨人| 亚洲高清在线视频| 亚洲手机中文字幕| 九九免费久久这里有精品23| 91手机看片国产永久免费| 亚洲精品无码永久在线观看| 亚洲中文字幕AV在天堂| 妞干网免费视频观看| 亚洲国产成人久久综合一| 久久久久高潮毛片免费全部播放| 亚洲男人的天堂一区二区| j8又粗又长又硬又爽免费视频| 天天摸夜夜摸成人免费视频| 亚洲爆乳无码精品AAA片蜜桃| 1000部拍拍拍18免费网站| 亚洲妇熟XXXX妇色黄| 成人免费网站视频www| 在线免费观看污网站| 黄色三级三级免费看| 在线看片人成视频免费无遮挡| 亚洲一区AV无码少妇电影| 又粗又大又黑又长的免费视频| 亚洲欧洲国产精品你懂的| 美女视频黄的全免费视频| 亚洲av成人片在线观看| 免费观看男人免费桶女人视频| 亚洲w码欧洲s码免费| 日韩精品成人亚洲专区| 美女视频免费看一区二区| 亚洲精品无码午夜福利中文字幕| 一级毛片人与动免费观看| 亚洲人成在线影院| 国产人妖ts在线观看免费视频| 久久精品国产亚洲av天美18| 日韩免费一级毛片| 污视频网站免费在线观看| 亚洲av高清在线观看一区二区 | 亚洲AV中文无码乱人伦| 亚洲国产精品无码观看久久|