張可穎,龍士工,呂尚青,呂曉丹
(1.貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,貴州 貴陽 550025;2.貴州大學(xué) 貴州省公共大數(shù)據(jù)重點(diǎn)實(shí)驗(yàn)室,貴州 貴陽 550025;3.貴州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,貴州 貴陽 550025;4.北京郵電大學(xué) 信息與通信工程學(xué)院,北京 100000)
近年,云計(jì)算領(lǐng)域蓬勃發(fā)展。特別是容器技術(shù)的出現(xiàn)顛覆了原有的虛擬化技術(shù),其在自動(dòng)配置和計(jì)劃資源調(diào)度方面展現(xiàn)了良好性能。而且由于啟動(dòng)和終止開銷較低,容器正迅速取代許多云部署中的虛擬機(jī)VM[1],帶來了技術(shù)架構(gòu)的變革,從SOA到微服務(wù),成為如今國內(nèi)外大規(guī)模云服務(wù)產(chǎn)商的關(guān)注焦點(diǎn),如國外Google、AWS、Azure和國內(nèi)螞蟻金服、騰訊云等。同時(shí),容器云的出現(xiàn)也帶來了新的挑戰(zhàn)?;谖⒎?wù)思想的容器云平臺(tái)相比傳統(tǒng)IaaS云平臺(tái),監(jiān)控指標(biāo)呈爆炸式增長,比如服務(wù)器節(jié)點(diǎn)指標(biāo)、容器指標(biāo)、應(yīng)用性能指標(biāo)、自定義業(yè)務(wù)指標(biāo)等等。雖然出現(xiàn)了Prometheus這樣一個(gè)統(tǒng)一的平臺(tái)去處理監(jiān)控問題,但是Prometheus只是一套開源的系統(tǒng)監(jiān)控報(bào)警框架,并沒有細(xì)粒度對(duì)系統(tǒng)健康度進(jìn)行分析,繁瑣復(fù)雜的監(jiān)控指標(biāo)還需要根據(jù)業(yè)務(wù)進(jìn)行整合加工才能反映系統(tǒng)健康度。而且,目前對(duì)容器云平臺(tái)的研究多集中于云資源調(diào)度和數(shù)據(jù)分析,對(duì)監(jiān)控指標(biāo)建模進(jìn)行健康度分析討論是比較欠缺的。
針對(duì)容器云平臺(tái)微服務(wù)監(jiān)控指標(biāo)復(fù)雜,配置繁瑣的問題,提出了一種基于粗糙集的容器云系統(tǒng)健康度建模方法。通過建立的健康度指標(biāo)能夠更直觀地反映系統(tǒng)的健康度,從POD到NODE到整個(gè)集群,選取一系列指標(biāo)從各個(gè)粒度和多個(gè)維度全面監(jiān)控和整合數(shù)據(jù),方便運(yùn)維人員快速掌控集群實(shí)時(shí)情況,定位錯(cuò)誤。同時(shí)對(duì)容器云健康度的建模分析也有助于對(duì)集群資源調(diào)度的優(yōu)化。
近年,學(xué)術(shù)界對(duì)容器云系統(tǒng)健康度建模研究比較欠缺,多集中于對(duì)特定應(yīng)用背景容器平臺(tái)監(jiān)控架構(gòu)設(shè)計(jì)和平臺(tái)性能測(cè)試。鮮有學(xué)者專研系統(tǒng)健康度指標(biāo),提出一套通用的健康度評(píng)價(jià)體系。Seunghyun Seo等人針對(duì)異構(gòu)云平臺(tái)提出了一套聯(lián)合監(jiān)控系統(tǒng),主要包括四個(gè)模塊即組件管理器、聚合管理器、注冊(cè)表管理器和切片管理器[2]。Víctor Medel等人通過Petri網(wǎng)性能模型分析了Kubernetes性能,并設(shè)計(jì)和規(guī)劃了基于Kubernetes的彈性應(yīng)用程序[3];Xie X等人通過實(shí)驗(yàn)比較了基于Kubernetes的Docker,Rkt和裸機(jī)的性能,得出容器虛擬化技術(shù)的資源成本接近于“裸機(jī)”資源成本[4];Leila Abdollahi Vayghan等人對(duì)Kubernetes的HA架構(gòu)進(jìn)行了一系列實(shí)驗(yàn),表明微服務(wù)中斷遠(yuǎn)高于預(yù)期[5]。
云平臺(tái)健康度評(píng)價(jià)問題往往需要做出大量的不確定決策,而粗糙集在對(duì)不確定性信息處理方面得到了廣泛的應(yīng)用[6-9],是一種潛在的合適的解決方案。處理不確定性的數(shù)據(jù)工具除了粗糙集外,還有概率論、模糊集、模糊粗糙集等變種[10-11]。粗糙集在云平臺(tái)方面應(yīng)用的研究幾乎沒有。TeJen Su等人將模糊集理論應(yīng)用在云環(huán)境下的電力監(jiān)控系統(tǒng),通過實(shí)驗(yàn)證明了其可行性[12]。
在業(yè)界,有許多容器云指標(biāo)監(jiān)控解決方案,可用于分析Kubernetes性能,無論是開源的還是商業(yè)性質(zhì)的。比如Prometheus,Docker Stats API,cAdvisor,Sysdig,Heaper,Librato等。Docker Stats API直接輸出Json很難整合;cAdvisor在每個(gè)節(jié)點(diǎn)上提供一個(gè)運(yùn)行守護(hù)進(jìn)行,處理和導(dǎo)出每個(gè)節(jié)點(diǎn)運(yùn)行容器詳細(xì)資源使用信息,但是,它沒有一個(gè)系統(tǒng)的編排,難以轉(zhuǎn)化為更復(fù)雜的聚合和測(cè)試;Sysdig是一種付費(fèi)的解決方案;Heapster只能監(jiān)控主機(jī)級(jí)別和容器級(jí)別的數(shù)據(jù),無法監(jiān)控容器內(nèi)服務(wù)級(jí)別數(shù)據(jù);Librato更適合結(jié)合AWS或Heroku。而Promethues提供多維的數(shù)據(jù)模型,借助這種多維性所提供的靈活查詢語言,理論上服務(wù)支持Prometheus端點(diǎn)或是提供http端口的轉(zhuǎn)換器都可以手動(dòng)拉取數(shù)據(jù),既適用于面向服務(wù)器等硬件指標(biāo)的監(jiān)控,也適用于高動(dòng)態(tài)的面向服務(wù)架構(gòu)的監(jiān)控[3]。故文中提出的建模方法使用Python借助Promethues中Node exporter API提取各項(xiàng)監(jiān)控指標(biāo)數(shù)據(jù)進(jìn)行系統(tǒng)健康度建模。
容器云平臺(tái)采用Kubernetes和Docker實(shí)現(xiàn),架構(gòu)為主從架構(gòu),監(jiān)控維度從整個(gè)集群到Node再到Pod,一個(gè)Node有多個(gè)Pod,一個(gè)Pod可能有多個(gè)容器,如圖1所示。Master節(jié)點(diǎn)上安裝有重要系統(tǒng)組件:API Server、Scheduler、Controller和Etcd,以Pod形式存在。根據(jù)業(yè)務(wù)不同,主要可分為計(jì)算密集業(yè)務(wù)、網(wǎng)絡(luò)密集業(yè)務(wù)和IO密集業(yè)務(wù)。Node監(jiān)控維度包括Node的CPU、內(nèi)存、網(wǎng)絡(luò)和IO利用率等。Pod監(jiān)控維度包括Pod的CPU、內(nèi)存、網(wǎng)絡(luò)和IO相關(guān)指標(biāo)。詳細(xì)參數(shù)參考下面章節(jié)內(nèi)容。
圖1 云平臺(tái)架構(gòu)
Node-Exporter對(duì)Prometheus暴露出系統(tǒng)可以被“抓取”的Metrics信息。Prometheus調(diào)用api端口信息完成查詢,Grafana調(diào)用信息完成數(shù)據(jù)可視化。文中使用Python抓取從exporter api暴露的Metrics信息,然后進(jìn)行基于信息熵連續(xù)屬性離散化處理,最后建立基于粗糙集的決策表,推導(dǎo)出決策規(guī)則。
圖2 資源監(jiān)控?cái)?shù)據(jù)獲取流程
(1)云平臺(tái)中Node的監(jiān)控?cái)?shù)據(jù)(條件屬性)NodeC={cpu,memory,network,io…}和PodC={cpu{…},memory{…},network{…},io{…}}均為連續(xù)屬性,Pod部分經(jīng)典監(jiān)控參數(shù)見表1。決策屬性是系統(tǒng)健康度D={healthy,normal,unhealthy},為離散屬性。
表1 Pod監(jiān)控參數(shù)
決策表的一般形式見表2。
表2 決策表的一般形式
(3)決策表相容度定義為:
其中,|X|表示集合的個(gè)數(shù),P(Xk)表示子集Xk在等價(jià)關(guān)系P下的下近似集。一般有0≤dp(Q)≤1,當(dāng)dp(Q)=1時(shí),表示所有的實(shí)例在相同條件屬性下都有相同的決策屬性值,此時(shí)稱決策表是相容的。
(4)屬性約簡[14]。
定義2:設(shè)U為一個(gè)論域,P為定義在U上的一個(gè)等價(jià)關(guān)系簇,P中所有絕對(duì)必要關(guān)系組成的集合稱為關(guān)系簇P的絕對(duì)核,記作CORE(P)。
定義3:設(shè)U為一個(gè)論域,P和U為定義在U上的兩個(gè)等價(jià)關(guān)系簇,若POSP(Q)=POS(P{r})(Q),則稱r為P中相對(duì)于Q可省略的(不必要的),簡稱P中Q可省略的;否則稱r為P相對(duì)于Q不可省略的(必要的)。
屬性約簡算法:
對(duì)于決策表中的每一個(gè)條件屬性ci,進(jìn)行如下流程,直至屬性集合不再發(fā)生變化為止。
{
如果刪除該屬性ci使POS(P{ci})(Q)=POSP(Q),則說明屬性ci是相對(duì)于決策屬性d不必要的,從決策表中刪除屬性ci所在列并將重復(fù)的行進(jìn)行合并;
否則,說明屬性ci是相對(duì)于決策屬性d必要的,不能刪除
}
對(duì)決策表?xiàng)l件屬性進(jìn)行約簡,去掉不重要的條件屬性,從而提取更準(zhǔn)確和最少的判斷系統(tǒng)監(jiān)控度的決策規(guī)則。
(5)決策表一致性檢查[15]。
定義4:設(shè)U為一個(gè)論域,P和Q為定義在U上的兩個(gè)等價(jià)關(guān)系簇,如果POSp(Q)=U,則稱論域U是P上相當(dāng)于Q一致的。
定義5(信息熵):設(shè)離散隨機(jī)變量X={x1,x2,…,xn},X?U,|X|表示實(shí)例個(gè)數(shù)。其中決策屬性j(j=1,2,…,r(d))實(shí)例個(gè)數(shù)為Kj,則X的信息熵定義為:
信息熵是信息論中用于度量信息量的一個(gè)概念。一個(gè)系統(tǒng)越是有序,信息熵就越低;反之,一個(gè)系統(tǒng)越是混亂,信息熵就越高。對(duì)云平臺(tái),如果基于監(jiān)控指標(biāo)計(jì)算的信息熵增加,表示集群有可能處于異常狀態(tài),需要?jiǎng)討B(tài)彈性調(diào)整。因?yàn)楸O(jiān)控?cái)?shù)據(jù)是連續(xù)數(shù)據(jù),建立粗糙集決策表需要將連續(xù)數(shù)據(jù)進(jìn)行離散化。
具體的離散化算法步驟設(shè)計(jì)如下:
設(shè)決策表S=,R=C∪D,條件屬性集合C={c1,c2,…,cn},P為已經(jīng)選取的斷點(diǎn)集合,Q是實(shí)例被斷點(diǎn)集合P所劃分成的等價(jià)類的集合,B為候選的斷點(diǎn)集合,H為決策表信息熵,對(duì)連續(xù)的條件屬性k∈C,將屬性值進(jìn)行排序后:
lk=vk0 可選斷點(diǎn): cai=(vai-1+vai)/2(i=1,2,…,n) 對(duì)于斷點(diǎn)Caj,針對(duì)集合U的信息熵計(jì)算方法參考文獻(xiàn)[15]中方法。 離散化算法如下: 步驟一:P≠Q(mào),Q={U},H=H(U),設(shè)置分類斷點(diǎn)數(shù)i; 步驟二:分別對(duì)各條件屬性的屬性值進(jìn)行排序,取相鄰兩個(gè)屬性均值加入到候選斷點(diǎn)集合B中; 步驟三:計(jì)算每一個(gè)斷點(diǎn)信息熵H(c,Q),c∈B,取cmin=min{H(c,Q)}; 步驟四:若cmin是唯一斷點(diǎn),選擇使得H(c,Q)最小的斷點(diǎn)cmin加入P中,H=H(c,Q);B=B-{c}轉(zhuǎn)步驟六;若cmin不是唯一斷點(diǎn),則轉(zhuǎn)步驟五; 步驟五:計(jì)算信息熵相同的斷點(diǎn)的條件屬性的分類正確率,選擇分類正確率大的條件屬性的斷點(diǎn)作為結(jié)果斷點(diǎn); 步驟六:對(duì)所有X∈Q,若cmin將等價(jià)類X劃分成X1和X2,從Q中去掉X,并把等價(jià)類X1和X2加入到Q; 步驟七:計(jì)算離散后決策表的相容度,如果相容度在可接受范圍且選擇的cmin的數(shù)量等于i則結(jié)束,輸出斷點(diǎn)集合P;若相容度不在接受范圍則轉(zhuǎn)步驟三計(jì)算下一個(gè)斷點(diǎn),若i個(gè)點(diǎn)不能計(jì)算出相容度接受范圍結(jié)果,則i=i+1。 根據(jù)離散后的決策表和粗糙集算法分別提取出決策規(guī)則。 為了驗(yàn)證所建容器云系統(tǒng)健康度模型的有效性,實(shí)驗(yàn)選用DELLR710服務(wù)器,使用Openstack Q版本開啟的3臺(tái)虛擬機(jī),系統(tǒng)采用Centos7.6,軟件版本為Kubernetes 1.13.1,1臺(tái)Master節(jié)點(diǎn)(4G內(nèi)存4核CPU)2臺(tái)Slave節(jié)點(diǎn)(每臺(tái)8G內(nèi)存4核CPU)。實(shí)驗(yàn)系統(tǒng)健康度監(jiān)控粒度為節(jié)點(diǎn)級(jí)別。文中在Kubernetes平臺(tái)Slave1采集四組數(shù)據(jù),第一組數(shù)據(jù)為采集篩選后的60個(gè)基本訓(xùn)練數(shù)據(jù);第二組數(shù)據(jù)在第一組基礎(chǔ)上再采集10次,在第10次插入CPU異常;第三組數(shù)據(jù)在第二組數(shù)據(jù)基礎(chǔ)上再采集10次,在第10次插入內(nèi)存異常;第四組數(shù)據(jù)在第三組數(shù)據(jù)基礎(chǔ)上再采集10次,在第10次插入網(wǎng)絡(luò)異常。本次實(shí)驗(yàn)只選取了三個(gè)條件屬性代表系統(tǒng)特征,分別為cpu,mem,net,生產(chǎn)環(huán)境應(yīng)當(dāng)選取更多監(jiān)控指標(biāo)和更細(xì)粒度的監(jiān)控級(jí)別,可參考3.1。初始決策屬性判斷依據(jù)服務(wù)負(fù)載占用量給出判斷系統(tǒng)健康與否的標(biāo)準(zhǔn)。除此之外,還可以選擇新創(chuàng)建服務(wù)的響應(yīng)時(shí)間進(jìn)行判斷。 為了模擬云平臺(tái)負(fù)載,在容器中運(yùn)行Tensorflow卷積神經(jīng)網(wǎng)絡(luò)Demo模擬CPU和內(nèi)存負(fù)載,在容器里面使用Tomcat搭建網(wǎng)站,用Apache Bench模擬網(wǎng)站并發(fā)訪問量。 第一組訓(xùn)練數(shù)據(jù)的cpu,memory,network選取斷點(diǎn)及斷點(diǎn)信息熵,如表3所示。 表3 第一組數(shù)據(jù)基本指標(biāo)選取斷點(diǎn)及斷點(diǎn)信息熵 根據(jù)選擇的信息熵對(duì)數(shù)據(jù)進(jìn)行離散化,檢查離散后的決策表是一致的,屬性不可約簡,可以導(dǎo)出下列決策規(guī)則: 經(jīng)計(jì)算,這些規(guī)則的確定性均為1。 (1)cpu異常注入。 第二組數(shù)據(jù)基本指標(biāo)選取斷點(diǎn)及斷點(diǎn)信息熵見表4。 表4 第二組數(shù)據(jù)基本指標(biāo)選取斷點(diǎn)及斷點(diǎn)信息熵 相比第一組基礎(chǔ)數(shù)據(jù),斷點(diǎn)未改變,提取的決策規(guī)則不變,能成功判斷出cpu異常。 第二組數(shù)據(jù)離散后判斷出的決策表見表5。 表5 第二組數(shù)據(jù)離散后判斷出的決策表 (2)Memory異常注入。 第三組數(shù)據(jù)基礎(chǔ)指標(biāo)選取斷點(diǎn)及斷點(diǎn)信息熵如表6所示。 表6 第三組數(shù)據(jù)基礎(chǔ)指標(biāo)選取斷點(diǎn)及斷點(diǎn)信息熵 相比第二組數(shù)據(jù),斷點(diǎn)未改變,提取的決策規(guī)則不變,能成功判斷出mem異常。 第三組數(shù)據(jù)離散后判斷出的決策表如表7所示。 表7 第三組數(shù)據(jù)離散后判斷出的決策表 (3)Network異常注入。 第四組數(shù)據(jù)基礎(chǔ)指標(biāo)選取斷點(diǎn)及斷點(diǎn)信息熵如表8所示。 表8 第四組數(shù)據(jù)基礎(chǔ)指標(biāo)選取斷點(diǎn)及斷點(diǎn)信息熵 相比第三組數(shù)據(jù),斷點(diǎn)未改變,提取的決策規(guī)則不變,能成功判斷出net異常。 第四組數(shù)據(jù)離散后的判斷出的決策表如表9所示。 表9 第四組數(shù)據(jù)離散后判斷出的決策表 序號(hào)cpumemorynetworkhealth1lowlowlowhealthy2lowlowlowhealthy3lowlowlowhealthy4lowlowlowhealthy5lowlowlowhealthy6middlemiddlemiddlenormal7middlemiddlemiddlenormal8middlemiddlemiddlenormal9middlemiddlemiddlenormal10middlemiddlehighunhealthy Slave1實(shí)驗(yàn)過程資源負(fù)載變化如圖3所示。 圖3 Slave1實(shí)驗(yàn)過程資源負(fù)載變化 文中容器云系統(tǒng)健康度模型能夠反映集群負(fù)載情況并檢測(cè)異常,從而實(shí)時(shí)、動(dòng)態(tài)地對(duì)整個(gè)云平臺(tái)資源進(jìn)行直觀反映。該容器云系統(tǒng)健康度模型結(jié)合了粗糙集和信息熵的理論,基于Kubernetes容器云平臺(tái)的實(shí)驗(yàn)驗(yàn)證了模型的有效性以及分析定位的準(zhǔn)確性。對(duì)云平臺(tái)系統(tǒng)健康度的分析建模有助于進(jìn)一步對(duì)系統(tǒng)亞健康狀態(tài)進(jìn)行調(diào)度優(yōu)化,從而在提高系統(tǒng)利用率的同時(shí)保證服務(wù)質(zhì)量。4 模型驗(yàn)證
5 結(jié)束語