分布式java應用


                 

   

      大型應用,通常會拆分為多個子系統來實現。

      對Java來說,這些子系統可能部署在同一台機器的多個不同的JVM中,也可能部署在不同的機器上,但這些子系統又不是完全獨立的,要相互通信來共同實現業務功能。

      對於此類Java應用,我們稱之為分布式Java應用。

 

 

       對於分布式Java應用,通常有2種方法來實現:

       1. 基於消息方式實現系統間的通信

            系統間通信,就要向外發送消息,消息可以是字節流、字節數組、甚至是Java對象。

           消息方式的系統間通信,通常是基於網絡協議來實現的。常用的協議有:TCP/IPUDP/IP。   

           TCP/IP是一種可靠的網絡數據傳輸協議。TCP/IP要求通信雙方首先建立連接,之后再進行數據的傳輸。TCP/IP負責保證數據傳輸的可靠性。

           UDP/IP是一種不保證數據一定到達的網絡數據傳輸協議。由於UDP不能保證數據傳輸的可靠,因此性能會好一些。

           TCP/IPUDP/IP可用於完成數據傳輸,但要完成系統間通信,還需要對數據進行處理。例如:讀取和寫入數據,按照POSIX標准,分為:同步IO、異步IO。同步IO中最常用的是BIO(Blocking IO)NIO(Non-Blocking IO).

 

           BIO:從程序角度而言,BIO就是當發起IO的讀或寫操作時,均為阻塞方式,只有當程序讀到了流或將流寫入操作系統后,才會釋放資源。

           NIO:從程序角度而言,當發起IO的讀或寫操作時,是非阻塞的;當Socket有流可讀或可寫入Socket時,操作系統會通知相應的應用程序進行處理,應用再將流讀取到緩沖區或寫入操作系統。

           AIO:為異步IO方式。從程序角度而言,當進行讀寫操作時,只須直接調用APIreadwrite方法即可。 這兩種方法均為異步的。對於讀操作而言,當有流可讀取時,操作系統會將可讀的流傳入read方法的緩沖區,並通知應用程序;對於寫操作而言,當操作系統將write方法傳遞傳遞的流寫入完畢時,操作系統主動通知應用程序。

           較之NIO而言,AIO簡化了程序的編寫,流的讀取和寫入都由操作系統來代替完成。

 

        2. 基於遠程調用方式實現系統間的通信

            當系統間通信時,可通過調用本地的一個Java接口的方法,透明地調用遠程的Java實現。其細節由Java或框架來完成。

 

            使用Java包來實現基於消息方式的系統間通信還是比較麻煩的。

     為了讓開發人員能更加專注對數據進行業務處理,而不是過多關注純技術細節,開源業界誕生了很多優秀的基於以上各種協議的系統間通信的框架,Mina

            MinaApache的頂級項目,基於Java NIO構建,同時支持TCP/IPUDP/IP兩種協議。Mina對外屏蔽了Java NIO使用的復雜性,並在性能上做了不少的優化。

 

            遠程調用方式就是盡可能地使系統間的通信和系統內一樣,讓使用者感覺調用遠程通調用本地一樣。

 

           基於Java自身技術實現遠程調用方式的系統間通信

           在Java中實現遠程調用方式的技術主要有RMIWebService兩種:

           RMI:是java用於實現透明遠程調用的重要機制。在遠程調用中,客戶端僅有服務器端提供的接口。

 

           JDK 6.0以前的版本,RMI實現均是基於TCP/IP + BIO方式的,RMI服務器端通過啟動RMI注冊對象在一個端口上監聽對外提供的接口,其實現實例以字符串的方式綁定到RMI注冊對象上。RMI客戶端通過proxy的方式代理了對服務器端接口的訪問,RMI客戶端將要訪問的服務器端對象字符串、方法和參數封裝成一個對象,序列化成流后,通過TCP/IP+BIO傳輸到RMI服務器端。RMI服務器端接收到客戶端的請求對象后,解析其中的對象字符串、方法及參數,通過對象字符串從RMI注冊對象上找到提供業務功能的實例,之后結合要訪問的方法來反射獲取到方法實例對象,傳入參數完成對服務器端對象實例的調用,返回的結果,則序列化為流以TCP/IP+BIO方式返回給客戶端,客戶端在接收到此流后反序列化為對象,並返回給調用者。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM