侯興林++王曉云
摘要:隨著互聯(lián)網(wǎng)服務(wù)研究的不斷深入,人們對網(wǎng)絡(luò)服務(wù)的依賴程度也日漸增加。尤其在一些實(shí)時性要求較高的網(wǎng)絡(luò)服務(wù)應(yīng)用上,服務(wù)的后臺核心系統(tǒng)是否具備高可用性,已經(jīng)是影響該服務(wù)質(zhì)量的關(guān)鍵因素。本文研究了針對服務(wù)可用性監(jiān)控的服務(wù)可用性監(jiān)控系統(tǒng)架構(gòu),提出了一個基于分層架構(gòu)實(shí)現(xiàn)的多模塊服務(wù)可用性監(jiān)控系統(tǒng),架構(gòu)可以對接入的服務(wù)進(jìn)行實(shí)時的監(jiān)控,并展示該服務(wù)的實(shí)時可用性數(shù)據(jù),從而可以在服務(wù)出現(xiàn)故障的時候快速的對其報警。
關(guān)鍵詞:可用性;監(jiān)控;報警
中圖分類號:TP393.08
文獻(xiàn)標(biāo)識碼:A
DOI:10.3969/j.issn.1003-6970.2016.02.018
引言
隨著計(jì)算機(jī)技術(shù)與人們生活的緊密結(jié)合,在許多類似金融服務(wù)系統(tǒng)、飛行控制系統(tǒng)、醫(yī)療系統(tǒng)等應(yīng)用領(lǐng)域,人們對這些系統(tǒng)的要求是不間斷的提供有保障的服務(wù),因?yàn)檫@些服務(wù)系統(tǒng)的故障會造成災(zāi)難性的后果。高可用性的服務(wù)解決方案就是為了解決這樣的需求,高可用性系統(tǒng)相比普通的計(jì)算機(jī)系統(tǒng)來說,復(fù)雜性高了很多,其對應(yīng)的研發(fā)成本也高了很多。
對于高可用性系統(tǒng)來說,該系統(tǒng)的用戶會在系統(tǒng)設(shè)計(jì)之前,對系統(tǒng)的設(shè)計(jì)者提出一些量化標(biāo)準(zhǔn),比如,要求該系統(tǒng)在一個時間范圍內(nèi)宕機(jī)的時間被控制在一定的范圍內(nèi),高可用性系統(tǒng)由于其較高的設(shè)計(jì)難度,如果能在系統(tǒng)的運(yùn)行期間引入量化分析的方法,就可以有效的對其可用性進(jìn)行預(yù)測及報警,所以一個可用性監(jiān)控系統(tǒng)對于一些大型系統(tǒng)的故障預(yù)測及報警有著非常重要的意義。
1 相關(guān)知識及研究
1.1 高可用性的定義
對于高可用性 的研究中,有三個相關(guān)的術(shù)語,分別是可用性 (Availability)、可靠性(Reliability)以及適用性(Serviceability)。其中可用性是指對于用戶的使用來說,系統(tǒng)總的可用時間與總時間的百分比;可靠性是指系統(tǒng)在不出故障的情況下持續(xù)正常工作的時間;適用性是指對于系統(tǒng)維護(hù)、升級的難易程度。
在服務(wù)系統(tǒng)的運(yùn)行周期中,系統(tǒng)的可靠性通過平均無故障時間(MTTF)來表示,平均無故障時間是指系統(tǒng)正常運(yùn)行的平均時間;系統(tǒng)的適用性通過平均修復(fù)時間(MTTR)來表示,平均修復(fù)時間是指從系統(tǒng)發(fā)成故障到修復(fù)完成并重新恢復(fù)的平均時間。通過平均無故障時間和平均修復(fù)時間可以得到可用性的定義:
從可用性定義的公式可以得出兩個影響系統(tǒng)可用性的因素,分別是:
(l)系統(tǒng)各組件的可靠性。這些組件包括服務(wù)器硬件、操作系統(tǒng)和服務(wù)系統(tǒng)本身,以及其他的支持組件如數(shù)據(jù)庫系統(tǒng)、網(wǎng)絡(luò)服務(wù)器等。
(2)當(dāng)系統(tǒng)發(fā)生故障后,系統(tǒng)重新恢復(fù)所花費(fèi)的時間。如果是服務(wù)系統(tǒng)本身的故障,則將該系統(tǒng)重新啟動就可以恢復(fù)服務(wù)了;如果是硬件設(shè)施發(fā)生故障的話,則需要對定位發(fā)生故障的組件并對其進(jìn)行修復(fù)或更換,然后重新啟動操作系統(tǒng)和其他相關(guān)設(shè)備,最終啟動服務(wù)系統(tǒng)。
一個高可用性系統(tǒng)對系統(tǒng)中所有的組件及子系統(tǒng)都要求其正常工作。在一個系統(tǒng)中,如果大部分組件都具備高可用性,但是另一些組件不具備高可用性,對于整個系統(tǒng)來說,系統(tǒng)也無法保證高可用性,這個特點(diǎn)是高可用性系統(tǒng)的木桶原理。
在一個高可用性系統(tǒng)中,還有兩個相關(guān)的術(shù)語,即持續(xù)可用性(Continuous Availability)、容錯(Fault Tolerance)。持續(xù)可用性是指系統(tǒng)無故障提供服務(wù)的理想狀態(tài),其也用來表示一個系統(tǒng)的可用性很高,故障時間較少;容錯是指即使某些組件出現(xiàn)故障,整個系統(tǒng)依舊可以無故障的提供服務(wù),一些高可用性的解決方案已經(jīng)提供了一定的容錯能力。
1.2 高可用性等級
高可用性等級明的分級是以可用性百分比中數(shù)字“9”的個數(shù)來區(qū)分的,如果一個系統(tǒng)達(dá)到二級高可用,則說明該系統(tǒng)的可用性百分比為99%,一年中總的故障時間為3.65天;如果一個系統(tǒng)達(dá)到四級可用,則說明該系統(tǒng)的可用性百分比為99.99%,一年中總的故障時間為52.5分鐘??捎眯苑旨壉砣缦卤恚?/p>
1.3 服務(wù)可用性監(jiān)控系統(tǒng)相關(guān)研究
國內(nèi)外已經(jīng)有了許多關(guān)于服務(wù)可用性分析的研究與設(shè)計(jì),例如一些成熟的商用服務(wù)可用性監(jiān)控系統(tǒng),如IBM Tivoli、HP Buiness Availability Center等,這些商業(yè)系統(tǒng)對服務(wù)可用性的分析基于強(qiáng)大的監(jiān)控和數(shù)據(jù)分析能力,對部署于其上的服務(wù)進(jìn)行實(shí)時的監(jiān)控,并對不滿足可用性的服務(wù)進(jìn)行報警,但是這些服務(wù)可用性監(jiān)控系統(tǒng)的購買費(fèi)用較高,且需要大量監(jiān)控日志數(shù)據(jù)的支持,對于國內(nèi)的一些論文作者的。
我們的目標(biāo)是建立一個可靠、靈活的服務(wù)可用性監(jiān)控系統(tǒng),通過在服務(wù)可用性監(jiān)控系統(tǒng)中部署業(yè)務(wù)系統(tǒng),可以通過系統(tǒng)直觀的看出該業(yè)務(wù)系統(tǒng)在某段時間內(nèi)的服務(wù)可用性。
2 服務(wù)可用性監(jiān)控系統(tǒng)架構(gòu)的分析與設(shè)計(jì)
本服務(wù)可用性監(jiān)控系統(tǒng)提供了簡單的域名監(jiān)控接入方式,采用主動拉取數(shù)據(jù)的方式,無需用戶參與,并提供了統(tǒng)一的可用性計(jì)算公式,以及豐富的圖表及歷史數(shù)據(jù)查詢對比。
2.1 服務(wù)可用性監(jiān)控系統(tǒng)的整體架構(gòu)
本服務(wù)可用性監(jiān)控系統(tǒng)主要分為匯聚計(jì)算、統(tǒng)一數(shù)據(jù)管理、數(shù)據(jù)采集、數(shù)據(jù)抽樣四個模塊。
其中,匯聚計(jì)算模塊是本服務(wù)可用性監(jiān)控系統(tǒng)的入口,本模塊負(fù)責(zé)接收用戶的查詢參數(shù)、獲取統(tǒng)一數(shù)據(jù)數(shù)據(jù)管理模塊傳來的監(jiān)控?cái)?shù)據(jù),并對監(jiān)控?cái)?shù)據(jù)進(jìn)行匯聚計(jì)算,以得到可用性數(shù)據(jù)。如果最終計(jì)算的可用性數(shù)據(jù)低于用戶配置的報警閥值時,對用戶進(jìn)行報警通知。
統(tǒng)一數(shù)據(jù)管理模塊是本系統(tǒng)的中樞,本模塊負(fù)責(zé)收集用戶輸入的監(jiān)控配置項(xiàng)(包括被監(jiān)控服務(wù)的域名、正常服務(wù)的關(guān)鍵字、可用性報警閥值等),將其保存到數(shù)據(jù)庫中,并將監(jiān)控配置項(xiàng)發(fā)送到數(shù)據(jù)采集模塊;當(dāng)用戶點(diǎn)擊其配置的監(jiān)控配置項(xiàng)時,系統(tǒng)將會根據(jù)其配置從數(shù)據(jù)倉庫中找到匹配的監(jiān)控?cái)?shù)據(jù),并將監(jiān)控?cái)?shù)據(jù)發(fā)送至匯聚計(jì)算模塊,最終展示給用戶。
數(shù)據(jù)采集模塊是本系統(tǒng)的核心,本模塊首先取到監(jiān)控配置項(xiàng),然后根據(jù)監(jiān)控配置項(xiàng)中的數(shù)據(jù),調(diào)用監(jiān)控集群中的多個監(jiān)控機(jī)定時地對監(jiān)控目標(biāo)進(jìn)行監(jiān)控,得到監(jiān)控的數(shù)據(jù)與用戶配置的數(shù)據(jù)進(jìn)行對比,如果數(shù)據(jù)不一致,則認(rèn)為當(dāng)前監(jiān)控的服務(wù)是不可用的,將同一時間點(diǎn)多個監(jiān)控機(jī)的數(shù)據(jù)累計(jì)計(jì)算出一個百分比,并將這個數(shù)據(jù)發(fā)送到統(tǒng)一數(shù)據(jù)管理模塊。
數(shù)據(jù)抽樣模塊是一個輔助模塊,主要是由于監(jiān)控的數(shù)據(jù)量較大,當(dāng)計(jì)算跨月或者季度的可用性時,由于數(shù)據(jù)量過大,會導(dǎo)致計(jì)算的時間過長,從而影響用戶體驗(yàn)。因此,數(shù)據(jù)抽樣模塊將會按天為粒度將監(jiān)控?cái)?shù)據(jù)計(jì)算出來并保存到數(shù)據(jù)倉庫中。
整體流程及架構(gòu)如下圖:
2.2 監(jiān)控?cái)?shù)據(jù)采集
監(jiān)控?cái)?shù)據(jù)的采集是由數(shù)據(jù)采集模塊完成的,數(shù)據(jù)采集模塊會根據(jù)用戶配置的監(jiān)控項(xiàng)調(diào)用監(jiān)控集群中的多個監(jiān)控機(jī)以10秒一次的頻率對監(jiān)控目標(biāo)進(jìn)行監(jiān)控,將同一時間點(diǎn)多個監(jiān)控機(jī)的數(shù)據(jù)累計(jì)計(jì)算出一個百分比,該百分比就是當(dāng)前監(jiān)控項(xiàng)當(dāng)前時間點(diǎn)的監(jiān)控?cái)?shù)據(jù)。具體的監(jiān)控?cái)?shù)據(jù)采集流程如下:
(l)數(shù)據(jù)采集模塊獲取配置的監(jiān)控項(xiàng)中被監(jiān)控服務(wù)的域名、關(guān)鍵字等監(jiān)控項(xiàng)。
(2)監(jiān)控機(jī)發(fā)起對被監(jiān)控服務(wù)域名的訪問,獲取其返回?cái)?shù)據(jù)并將其返回?cái)?shù)據(jù)與關(guān)鍵字對比,如果關(guān)鍵字符合則計(jì)數(shù)加一,不符合則不增加計(jì)數(shù)。
(3)最終將多個監(jiān)控機(jī)計(jì)數(shù)除以監(jiān)控機(jī)的總個數(shù)得到一個百分比,該百分比作為當(dāng)前時間點(diǎn)的監(jiān)控?cái)?shù)據(jù)。
(4)將監(jiān)控?cái)?shù)據(jù)按照時間和監(jiān)控項(xiàng)ID作為主鍵存人數(shù)據(jù)倉庫的普通表。
2.3 監(jiān)控?cái)?shù)據(jù)抽樣
由于監(jiān)控機(jī)的監(jiān)控周期為10秒,對于一個服務(wù)的監(jiān)控?cái)?shù)據(jù)量會非常龐大,當(dāng)對該服務(wù)的可用性進(jìn)行計(jì)算的時候會造成查詢時間過長,影響用戶體驗(yàn)。所以,數(shù)據(jù)抽樣模塊會以天為單位對服務(wù)的監(jiān)控?cái)?shù)據(jù)進(jìn)行抽樣計(jì)算,并將其存人數(shù)據(jù)倉庫中。具體流程為,將前一天凌晨到當(dāng)天凌晨的該被監(jiān)控服務(wù)的監(jiān)控?cái)?shù)據(jù)計(jì)數(shù)并加和,將該計(jì)數(shù)和加和作為抽樣數(shù)據(jù)存人數(shù)據(jù)倉庫的抽樣表。
2.4 可用性計(jì)算
被監(jiān)控服務(wù)的可用性計(jì)算分為兩種情況:
(l)用戶查詢時間區(qū)間在一天內(nèi)。這種情況的可用性計(jì)算相對簡單,即統(tǒng)一數(shù)據(jù)管理模塊通過接口查詢數(shù)據(jù)倉庫,將該時間區(qū)間內(nèi)所有該服務(wù)的監(jiān)控?cái)?shù)據(jù)取出,對其進(jìn)行計(jì)數(shù)和加和,然后將該加和除以該計(jì)數(shù)就可以得到當(dāng)前時間區(qū)間服務(wù)的可用性數(shù)值了。
(2)用戶查詢時間區(qū)間超過一天。在這種情況中,對總體可用性的計(jì)算由于需要的數(shù)據(jù)量過于龐大,需要使用抽樣數(shù)據(jù)。首先將查詢時間區(qū)間中整天的數(shù)據(jù)從數(shù)據(jù)倉庫的抽樣表中取出并累加到一起,最終得到一個計(jì)數(shù)count和一個加和sum,然后在數(shù)據(jù)倉庫的普通表中取出查詢時間區(qū)間的非整天數(shù)據(jù),接著將查詢時間區(qū)間中非整天的數(shù)據(jù)累加到sum上,并每次對count加一,最終得到整體計(jì)數(shù)和整體加和,然后用整體加和除以整體計(jì)數(shù),得到當(dāng)前時間區(qū)間服務(wù)的可用性數(shù)值。
服務(wù)可用性監(jiān)控系統(tǒng)的數(shù)據(jù)流圖如下:
3 結(jié)論
本文提出的服務(wù)可用性監(jiān)控系統(tǒng)架構(gòu),包括了匯聚計(jì)算、統(tǒng)一數(shù)據(jù)管理、數(shù)據(jù)采集、數(shù)據(jù)抽樣四個模塊,一方面采用了分層的思想對業(yè)務(wù)邏輯進(jìn)行分析,降低了模塊與模塊之間的耦合性,當(dāng)邏輯需要發(fā)生變化的時候,只需要修改一個模塊,不會影響到其他模塊;另一方面在存儲數(shù)據(jù)時,對原始數(shù)據(jù)存儲時進(jìn)行了一定的數(shù)據(jù)抽樣,從而在大數(shù)據(jù)量查詢時可以有效的降低查詢時延,提升了用戶體驗(yàn)。本文的下一步研究重點(diǎn)是完成對除web服務(wù)以外,其他類型服務(wù)監(jiān)控的接入,希望最終實(shí)現(xiàn)一個可接人多類型服務(wù)的服務(wù)可用性監(jiān)控系統(tǒng)。