一、 IceGrid功能
1. 定位服務(wù)(Location service )
作為一個(gè)ICE定位服務(wù),IceGrid的實(shí)施使客戶能夠間接地綁定到他們的服務(wù)器,提高應(yīng)用程序的靈活性和適應(yīng)不斷變化的需求。
2. 按需激活(On-demand server activation )
分布式部署的節(jié)點(diǎn)服務(wù)器,不需要立即啟動(dòng),在客戶端向服務(wù)器發(fā)送一個(gè)服務(wù)請(qǐng)求時(shí),icegrid檢查到該服務(wù)所在的服務(wù)器存在但是沒(méi)有激活,則icegrid會(huì)激活這個(gè)服務(wù)器,這一過(guò)程對(duì)于客戶端來(lái)說(shuō)是透明的。
3. 應(yīng)用程序部署(Application distribution )
IceGrid提供了一種很方便的方式來(lái)部署應(yīng)用到一組計(jì)算機(jī)中,不在需要一個(gè)文件共享系統(tǒng)或者是復(fù)雜的部署腳本,簡(jiǎn)單的使用IcePath2的配置服務(wù),就能夠保持必要的程序和文件的同步。
4. 復(fù)制和負(fù)載均衡(Replication and load balancing )
IceGrid的支持復(fù)制功能,將幾臺(tái)服務(wù)器中的是對(duì)象適配器復(fù)制成一個(gè)單一的虛擬對(duì)象適配器。在客戶端和服務(wù)器間接綁定期間,客戶端能夠連接到任意一個(gè)對(duì)象適配器的端點(diǎn),而且,IceGrid監(jiān)聽(tīng)每一臺(tái)服務(wù)器的負(fù)載情況,當(dāng)客戶端請(qǐng)求服務(wù)時(shí),IceGrid使用這些監(jiān)聽(tīng)信息來(lái)決定分配哪個(gè)端點(diǎn)來(lái)處理客戶端的請(qǐng)求。
5. 會(huì)話和資源分配(Sessions and resource allocation )
客戶端可以建立一個(gè)會(huì)話(session)來(lái)獨(dú)占某個(gè)對(duì)象或者代理甚至服務(wù)器。IceGrid會(huì)阻止其他的客戶端使用這個(gè)分配的資源,直到客戶端釋放它或者session過(guò)期。IceGrid的session服務(wù)增強(qiáng)了安全性,通過(guò)使用集成了一個(gè)Glacier2路由器的認(rèn)證機(jī)制。
6. 自動(dòng)容錯(cuò)(Automatic failover )
ice支持在任何一個(gè)包含多個(gè)端點(diǎn)的代理中自動(dòng)重試和容錯(cuò)功能。當(dāng)結(jié)合IceGrid的復(fù)制和負(fù)載均衡的支持時(shí),自動(dòng)故障轉(zhuǎn)移意味著客戶端發(fā)送一個(gè)請(qǐng)求,服務(wù)器處理請(qǐng)求失敗時(shí),IceGrid會(huì)選擇一個(gè)最低負(fù)載的端點(diǎn)重新處理請(qǐng)求。
7. 動(dòng)態(tài)查詢(Dynamic queries )
在客戶端通過(guò)查找的方式,查找出所有的代理端口信息,并由客戶端決定使用哪個(gè)代理。
8. 狀態(tài)監(jiān)測(cè)(Status monitoring )
IceGrid提供Slice接口,允許應(yīng)用程序監(jiān)控其各項(xiàng)活動(dòng)和收到有關(guān)重大事項(xiàng)的通知,可以使用監(jiān)控接口來(lái)整合現(xiàn)有的監(jiān)控系統(tǒng)。
9. 管理(Administration )
IceGrid包括命令行和圖形化的管理工具。它們支持所有的平臺(tái),并允許啟動(dòng),停止,監(jiān)控,和重新配置任何服務(wù)器。
10. 部署(Deployment )
使用XML文件,通過(guò)描述符部署服務(wù)器到每臺(tái)計(jì)算機(jī),使用模板描述符可以簡(jiǎn)化相同服務(wù)器的部署。
11. 數(shù)據(jù)庫(kù)獨(dú)立(Database Independence)
默認(rèn)情況下,IceGrid的使用Freeze數(shù)據(jù)庫(kù)以保存其狀態(tài)。然而,您可以配置IceGrid使用不同的數(shù)據(jù)庫(kù),如MySQL。
二、 IceGrid架構(gòu)
一個(gè) IceGrid域由一個(gè)注冊(cè)表(Registry)和任何數(shù)目的節(jié)點(diǎn)(Node)構(gòu)成。注冊(cè)表和節(jié)點(diǎn)一起合作管理一些信息以及包含一些應(yīng)用(Application)的服務(wù)進(jìn)程。每個(gè)應(yīng)用程序分配到特定節(jié)點(diǎn)的服務(wù)器。這個(gè)注冊(cè)表維護(hù)了這些信息,注冊(cè)表中的信息記錄被持久化到數(shù)據(jù)庫(kù)中,而節(jié)點(diǎn)負(fù)責(zé)啟動(dòng)和監(jiān)測(cè)其指定的服務(wù)器進(jìn)程。
對(duì)于一個(gè)典型的配置,一個(gè)節(jié)點(diǎn)運(yùn)行在一臺(tái)計(jì)算機(jī)(稱之為Ice服務(wù)器主機(jī))。注冊(cè)表并不消耗很多處理器時(shí)間,所以它常常是和一個(gè)節(jié)點(diǎn)運(yùn)行在同一臺(tái)計(jì)算機(jī)上的,事實(shí)上,注冊(cè)表和一個(gè)節(jié)點(diǎn)可以運(yùn)行在同一進(jìn)程中。
如果要想容錯(cuò)機(jī)制達(dá)到理想的狀態(tài),注冊(cè)表也支持復(fù)制(Replication)功能使用主從式的設(shè)計(jì)。
下圖顯示一個(gè)很簡(jiǎn)單的IceGrid應(yīng)用,它運(yùn)行在一個(gè)有三臺(tái)計(jì)算機(jī)的網(wǎng)絡(luò)上。該IceGrid Registry 是PC1主機(jī)中唯一的一個(gè)進(jìn)程中,而IceGrid Node運(yùn)行在PC2和PC3主機(jī)上。此示例中,一個(gè)服務(wù)已經(jīng)被分配給每個(gè)節(jié)點(diǎn),客戶端安裝在一臺(tái)獨(dú)立的PC4上。

從客戶端應(yīng)用程序的角度來(lái)看,注冊(cè)表的主要責(zé)任,是解決作為Ice定位服務(wù)的間接代理問(wèn)題。因此,這方面的作用是非常明顯的:當(dāng)客戶端第一次嘗試使用一種間接代理,客戶端的Ice run time連接注冊(cè)表,并且將代理的符號(hào)信息轉(zhuǎn)化為端點(diǎn),使用這個(gè)端點(diǎn)允許客戶端建立一個(gè)連接。
盡管注冊(cè)還提供了一些其他的功能,不僅僅是一個(gè)簡(jiǎn)單的查詢表,一個(gè)定位請(qǐng)求可能提示一個(gè)節(jié)點(diǎn)自動(dòng)啟動(dòng)目標(biāo)服務(wù),或注冊(cè)表可能會(huì)根據(jù)每臺(tái)電腦的負(fù)荷統(tǒng)計(jì)選擇適當(dāng)?shù)亩它c(diǎn)。
間接代理的好處:位置服務(wù)可以提供很大的功能,而客戶端不需要任何額外的特定的操作,這點(diǎn)和直接代理不同,客戶端并不需要更多的服務(wù)器的地址和端口信息。只是間接代理在客戶的第一次使用代理時(shí)增加了一些延遲,不過(guò),以后所有的相互作用直接發(fā)生在客戶端和服務(wù)器之間,所以成本是微不足道的。此外,間接代理的方式允許已經(jīng)部署的服務(wù)器遷移到不同的計(jì)算機(jī)上,而不需要更新客戶端所持有的代理。
參考《Distributed Programming with Ice》,IceGrid學(xué)習(xí)筆記(待續(xù)),無(wú)處不在 第39章IceGrid 第3節(jié)IceGrid構(gòu)架(翻譯)