1. 程式人生 > >淺談JAVA常用分散式實現方式及優缺點

淺談JAVA常用分散式實現方式及優缺點

常用的有EJB、rmi、Web Service,還有Hessian、NIO等,它們的優缺點比較比下:



1:EJB
    優勢:可擴充套件性好,安全性強,支援分散式事務處理。
    劣勢:不能跨語言;配置相對複雜,不同J2EE容器之間很難做無縫遷移。

2:rmi
    優勢:面向物件的遠端服務模型;基於TCP協議上的服務,執行速度快。
    劣勢:不能跨語言;每個遠端物件都要繫結埠,不易維護;不支援分散式事務JTA,RMI框架對於安全性、事務、可擴充套件性的支援非常有限。

3: Web Service
    優勢:跨語言、跨平臺,SOA思想的實現;安全性高;可以用來相容legacy系統的功能
    劣勢:效能相對差,不支援兩階段事務

4:Hessian
    優勢:使用簡單,速度快;跨語言,跨平臺;可以用來相容legacy系統的功能。
    劣勢:安全性的支援不夠強,不支援兩階段事務。

5:NIO(Mina/Netty)
    優點:基於TCP通訊,效率上高於HTTP的方式,非阻塞IO應對高併發綽綽有餘。根據具體的需要制定資料傳輸的格式,可擴充套件性強。
    缺點:不能跨語言,無法穿透防火牆。


Java NIO框架Mina、Netty、Grizzly
      Mina(Multipurpose Infrastructure for Network Applications) 是 Apache組織一個較新的專案,它為開發高效能和高可用性的網路應用程式提供了非常便利的框架。當前發行的 Mina 版本2.04支援基於 JavaNIO 技術的 TCP/UDP 應用程式開發、串列埠通訊程式,Mina 所支援的功能也在進一步的擴充套件中。目前,正在使用Mina的應用包括:Apache Directory Project、AsyncWeb、AMQP(Advanced MessageQueuing Protocol)、RED5 Server(Macromedia? FlashMedia RTMP)、ObjectRADIUS、 Openfire等等。


Netty是一款非同步的事件驅動的網路應用框架和工具,用於快速開發可維護的高效能、高擴充套件性協議伺服器和客戶端。也就是說,Netty是一個NIO客戶端/伺服器框架,支援快速、簡單地開發網路應用,如協議伺服器和客戶端。它極大簡化了網路程式設計,如TCP和UDP套接字伺服器。

     Grizzly是一種應用程式框架,專門解決編寫成千上萬使用者訪問伺服器時候產生的各種問題。使用JAVANIO作為基礎,並隱藏其程式設計的複雜性。容易使用的高效能的API。帶來非阻塞socketd到協議處理層。利用高效能的緩衝和緩衝管理使用高效能的執行緒池。

    接下來就是區別啦~~~
    首先,從設計的理念上來看,Mina的設計理念是最為優雅的。當然,由於Netty的主導作者與Mina的主導作者是同一人,出自同一人之手的Netty在設計理念上與Mina基本上是一致的。而Grizzly在設計理念上就較差了點,幾乎是JavaNIO的簡單封裝。
   其次,從專案的出身來看,Mina出身於開源界的大牛Apache組織,Netty出身於商業開源大亨Jboss,而Grizzly則出身於土鱉Sun公司。從其出身可以看到其應用的廣泛程式,到目前為止,我見到業界還是使用Mina多一些,而Netty也在慢慢的應用起來,而Grizzly則似乎只有Sun自已的專案使用。   最後,從入門的文件來說,由於Mina見世時間相對較長,官方以及民間的文件與入門示例都相當的多。Netty的官方文件也做得很好,而民間文件就要相對於Mina少一些了。至於Grizzly,不管是官方還是民間,都很少見到其文件。