Java領域中的分布式框架比較的多,分析一個已有的遠程調用框架無論是對於打算采 用已有成果還是自己做分布式框架,都是很必要的事情,JBoss Remoting是其中很好很強 大的一個框架,在此來對JBoss Remoting進行深入的分析,看看JBoss Remoting是如何基 於java.net提供的包去解決這些問題的,本文所分析的JBoss Remoting源碼的版本為 2.2.2_SP2,本來以為會是篇不怎麼長的文檔,沒想到還沒寫的詳細和深入的時候就已經 有三十多頁了,也不好在這裡直接貼出來,就把文檔目錄和最後的總結部分貼在這了,感 興趣的同學們可以從這個地址下載PDF版本的文檔: http://www.riawork.org/opendoc/JBoss.Remoting.Opendoc.pdf
目錄:
1 分布式應用概述
2 分析JBoss Remoting
2.1 Socket方式遠程調用
2.2 多種調用方式的支持
2.3 遠程加載class的支持
2.4 高並發下的穩定性
2.5 異常處理
2.6 提高性能
2.7 集群的支持
3 學到了什麼
4 總結
總結
從對JBoss Remoting的分析中,分布式應用帶來的需要深入學習的知識體系較之集中 式的應用多了很多,最基礎也最明顯的涉及到的知識體系有:網絡通訊(涉及到的有協議 、網絡I/O等)、java網絡編程(java.net包、NIO等)、序列化機制、並發編程、池技術 等,就這些知識點每個拓展開來講都可以講成大篇甚至一本書的范疇,對於大型分布式應 用而言,涉及的知識體系就更多了,例如還需要掌握cluster環境下的處理(很多東西到 了集群環境下復雜程度絕對是需要以翻倍來計算的,而且很多現在的處理方式都會變得不 可用)、load balance策略等,本文也只是對JBoss Remoting的一些基本以及關鍵的特點 進行了分析(最開始的時候打算叫深入分析JBoss Remoting的,不過寫到最後發現其實還 有很多細節和深入的部分並沒有寫,因此還是改名叫分析JBoss Remoting了),其中其實 還有很多細節是值得研究和學習的,希望有研究的同仁們貢獻出其他方面的研究或指出本 文錯誤的地方,非常感謝。
大型的分布式應用中不可能要求每個開發人員都去掌握這些知識體系,因此對於大型 分布式應用而言,提供一個分布式的框架是非常有必要的,做到將分布式應用涉及的相關 知識點盡量的剝離,就像Erlang,做到將並發的基礎知識分離。
JBoss Remoting解決了很多分布式應用所需面對的問題,是目前可選的開源分布式框 架中一個很不錯的選擇,並且其在保證高並發場景下的穩定性和性能提升上也做了很多的 工作,但還是有很多可提升的空間,例如統一的遠程調用的API上(還可以進一步加強透 明化的oneway、異步的調用)、NIO的支持、異步調用的提升(或者可以考慮提供結合MQ 實現的異步調用)等等,而如果要成為大型分布式應用的支撐平台,無論是性能上還是功 能上,JBoss Remoting還有不少需要改進和提升的地方。
分布式應用較之集中式應用在對象的接口的設計和使用上也有了更高的要求,例如不 要出現依靠參數引用傳遞來隱性的填充一些值、遠程對象應是線程安全的、盡量不要出現 頻繁調用遠程對象的現象、盡量減少往返傳輸大對象的現象等等細節。
分布式應用對比集中式應用而言,無論是開發還是支撐框架上都復雜了很多,因此盡 管分布式應用相對集中式應用而言,能夠帶來機器配置要求降低、系統結構更加清晰和松 耦合、降低維護的復雜度等等優點,但還是應該做到能不分布式就盡量不要分布式。