<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設(shè)計思想-無狀態(tài)的,粗粒度的SERVICE

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


    JSRB定位與想要解決的問題

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

    無狀態(tài)vs有狀態(tài),遠程調(diào)用的選擇.

    有狀態(tài)要求服務(wù)器在遠程調(diào)用之間保存對應(yīng)客戶端的Session數(shù)據(jù),這種設(shè)計思想會簡化程序代碼,有助于將分布式的程序?qū)懙酶?strong>非分布式程序.

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

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


    SERVICE的粒度問題

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

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

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


    其它

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


    Feedback

    # re: JSRB設(shè)計思想-無狀態(tài)的,粗粒度的SERVICE  回復(fù)  更多評論   

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

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

    # re: JSRB設(shè)計思想-無狀態(tài)的,粗粒度的SERVICE  回復(fù)  更多評論   

    2007-12-22 08:37 by 笨笨
    謝謝提醒,個人經(jīng)驗是凡是涉及到網(wǎng)絡(luò)傳輸?shù)倪h程調(diào)用如JDBC,RMI,它的執(zhí)行時間,就是從客戶端發(fā)起請求到獲取返回數(shù)據(jù),耗費時間一般在N毫秒不等.
    而普通方法執(zhí)行的時間,根據(jù)復(fù)雜度的不同,最少的可以用納秒計算(例如log4j的check時間),時間長點的用微秒計算也合適.

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


    網(wǎng)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 人妖系列免费网站观看| 少妇亚洲免费精品| 国产免费黄色大片| 香蕉大伊亚洲人在线观看| 在线看片v免费观看视频777| 免费永久在线观看黄网站| 久久亚洲日韩精品一区二区三区| 亚洲免费无码在线| 99精品视频在线视频免费观看| 成年午夜视频免费观看视频| 亚洲人成伊人成综合网久久久 | 亚洲精品国精品久久99热| 免费精品国自产拍在线播放| 天天影视色香欲综合免费| 中文字幕精品亚洲无线码一区应用| 国产精品hd免费观看| 亚洲精品乱码久久久久久中文字幕| 亚洲精品在线播放| 暖暖免费高清日本一区二区三区 | 日本系列1页亚洲系列| 亚洲av日韩av欧v在线天堂| 成在线人视频免费视频| 日韩免费a级在线观看| 高潮毛片无遮挡高清免费视频| 日韩免费一区二区三区在线 | 亚洲欧洲春色校园另类小说| 丝瓜app免费下载网址进入ios | 亚洲日产韩国一二三四区| 国产精品亚洲二区在线| 国产日产亚洲系列最新| 国产成人久久AV免费| 国产成人A亚洲精V品无码| 免费国产va在线观看| 亚洲av永久无码精品表情包| 91成年人免费视频| 特级毛片爽www免费版| 亚洲黄色网站视频| 波多野结衣免费视频观看| 亚洲AⅤ男人的天堂在线观看| 曰韩亚洲av人人夜夜澡人人爽| 国产曰批免费视频播放免费s|