1.1.2 服務(wù)架構(gòu)
每個節(jié)點上的 ClusterPartition MBean 定義的群集拓?fù)浣Y(jié)構(gòu)(clustering topography)對系統(tǒng)管理員很重要。但是對于大部分的應(yīng)用程序開發(fā)者來說,你可能更關(guān)心從客戶應(yīng)用程序的角度來看的群集架構(gòu)。JBoss AS 支持兩種群集架構(gòu):客戶端攔截器(client-side interceptors)(proxies 或 stubs)和負(fù)載平衡系統(tǒng)(load balancers)。
1.1.2.1 客戶端攔截器
JBoss 應(yīng)用服務(wù)器提供的大部分遠(yuǎn)程服務(wù),包括 JNDI、EJB、RMI 和 JBoss Remoting,都要求客戶端獲得(如,查找和下載)一個 stub(或 proxy)對象。占位對象(stub object)由服務(wù)器生成,它實現(xiàn)服務(wù)的商業(yè)接口。客戶可對占位對象調(diào)用本地方法。這個調(diào)用會自動尋找路由,并被服務(wù)器管理的服務(wù)對象引用。在群集環(huán)境里,服務(wù)器生成的占位對象也是一個懂得怎樣把調(diào)用指引向不同節(jié)點的攔截器。占位對象尋找合適的服務(wù)器節(jié)點、配置調(diào)用參數(shù)、解釋調(diào)用結(jié)果,并把結(jié)果返回給調(diào)用程序。
stub interceptors 擁有群集系統(tǒng)的更新信息。例如,它們知道所有可用網(wǎng)絡(luò)節(jié)點的 IP 地址,怎樣在節(jié)點上分?jǐn)傌?fù)載的算法(請參考下一部分內(nèi)容),和如果目標(biāo)節(jié)點不可用時對請求進(jìn)行失效切換(failover)。對于每個服務(wù)請求,服務(wù)器節(jié)點都用群集里最新的信息來更新 stub interceptor。例如,如果一個節(jié)點退出群集系統(tǒng)后,每個客戶 stub interceptor 在下一次連接活動的節(jié)點時,都會用新的配置來更新。在 service stub 上的所有操作對于客戶應(yīng)用程序都是透明的。
如圖1.2, “集群中的客戶端攔截(代理)體系結(jié)構(gòu)” 里說明了客戶端攔截器群集架構(gòu)。
圖 1.2. 集群中的客戶端攔截 (代理) 體系結(jié)構(gòu)
1.1.2.2負(fù)載平衡系統(tǒng)
其他的 JBoss 服務(wù),特別是 HTTP web 服務(wù),不要求客戶下載任何東西。客戶端(如,web 瀏覽器)按照某種通信協(xié)議(如 HTTP 協(xié)議)直接發(fā)送請求和接收回復(fù)。在這種情況下,負(fù)載平衡系統(tǒng)需要處理所有的請求并把它們分配給群集里的服務(wù)器節(jié)點。負(fù)載平衡系統(tǒng)是群集里的一個典型概念。它理解群集配置和失效切換策略(failover policies)。客戶只需要知道它的存在。如圖 1.3, “集群的負(fù)載均衡體系” 說明了負(fù)載平衡系統(tǒng)的群集架構(gòu)。
http://blog.51cto.com/viewpic.php?refimg=http://xudayu.blog.51cto.com/attachment/200803/200803091205050005890.jpg
圖 1.3. 集群的負(fù)載均衡體系
負(fù)載平衡本身就是一個單點故障,這對于負(fù)載均衡是一個潛在的問題。它需要受到密切的監(jiān)控,以確保高可用性的集群服務(wù)。