程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JGroups ARM(一)

JGroups ARM(一)

編輯:關於JAVA

根據Hein Meling和Alberto Montresor的PPT編寫

前言

進入了分布式的時代,我們通常將1)可靠的高可用性2)容錯 3)負載均衡定義為分布式系統滿足的三個基本條件。分布式系統並不是指操作系統,它扮演一種中間件的角色,在各種操作系統和應用之間構架起一套橋梁,它能夠做到 i)不依賴於特定的硬件,軟件及操作系統,不受限於系統架構和軟件體系 ii) 在充分利用便宜的硬件和軟件的基礎上,實現最大的性價比。

進一步討論分布式系統的時候,讓我們了解一下我們傳統的集中式系統面對的挑戰:

1, 服務器硬件故障(硬盤損壞)

2, 網絡故障(交換機,路由器崩潰)

3, 操作系統故障(Windows死機)

4, 軟件故障(內存洩露)

分布式系統需要解決集中式系統所帶來的問題,需要從以下兩個方面著手

1) 提供一套系統框架,該框架實現了服務器之間的多路數據復制且在出現故障的時候,不需要管理員的干預便能自動恢復。

2) 提供一套接口,讓用戶能夠在此基礎上開發可靠的,高可用性的分布式應用。

讓我看看過去的分布式系統框架把

l Corba

l DCOM/.Net

l Java RMI/Jini/EJB

這三種系統框架都具有以下的特性

1, 面向對象

2, 基於ClIEnt/Server遠程方法調用的思想

3, 模塊化

4, 高度重用性

5, 互操作性

6, 可移植性(DCOM限於Windows平台上)

下面,以Java RMI 遠程方法調用為例,描述一下傳統的分布式框架存在的問題。

Java RMI (Remote Method Invocation 遠程方法調用)是用Java在JDK1.1以後的版本實現的,它大大增強了Java開發分布式應用的能力。RMI是在一種百分之百純Java的網絡分布式應用系統的核心解決方案之一,其實它可以被看作是RPC的Java版本。但是傳統RPC並不能很好地應用於分布式對象系統。而Java RMI 則支持存儲於不同地址空間的程序級對象之間彼此進行通信,實現遠程對象之間的無縫遠程調用。RMI目前使用Java遠程消息交換協議JRMP(Java Remote Messaging Protocol)進行通信。JRMP是專為Java的遠程對象制定的協議。用Java RMI開發的應用系統可以部署在任何支持JRE(Java Run Environment Java,運行環境)的平台上。但由於JRMP是專為Java對象制定的,因此,RMI對於用非Java語言開發的應用系統的支持不足。不能與用非Java語言書寫的對象進行通信。

RMI讓JVM1與JVM2互相調用的時候,很好屏蔽了底層操作系統的細節,但是,如果將上面的架構改成一對多模式(一個客戶端對多個服務器),ClIEnt仍然避免不了需要知道系統各個服務器的網絡細節(即客戶端對服務器的調用並不是透明的),而且,服務器之間還存在一個如何維持調用一致性的問題。

總之,RMI和DCOM等分布式框架都沒有很好的地考慮可靠性和高可用性的需求。於是,一個新的概念從這裡提出了——組件群(Object Group)。

組件群可以這樣理解:它是一個基於服務器對象和組件的動態集合,集合中的所有組件對象互相協作和維持各個組件一致性,他們為客戶端外提供一致、可靠和高可用性服務。

?SHAPE?\* MERGEFORMAT

ClIEnt

Server

Server

Server

Server

?SHAPE?\* MERGEFORMAT

ClIEnt

Server

Server

Server

Server

組件群依賴於三種服務來構架起分布式體系框架,在描述這套框架之前,先約定,群組(Group)是一個組件的組合,組件可抽象為組員,群組發生的事件通常有:

a) Join

b) Leave

c) Merge

d) Partition

e) Crash

1, 群組管理服務(Group Membership Service)

因為群組是動態的,有些組員會加入(join)到群,有些組員會脫離(leave),有些組員會因為故障而偶然脫離(crash),有時候還存在2個群之間的合並(merge)、分離(Partition)等事件,因此,群必須具有處理這些事件的能力。

2, 可靠多播服務(Reliable Multicast Service)

在分布式群組環境下,我們通過一對多的方式來實現高可用性(跟HA其實同一個概念),現在的關鍵是,我們的群如何進行可靠的通訊。

答案很簡單——多播。關於群組多播的概念可參考:

http://blog.csdn.Net/huangzhq/archive/2005/02/18/291761.ASPx

3, 狀態傳輸服務(State Transfer Service)

狀態傳輸的目的就在於群組組員的信息同步,也就是,組員A跟組員B所看到的群的結構是一致的。也就是,群組成員是通過此服務來維持該群的一個統一的視圖(VIEw)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved