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