然后,調(diào)用create service,系統(tǒng)會(huì)在ServiceBroker中記錄你的配置信息。這樣就算大功告成了。Bind和其他的過(guò)程都有ServiceBroker完成,其實(shí)僅僅就是記錄信息,沒(méi)有實(shí)際操作。使用這個(gè)新的Service的時(shí)候和使用CloudFoundry的內(nèi)部Service沒(méi)有兩樣,配置參數(shù)都會(huì)通過(guò)環(huán)境變量傳入。所以當(dāng)App訪問(wèn)Service的時(shí)候,就與ServiceBroker無(wú)關(guān)了。
五、DEA
DEA是App的運(yùn)行環(huán)境,全稱(chēng)是DropletExecution Agent。一臺(tái)虛擬機(jī)上會(huì)運(yùn)行一個(gè)或多個(gè)DEA。一個(gè)DEA可以啟動(dòng)多個(gè)App(又稱(chēng)Droplet)。所以我們大家的App都會(huì)由DEA啟動(dòng)并管理。
當(dāng)CloudFoundry剛剛推出的時(shí)候, Droplet包含了應(yīng)用運(yùn)行時(shí)啟動(dòng),停止等簡(jiǎn)單命令。用戶應(yīng)用可以隨意訪問(wèn)文件系統(tǒng),也可以在內(nèi)網(wǎng)暢通無(wú)阻,跑滿CPU,占盡內(nèi)存,寫(xiě)滿磁盤(pán)。你一切可以想到的破壞性操作都可以做到,太可怕了。CloudFoundry顯然不會(huì)放任這樣的情況太久,現(xiàn)在他們開(kāi)發(fā)出了Warden,一個(gè)程序運(yùn)行容器。這個(gè)容器提供了一個(gè)孤立的環(huán)境,Droplet只可以獲得受限的CPU,內(nèi)存,磁盤(pán)訪問(wèn)權(quán)限,網(wǎng)絡(luò)權(quán)限,再?zèng)]有辦法搞破壞了。
Warden在Linux上的實(shí)現(xiàn)是將Linux 內(nèi)核的資源分成若干個(gè)namespace加以區(qū)分,底層的機(jī)制是CGROUP。這樣的設(shè)計(jì)比虛擬機(jī)性能好,啟動(dòng)快,也能夠獲得足夠的安全性。在網(wǎng)絡(luò)方面,每一個(gè)Warden實(shí)例有一個(gè)虛擬網(wǎng)絡(luò)接口,每個(gè)接口有一個(gè)IP,而DEA內(nèi)有一個(gè)子網(wǎng),這些網(wǎng)絡(luò)接口就連在這個(gè)子網(wǎng)上。安全可以通過(guò)iptables來(lái)保證。在磁盤(pán)方面,每個(gè)warden實(shí)例有一個(gè)自己的filesystem。這些filesystem使用aufs實(shí)現(xiàn)的。Aufs可以共享warden之間的只讀內(nèi)容,區(qū)分只寫(xiě)的內(nèi)容,提高了磁盤(pán)空間的利用率。因?yàn)閍ufs只能在固定大小的文件上讀寫(xiě),所以磁盤(pán)也沒(méi)有出現(xiàn)寫(xiě)滿的可能性。
LXC是另一個(gè)Linux Container。那為什么不使用它,而開(kāi)發(fā)了Warden呢。因?yàn)長(zhǎng)XC的實(shí)現(xiàn)是和Linux綁死的,CloudFoundry希望warden能運(yùn)轉(zhuǎn)在各個(gè)不同的平臺(tái),而不只是Linux。另外Warden提供了一個(gè)Daemon和若干Api來(lái)操作,LXC提供的是系統(tǒng)工具。還有最重要的一點(diǎn)是LXC過(guò)于龐大,Warden只需要其中的一點(diǎn)點(diǎn)功能就可以了,更少的代碼便于調(diào)試。
六、結(jié)語(yǔ)
至此,我們已經(jīng)全面的瀏覽了CloudFoundry的新功能,新設(shè)計(jì)。云計(jì)算的大潮浩浩湯湯,CloudFoundry作為第一個(gè)開(kāi)源的PaaS平臺(tái)日臻成熟,實(shí)用。但未來(lái)還會(huì)有更多更好設(shè)計(jì)等著我們發(fā)現(xiàn),屆時(shí)我們?cè)僖黄鸱窒怼?/span>