《發(fā)現(xiàn)運(yùn)維穩(wěn)定性問題的明眸——可用性》要點(diǎn):
本文介紹了發(fā)現(xiàn)運(yùn)維穩(wěn)定性問題的明眸——可用性,希望對您有用。如果有疑問,可以聯(lián)系我們。
上篇講到了破解運(yùn)維穩(wěn)定性問題的利器——復(fù)盤.復(fù)盤更多的是基于事后的總結(jié)與提升.那么我們?nèi)绾伟l(fā)現(xiàn)、測量穩(wěn)定性問題呢?那么我們就需要請出今天的主角了——可用性.
可用性作為評價業(yè)務(wù)穩(wěn)定性的一個重要指標(biāo),它可以通過數(shù)據(jù)量化、建立基線的方式來發(fā)現(xiàn)業(yè)務(wù)中存在的周期性問題,并由此更有針對性的進(jìn)行服務(wù)質(zhì)量改進(jìn).
那么,什么是可用性呢?
可用性是指在一個指定的時間間隔內(nèi),對于一個功能個體來講,總的可用時間所占的比例.換句話說,是指在指定的時間段內(nèi),系統(tǒng)能夠正常運(yùn)行的概率或占比.對于我們現(xiàn)在的互聯(lián)網(wǎng)業(yè)務(wù)來說大部分都屬于「實時」、「在線」,即Real-Time Online System,實時在線系統(tǒng).對于我們的大部分業(yè)務(wù)說上面所指的指定時間段,應(yīng)該就是7*24小時.
可用性的結(jié)果經(jīng)常使用小數(shù)點(diǎn)或者百分比表示.我們通常使用一個被稱為幾個九的度量,對應(yīng)小數(shù)點(diǎn)后連續(xù)9的個數(shù).比如,“五個九”就是指該系統(tǒng)在指定時間段內(nèi)有0.99999(或者99.999%)的可用性.
怎么理解對應(yīng)的量級呢?
比如,某系統(tǒng)在一個指定的時間段內(nèi),如1天,即24小時.同時我們的監(jiān)測粒度是分鐘,即1440分鐘.在我們監(jiān)控的1440分鐘內(nèi),系統(tǒng)正常運(yùn)行了1430分鐘.那么在這個指定的時間段內(nèi),該系統(tǒng)的可用性即為1430/1440≈0.99306(99.306%).也就是我們常說的2個9.
那么,99.306%這個值就代表該系統(tǒng)處于正常可用的Availability狀態(tài)占比,那么1-99.306%得到的0.694%這個值就代表該系統(tǒng)處理異常不可用的Unavailability狀態(tài)占比.簡單的羅列為公式,即為:
業(yè)務(wù)在線總時長 = 業(yè)務(wù)的正常可用時長 + 業(yè)務(wù)的異常不可用時長
更進(jìn)一步,可用性就是指:
可用性=業(yè)務(wù)的正常可用時長 / 業(yè)務(wù)在線總時長
理解了什么是可用性,接下來我們講一下如何建立可用性.建立可用性的方法有很多,常見的方法有幾種:
撥測法即是按照各業(yè)務(wù)的應(yīng)用、功能、模塊進(jìn)行周期性測試其運(yùn)行狀態(tài)是否正常的一種方法.
舉例:我們業(yè)務(wù)有一個名為A的模塊,那么就周期性的(比如,每5分鐘一次)對這個模塊使用模擬用戶行為的方法對其運(yùn)行狀態(tài)進(jìn)行抽樣檢查.如果該模塊運(yùn)行正常,就記為Availability,如果為非正常,就記為Unavailability.累加至一個時間周期內(nèi)(比如,1天)Availability狀態(tài)的占比即是這個模塊的可用性.
那么,如何判斷業(yè)務(wù)或模塊是否正常呢?我們以一個web類型的業(yè)務(wù)為例,我們可以檢查該服務(wù)下的主頁、分類頁或內(nèi)容頁的關(guān)鍵內(nèi)容.一般來說,我們可以匹配指定頁面Head、Body、bottom的指定字段或關(guān)鍵字.如果可以匹配到指定的一個或一組字段或關(guān)鍵字,那么即為正常,反之為異常.我們可以通過腳本、Nagios、Zabbix等工具來實現(xiàn)對業(yè)務(wù)的周期性撥測.
這種方法的優(yōu)、缺點(diǎn)都很明顯.優(yōu)點(diǎn)是這種方法實施難度較低且可以與通過模擬用戶行為的方式來測量,也業(yè)務(wù)實際情況可以比較吻合.但通過這種周期性抽樣的方法,存在抽樣樣本不足或偏差的問題.比如每5分鐘撥測一次,如果故障出現(xiàn)和修復(fù)都在這5分鐘內(nèi)完成,那么撥測法就很難去捕獲到這種錯誤.
日志分析法即是通過各業(yè)務(wù)的應(yīng)用、功能、模塊日志進(jìn)行分析得到可用性的一種方法.
舉例:我們業(yè)務(wù)有一個名為A的模塊,那么就周期性的(比如,每小時一次)對這個模塊上1個小時日志進(jìn)行分析.從日志層面區(qū)分出正常請求在占比,即是這個模塊在過去1個小時的可用性.還是以web類型的業(yè)務(wù)為例,我們可以從日志中將2XX、5XX狀態(tài)分別進(jìn)行統(tǒng)計、分析,可以理解2XX即是Availability,5XX即是Unavailability.(3XX與4XX可以按照實際的業(yè)務(wù)情況再考慮是否參與分析)
這種方法上很明顯的解決了撥測法抽樣樣本不足或偏差的問題,但也存在與實際業(yè)務(wù)影響指數(shù)可能會存在較大差別的情況.比如,我們在過去1個小時的錯誤都發(fā)生在1分鐘內(nèi),剩余的59分鐘業(yè)務(wù)都是正常的.很顯然這樣得出來的可用性和實際業(yè)務(wù)情況是有一定偏差的.那么怎么解決這種偏差呢?日志分析閾值法就應(yīng)運(yùn)而生了.
日志分析閾值法是在日志分析法的基礎(chǔ)上添加了狀態(tài)閾值判斷的一種可用性計劃方法.
舉例:我們業(yè)務(wù)有一個名為A的模塊,我們通過日志分析法得到,這個模塊每分鐘正常情況下的請求數(shù)約為10W次,那么我們可以設(shè)置一個閾值為10次.這10次的意思就是指,我們?nèi)菰S在1分鐘內(nèi)發(fā)生萬分之一以內(nèi)的錯誤.如果1分鐘內(nèi)發(fā)生的錯誤在10次以內(nèi),我們就認(rèn)為在過去1分鐘的狀態(tài)為正常,就標(biāo)記為Availability.如果1分鐘內(nèi)發(fā)生的錯誤超過10次,那么我們就認(rèn)為在過去1分鐘的狀態(tài)為異常,就標(biāo)記為Unavailability.最后再統(tǒng)計Availability狀態(tài)的占比即是這個模塊的可用性.當(dāng)然這個閾值需要根據(jù)業(yè)務(wù)的實際情況進(jìn)行調(diào)整.
這種方法上就很好的解決了撥測法抽樣樣本偏差與日志分析法差生實際業(yè)務(wù)影響脫節(jié)的不足,達(dá)到很好的一種平衡.
如果一個業(yè)務(wù)由A、B、C三個模塊構(gòu)成,那么怎樣通過模塊的可用性,怎么算出業(yè)務(wù)的可用性呢?簡單的方法就是通過最三個模塊可用性的平均值即可.但這存在與業(yè)務(wù)目標(biāo)相悖的問題.那么我們可以通過與業(yè)務(wù)目標(biāo)對齊,進(jìn)行加權(quán)平均的方法.比如A模塊對業(yè)務(wù)來說更加關(guān)鍵,那么我們在計算可用性時就給出A模塊更多的權(quán)重;C模塊是業(yè)務(wù)的旁路系統(tǒng),那么就可以在計算時降低對C模塊的權(quán)重.以此類推,我們得出的可用性就可以盡可能的貼近業(yè)務(wù)及其目標(biāo)了.
其它的方法
計算可用性的方法有遠(yuǎn)不至上面寫的幾種,并且并有哪一種方法可以解決所有的問題和痛點(diǎn).從成本、收益、時間等角度選擇一種或多種最合適自己業(yè)務(wù)或團(tuán)隊的方法,用于持續(xù)改進(jìn)業(yè)務(wù)的服務(wù)質(zhì)量才是王道.
胡楊,目前就職于阿里巴巴移動事業(yè)群網(wǎng)絡(luò)運(yùn)維部.高級運(yùn)維專家.多年工作于大型互聯(lián)網(wǎng)領(lǐng)域.對大型互聯(lián)網(wǎng)運(yùn)維體系中的容災(zāi)體系設(shè)計、自動化、性能優(yōu)化、troubleshoot等方面有著豐富的經(jīng)驗及獨(dú)道的見解.
文章來自微信公眾號:高效開發(fā)運(yùn)維
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/4179.html