樊偉鈺 ,朱曉民
(1 北京郵電大學(xué)網(wǎng)絡(luò)與交換技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,北京 100876;2 東信北郵信息技術(shù)有限公司,北京 100191)
伴隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,尤其是移動(dòng)互聯(lián)網(wǎng)快速興起和發(fā)展,各種各樣的PaaS(Platform as a Service,平臺(tái)即服務(wù))平臺(tái)隨之出現(xiàn),業(yè)界比較著名的有Sina App Engine (SAE,新浪公司W(wǎng)eb開(kāi)發(fā)PaaS平臺(tái))、Google App Engine(GAE,谷歌Web應(yīng)用程序開(kāi)發(fā)和托管平臺(tái))、Cloud Foundry(CF,VMware公司推出的開(kāi)源PaaS平臺(tái))等,除此之外還有眾多的企業(yè)內(nèi)部的私有PaaS平臺(tái)。
PaaS系統(tǒng)的出現(xiàn)及發(fā)展,在為Web應(yīng)用開(kāi)發(fā)提供巨大便利的同時(shí),其系統(tǒng)本身、以及其中部署的應(yīng)用和服務(wù)的監(jiān)控任務(wù)也開(kāi)始面臨巨大的挑戰(zhàn),如何處理及展示大量非結(jié)構(gòu)的數(shù)據(jù)成為一項(xiàng)重要的內(nèi)容[1,2]。
作為云計(jì)算的3種服務(wù)模型中的一種,PaaS具有云計(jì)算所有的特征,其中最重要的兩點(diǎn),一是極大的節(jié)約計(jì)算機(jī)資源,二是使用戶更多的關(guān)注自己的業(yè)務(wù)實(shí)現(xiàn),而不必過(guò)多考慮硬件資源的管理。為了滿足以上的需求,PaaS平臺(tái)一般具有以下幾個(gè)特征:自主 的(autonomous), 協(xié) 作 的(cooperative), 自 適應(yīng)的(situational),可進(jìn)化的(evolvable),應(yīng)急的(emergent),可信賴的(trustworthy)[3~5]。為了滿足以上幾個(gè)特征,PaaS平臺(tái)需要具有自我管理的能力,而自我的監(jiān)控則是其中一項(xiàng)最基本的能力。
對(duì)于PaaS服務(wù)的提供者,需要實(shí)時(shí)了解PaaS平臺(tái)的運(yùn)行狀態(tài),每個(gè)系統(tǒng)組件的負(fù)荷,系統(tǒng)容量以及負(fù)載,并從監(jiān)控?cái)?shù)據(jù)分析系統(tǒng)的性能瓶頸,從而不斷的優(yōu)化系統(tǒng)性能。對(duì)于PaaS平臺(tái)本身,為了能夠滿足自主、自適應(yīng)等特性,需要實(shí)時(shí)獲取系統(tǒng)各組件的運(yùn)行狀態(tài)、負(fù)載,從而實(shí)現(xiàn)故障組件的自動(dòng)重啟,高負(fù)載組件自動(dòng)擴(kuò)容以及多余組件的自動(dòng)關(guān)閉,實(shí)現(xiàn)資源的自動(dòng)縮放。而對(duì)于PaaS服務(wù)的使用者,即應(yīng)用開(kāi)發(fā)者,監(jiān)控功能也是一項(xiàng)必須要提供的功能。開(kāi)發(fā)者需要隨時(shí)了解所托管的應(yīng)用運(yùn)行狀態(tài),資源占用情況,以及是否需要增加或減少所購(gòu)買的資源等。由此可見(jiàn),監(jiān)控功能對(duì)于PaaS平臺(tái)自身以及各個(gè)層次的用戶都是必要的。
實(shí)際的PaaS系統(tǒng)監(jiān)控中卻面臨著各種各樣的困難。首先,PaaS系統(tǒng)中組件的多樣性以及組件之間異構(gòu)的特性決定不能使用統(tǒng)一的數(shù)據(jù)采集及存儲(chǔ)方案,必須為各個(gè)組件定制單一的數(shù)據(jù)監(jiān)控方案[5]。其次,相比傳統(tǒng)的軟件監(jiān)控,PaaS系統(tǒng)中各組件分布式的特征以及組件實(shí)例個(gè)數(shù)和運(yùn)行位置的動(dòng)態(tài)性,為監(jiān)控提出了新的挑戰(zhàn)[6,7]。最后,系統(tǒng)獲取的原始數(shù)據(jù)過(guò)于龐雜,可讀性差,對(duì)于各層次的用戶無(wú)法起到監(jiān)控和管理系統(tǒng)和應(yīng)用的作用,從而需要對(duì)大量復(fù)雜的原始數(shù)據(jù)進(jìn)行有效的加工組織。
為了應(yīng)對(duì)這些在PaaS系統(tǒng)監(jiān)控中面臨的問(wèn)題,本文提出了一種全新的解決方案。通過(guò)分布式的代理,以及各組件內(nèi)置的異構(gòu)化的數(shù)據(jù)采集模塊,采集原始數(shù)據(jù),這樣就有效的解決了異構(gòu)數(shù)據(jù)的收集問(wèn)題。通過(guò)綜合代理采集的數(shù)據(jù)和組件數(shù)據(jù)采集模塊提交的數(shù)據(jù),系統(tǒng)能夠及時(shí)發(fā)現(xiàn)新增組件及丟失的組件。此外,通過(guò)對(duì)數(shù)據(jù)的進(jìn)一步關(guān)聯(lián)、綜合,就能夠形成系統(tǒng)總體的拓?fù)浣Y(jié)構(gòu),同時(shí)為不同層級(jí)的用戶展示權(quán)限范圍內(nèi)的監(jiān)控視圖。
為了更好的理解PaaS監(jiān)控系統(tǒng)所要完成的工作,首先需要介紹一下PaaS的總體架構(gòu)。不同的IT公司和組織都提供了自己的PaaS平臺(tái),而且各個(gè)PaaS平臺(tái)的系統(tǒng)架構(gòu)、實(shí)現(xiàn)技術(shù)等也各不相同,為了方便同時(shí)又不失一般性,我們將PaaS平臺(tái)從邏輯上抽象為以下幾個(gè)組件:Router(路由器),Controller(控制器),User Auth(用戶鑒權(quán)),App Container(應(yīng)用運(yùn)行容器),Services(服務(wù)組件),Message Bus(消息總線)以及Monitor(監(jiān)控器)等[3]。如圖1所示,各組件的功能如下。
圖1 PaaS系統(tǒng)的組成
Router:路由組件,負(fù)責(zé)將外部的請(qǐng)求轉(zhuǎn)發(fā)到PaaS內(nèi)部的指定地址。如將應(yīng)用使用者的請(qǐng)求轉(zhuǎn)發(fā)到應(yīng)用實(shí)例所在的應(yīng)用運(yùn)行容器,將PaaS用戶的請(qǐng)求轉(zhuǎn)發(fā)到控制器或用戶鑒權(quán)組件。此外該組件還負(fù)責(zé)應(yīng)用的不同實(shí)例之間的負(fù)載均衡。
Controller:控制器是PaaS平臺(tái)的控制中心,負(fù)責(zé)處理應(yīng)用開(kāi)發(fā)者管理應(yīng)用和服務(wù)的請(qǐng)求,同時(shí)對(duì)系統(tǒng)出現(xiàn)的各種異常情況進(jìn)行處理。
User Auth:該組件負(fù)責(zé)PaaS平臺(tái)用戶體系的管理,用戶接入的鑒權(quán)等。
App Container:該組件是應(yīng)用運(yùn)行的環(huán)境,包括操作系統(tǒng)、必須的語(yǔ)言及框架環(huán)境等。
Service:該組件為PaaS平臺(tái)提供商為應(yīng)用開(kāi)發(fā)者提供的為支持應(yīng)用正常運(yùn)行的服務(wù),如定時(shí)任務(wù)服務(wù)、數(shù)據(jù)庫(kù)服務(wù)、郵件服務(wù)等。該組件最能體現(xiàn)不同PaaS提供商的特性。
Message Bus:該組件是系統(tǒng)運(yùn)行的總線,各組件之間的信息交流都是通過(guò)該組件進(jìn)行的。
Monitor:負(fù)責(zé)采集各個(gè)虛擬機(jī)、組件、應(yīng)用和服務(wù)的運(yùn)行數(shù)據(jù),對(duì)出現(xiàn)的異常發(fā)出報(bào)告,同時(shí)為系統(tǒng)管理員、PaaS使用者等提供查看系統(tǒng)及應(yīng)用運(yùn)行狀態(tài)的Web界面。
采用自頂向下的方法,可以通過(guò)劃分PaaS平臺(tái)各種用戶的類型,然后根據(jù)不同用戶的不同需求,決定需要監(jiān)控哪些內(nèi)容。PaaS平臺(tái)的用戶一般可分為以下3個(gè)角色。
管理員:PaaS平臺(tái)的提供者。該角色關(guān)心整個(gè)PaaS平臺(tái)及基礎(chǔ)設(shè)施的運(yùn)行情況,包括虛擬機(jī)的配置、運(yùn)行狀態(tài)以及PaaS系統(tǒng)各個(gè)組件的拓?fù)浣Y(jié)構(gòu)和部署運(yùn)行情況。
服務(wù)提供商:PaaS平臺(tái)中所支持的各種服務(wù)的提供者。該角色關(guān)心自身服務(wù)的運(yùn)行情況及開(kāi)發(fā)者對(duì)服務(wù)的購(gòu)買使用情況等。
開(kāi)發(fā)者:PaaS平臺(tái)的使用者,也是應(yīng)用的開(kāi)發(fā)者。該角色關(guān)心自己應(yīng)用的運(yùn)行情況、應(yīng)用流量、訪問(wèn)量以及所購(gòu)買的資源服務(wù)的使用情況等。
綜合以上3種用戶的需求,可以將需要獲取的監(jiān)控信息分為以下幾個(gè)類型。
基礎(chǔ)設(shè)施信息:主要是指虛擬機(jī)的部署及配置信息,包括虛擬機(jī)的CPU、內(nèi)存、磁盤(pán)及網(wǎng)絡(luò)配置情況,還包括一些動(dòng)態(tài)信息,比如進(jìn)程的所占用的系統(tǒng)資源信息等。通過(guò)這些信息可以了解該虛擬機(jī)的負(fù)載情況,虛擬機(jī)上各個(gè)進(jìn)程的負(fù)載情況等。
PaaS組件信息:主要是指PaaS平臺(tái)中各個(gè)組件所運(yùn)行的位置,性能數(shù)據(jù),組件內(nèi)部一些運(yùn)行數(shù)據(jù),如APP Container中的應(yīng)用信息,Router中各個(gè)應(yīng)用實(shí)例的流量及訪問(wèn)量信息、路由表信息等。通過(guò)這些信息可以構(gòu)建PaaS平臺(tái)的拓?fù)浣Y(jié)構(gòu)。
服務(wù)信息:包括兩方面的內(nèi)容,一是PaaS平臺(tái)中所能提供的各種服務(wù)信息,包括服務(wù)的類型、服務(wù)的容量、服務(wù)的使用情況;二是應(yīng)用開(kāi)發(fā)者所申請(qǐng)的服務(wù)實(shí)例的信息,包括服務(wù)實(shí)例的容量參數(shù),使用量,流量信息等。這些信息可以用于服務(wù)的計(jì)費(fèi),應(yīng)用開(kāi)發(fā)者對(duì)購(gòu)買的服務(wù)的管理等。
應(yīng)用信息:包括應(yīng)用的語(yǔ)言架構(gòu),應(yīng)用的實(shí)例個(gè)數(shù)及運(yùn)行情況,應(yīng)用的訪問(wèn)量等信息。PaaS平臺(tái)的使用者可以實(shí)時(shí)了解系統(tǒng)中應(yīng)用的個(gè)數(shù)及運(yùn)行狀態(tài),應(yīng)用的開(kāi)發(fā)者可以了解自己托管應(yīng)用的運(yùn)行狀態(tài)等信息。
用戶信息:是PaaS平臺(tái)的一個(gè)重要內(nèi)容,用戶信息涉及到用戶鑒權(quán)、計(jì)費(fèi)管理、資源配額管理等。
PaaS平臺(tái)監(jiān)控系統(tǒng)總體如圖2所示。
系統(tǒng)主要分為3個(gè)部分,數(shù)據(jù)采集、數(shù)據(jù)處理以及數(shù)據(jù)的展示。通過(guò)這樣的層次劃分,可以將本系統(tǒng)的3大功能區(qū)分開(kāi),減少相互之間的耦合度,便于之后各模塊獨(dú)立的更改和升級(jí)。
之前已經(jīng)介紹了需要采集的監(jiān)控?cái)?shù)據(jù)的類別,按照這些監(jiān)控?cái)?shù)據(jù)的采集來(lái)源,可以將監(jiān)控?cái)?shù)據(jù)分為以下3個(gè)數(shù)據(jù)源。
圖2 PaaS系統(tǒng)數(shù)據(jù)監(jiān)控平臺(tái)的總體設(shè)計(jì)圖
4.2.1 PaaS平臺(tái)數(shù)據(jù)庫(kù)
PaaS系統(tǒng)中的一些關(guān)鍵數(shù)據(jù)都是持久化到數(shù)據(jù)庫(kù)中,這部分?jǐn)?shù)據(jù)主要包括應(yīng)用開(kāi)發(fā)者信息,應(yīng)用和服務(wù)的部分配置信息,如應(yīng)用和服務(wù)的綁定信息、應(yīng)用和域名的綁定信息等。通過(guò)只讀的方式訪問(wèn)這些數(shù)據(jù)表,可以快速直觀的得到這些原始數(shù)據(jù)。
4.2.2 PaaS組件的Web接口
每個(gè)PaaS組件都會(huì)實(shí)現(xiàn)一個(gè)名為VARZ的Web接口,所有組件都會(huì)將自己的配置信息、運(yùn)行信息以及自身所執(zhí)行功能的數(shù)據(jù)放到該接口中,并定時(shí)更新,這樣外部就可以在獲取該VARZ接口地址后,方便的采集到該組件的信息。
4.2.3 數(shù)據(jù)采集代理
數(shù)據(jù)采集代理部署在每一個(gè)虛擬機(jī)中,采集每個(gè)虛擬機(jī)的配置信息、性能數(shù)據(jù)(CPU數(shù)據(jù)、網(wǎng)絡(luò)數(shù)據(jù)、內(nèi)存數(shù)據(jù)、磁盤(pán)負(fù)載等),以及虛擬機(jī)上的進(jìn)程信息。
采集到的監(jiān)控?cái)?shù)據(jù)需要通過(guò)某種方式統(tǒng)一的提交到數(shù)據(jù)分析處理模塊。由于監(jiān)控?cái)?shù)據(jù)的采集使用了3種完全異構(gòu)的方式,為了提供統(tǒng)一的對(duì)外接口,采用了基于消息訂閱Message組件,數(shù)據(jù)采集模塊的每個(gè)部分都按照預(yù)定義的消息主題發(fā)布消息,數(shù)據(jù)分析處理模塊可以通過(guò)訂閱相應(yīng)的消息主題獲得采集到的數(shù)據(jù)。
數(shù)據(jù)分析處理模塊的主要功能是將采集到的碎片化的監(jiān)控?cái)?shù)據(jù),綜合整理,形成結(jié)構(gòu)化的數(shù)據(jù),有些需要持久化的數(shù)據(jù)會(huì)存儲(chǔ)到數(shù)據(jù)庫(kù)中,而其他數(shù)據(jù)則只需要保存在內(nèi)存中不斷更新即可。原始數(shù)據(jù)采集模塊采集的數(shù)據(jù)過(guò)于龐雜和繁瑣,不能直接提供給不同類型的用戶,需要將各方面采集的數(shù)據(jù)進(jìn)行有效的整理綜合,形成結(jié)構(gòu)化的、可讀的數(shù)據(jù)。
原始數(shù)據(jù)的處理主要包含以下幾個(gè)功能。
4.3.1 構(gòu)建PaaS系統(tǒng)的拓?fù)浣Y(jié)構(gòu)
通過(guò)分析服務(wù)器節(jié)點(diǎn)信息和組件的一些信息,可以定位出PaaS各個(gè)組件與服務(wù)器節(jié)點(diǎn)的對(duì)應(yīng)關(guān)系,從而構(gòu)建出PaaS系統(tǒng)的拓?fù)浣Y(jié)構(gòu)圖,直觀的展示系統(tǒng)的部署情況。
4.3.2 應(yīng)用實(shí)例的分布狀況
在應(yīng)用程序部署的過(guò)程中,應(yīng)用程序?qū)嵗\(yùn)行的實(shí)際位置(具體的哪個(gè)App Container及哪個(gè)服務(wù)器)由PaaS系統(tǒng)根據(jù)一定的策略做出選擇,所以外界無(wú)法直觀的感知。通過(guò)對(duì)應(yīng)用信息的分析結(jié)合PaaS組件的信息,可以定位每個(gè)應(yīng)用實(shí)例實(shí)時(shí)的位置。
4.3.3 統(tǒng)計(jì)應(yīng)用的流量、訪問(wèn)量及負(fù)載信息
通過(guò)對(duì)Router組件路由信息的統(tǒng)計(jì)整理,可以計(jì)算出每一個(gè)應(yīng)用實(shí)例的訪問(wèn)量、數(shù)據(jù)流量及其運(yùn)行的性能數(shù)據(jù),通過(guò)這些數(shù)據(jù)可以實(shí)時(shí)的對(duì)應(yīng)用實(shí)例的個(gè)數(shù)進(jìn)行增減,以確保應(yīng)用運(yùn)行在最佳狀態(tài)同時(shí)避免資源的浪費(fèi)。
4.3.4 發(fā)現(xiàn)系統(tǒng)運(yùn)行瓶頸
綜合服務(wù)器節(jié)點(diǎn)及PaaS各組件的負(fù)載情況,可以實(shí)時(shí)了解每個(gè)服務(wù)器節(jié)點(diǎn)及PaaS組件的運(yùn)行狀態(tài),發(fā)現(xiàn)高負(fù)荷的服務(wù)器節(jié)點(diǎn)和組件,及時(shí)對(duì)系統(tǒng)的相應(yīng)部分進(jìn)行擴(kuò)容。同時(shí)發(fā)現(xiàn)故障節(jié)點(diǎn),將其移除系統(tǒng)。
4.3.5 數(shù)據(jù)存儲(chǔ)
將一些有價(jià)值的歷史數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中進(jìn)行持久化,其他數(shù)據(jù)則存放在內(nèi)存中,并向監(jiān)控?cái)?shù)據(jù)展示模塊提供數(shù)據(jù)接口。
然后根據(jù)不同類型用戶的需求形成不同的監(jiān)控視圖。按照查看監(jiān)控?cái)?shù)據(jù)的用戶的類別,監(jiān)控?cái)?shù)據(jù)的展示分為以下3類型。
4.4.1 系統(tǒng)管理員視圖
系統(tǒng)管理員是PaaS系統(tǒng)的提供者。該角色關(guān)心整個(gè)PaaS系統(tǒng)及基礎(chǔ)設(shè)施的運(yùn)行情況,包括虛擬機(jī)的配置、運(yùn)行狀態(tài)以及PaaS系統(tǒng)各個(gè)組件的拓?fù)浣Y(jié)構(gòu)和部署運(yùn)行情況。系統(tǒng)管理員可以看到系統(tǒng)中幾乎全部監(jiān)控?cái)?shù)據(jù),內(nèi)容比較多,主要分為兩大類,一是PaaS系統(tǒng)的全局信息,二是PaaS系統(tǒng)運(yùn)行的詳細(xì)信息。
4.4.2 服務(wù)提供商視圖
服務(wù)提供商PaaS系統(tǒng)中所支持的各種服務(wù)的提供者。該角色關(guān)心自身服務(wù)的運(yùn)行情況及開(kāi)發(fā)者對(duì)服務(wù)的購(gòu)買使用情況等。針對(duì)服務(wù)提供商,信息的展示主要是服務(wù)實(shí)例的信息,每個(gè)服務(wù)實(shí)例的詳細(xì)情況包括服務(wù)的實(shí)例的容量、使用量、及接口流量等數(shù)據(jù)。目前PaaS系統(tǒng)中提供的服務(wù)主要有兩大類:數(shù)據(jù)庫(kù)服務(wù)和短彩服務(wù),針對(duì)不同的服務(wù)類型,展示的內(nèi)容會(huì)有所差異。
4.4.3 應(yīng)用開(kāi)發(fā)者視圖
應(yīng)用開(kāi)發(fā)者是PaaS系統(tǒng)的使用者,也是應(yīng)用的開(kāi)發(fā)者。該角色關(guān)心自己應(yīng)用的運(yùn)行情況、應(yīng)用流量、訪問(wèn)量以及所購(gòu)買的資源服務(wù)的使用情況等。
應(yīng)用開(kāi)發(fā)者視圖主要展示用戶創(chuàng)建的應(yīng)用信息,申請(qǐng)的服務(wù)實(shí)例信息等。應(yīng)用信息詳情則包含應(yīng)用實(shí)例的個(gè)數(shù)、應(yīng)用的訪問(wèn)量、應(yīng)用的負(fù)載信息等;服務(wù)實(shí)例信息包含服務(wù)資源的使用量,及其他與應(yīng)用類型相關(guān)的信息。
PaaS系統(tǒng)數(shù)據(jù)監(jiān)控平臺(tái)能夠有效的解決PaaS系統(tǒng)中大量異構(gòu)化的數(shù)據(jù)的分析及展示問(wèn)題,此外系統(tǒng)的設(shè)計(jì)考慮到不同PaaS平臺(tái)的差異性,所有功能的設(shè)計(jì)都針對(duì)抽象的PaaS平臺(tái),因而具有較高的移植性。
目前關(guān)于這部分的工作僅停留在數(shù)據(jù)的采集、整理及展示方面,未來(lái)的工作將著重關(guān)注數(shù)據(jù)的監(jiān)控告警方面,從而實(shí)現(xiàn)通過(guò)數(shù)據(jù)采集監(jiān)控工作,自動(dòng)化的實(shí)現(xiàn)系統(tǒng)異常的監(jiān)控和告警功能。
[1] 沈青,董波,肖德寶. 基于服務(wù)器集群的云監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)科學(xué)與工程, 2012,34(10): 73-77.
[2] 趙京華. 應(yīng)用服務(wù)器集群管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京:北京郵電大學(xué). 2010.
[3] Shao J, Wang Q X. A model-driven monitoring approach for internetware on Platform-as-a-Service(PaaS)[J]. Internetware '12 Proceedings of the Fourth Asia-Pacific Symposium on Internetware[C].2012.
[4] Lawton, G. Developing software online with platform-as-a-service technology[J]. Computer, 2008,41(6):13-15.
[5] Shao, Wei H,Wang Q, Mei H. A runtime model based monitoring approach for cloud[A]. 2010 IEEE 3rd International Conference on Cloud Computing[C], 2010:313-320.
[6] 李維東. 基于Linux平臺(tái)的局域網(wǎng)與監(jiān)控系統(tǒng)的分析與實(shí)現(xiàn)[D].武漢:華中科技大學(xué). 2011.
[7] 譚鵬,黃紅偉. Web集群遠(yuǎn)程監(jiān)控策略[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2010,19(3):83-86.
[8] Katsaros G, Kbert R, Gallizo G. Building a service-oriented monitoring framework with REST and Nagios[A]. 2011 IEEE International Conference on Services Computing SCC[C]. 2011:426–431.