电竞比分网-中国电竞赛事及体育赛事平台

分享

如何理解“可靠性”和“可用性”?

 醉三郎 2016-07-21

前言

相信點(diǎn)開這篇文章的讀者,一定或多或少接觸過“高可靠”“高可用”這些字眼,但是往往或語焉不詳,或羅列術(shù)語(MTBF、MTTR ...),那么我們到底應(yīng)該如何定量描述系統(tǒng)的可靠性和可用性指標(biāo)呢,這些看著很上流的術(shù)語到底意味著什么呢?也許,看完這篇文章,您從此也可以和小伙伴們愉快地拽術(shù)語了!

故障定義

硬件故障(Hardware failure)

工業(yè)界通常使用“浴盆曲線”來描述硬件故障,具體如下圖所示。具體來說,硬件的生命周期一般被劃分為三個(gè)時(shí)期(http://en./wiki/Bathtub_curve):

1)        The first part is a decreasingfailure rate, known as early failures

2)        The second part is a constantfailure rate, known as random failures

3)        The third part is an increasingfailure rate, known as wear-out failures

圖1 浴盆曲線(Bathtubcurve)

軟件故障(Software failure)

軟件故障可以通過每千行代碼的缺陷數(shù)(Defects/KLOC)進(jìn)行測量,稱為缺陷密度(Defect Density):

DefectDensity = Number of Defects / KLOC

影響缺陷密度的因素主要有如下幾點(diǎn):

1)        軟件過程(代碼評審、單元測試等)

2)        軟件復(fù)雜度

3)        軟件規(guī)模

4)        開發(fā)團(tuán)隊(duì)經(jīng)驗(yàn)

5)        可復(fù)用代碼比例(久經(jīng)考驗(yàn)的代碼)

6)        產(chǎn)品交付前的測試

衡量指標(biāo)

平均故障間隔時(shí)間(MTBF)

英文全稱:Mean Time Between Failure,顧名思義,是指相鄰兩次故障之間的平均工作時(shí)間,是衡量一個(gè)產(chǎn)品的可靠性指標(biāo)。

故障率(Failure Rate)

以下文字摘自wiki,避免翻譯失真(http://en./wiki/Failure_rate):

Failure rate is the frequency with which an engineered systemor component fails, expressed, for example, in failures per hour. It is often denoted by the Greek letter λ (lambda) and is importantin reliability engineering.

The failure rate of a system usually depends on time, withthe rate varying over the life cycle of the system. Forexample, an automobile's failure rate in its fifth year of service may be manytimes greater than its failure rate during its first year of service. One doesnot expect to replace an exhaust pipe, overhaul the brakes, or have majortransmission problems in a new vehicle.

In practice, the mean time between failures (MTBF, 1/λ) isoften reported instead of the failure rate. This is valid and useful if thefailure rate may be assumed constant – often used forcomplex units / systems, electronics – and is a general agreement in somereliability standards (Military and Aerospace). It does in this case onlyrelate to the flat region of the bathtub curve, also called the "usefullife period".Because of this, it is incorrect toextrapolate MTBF to give an estimate of the service life time of a component,which will typically be much less than suggested by the MTBF due to the muchhigher failure rates in the "end-of-life wearout" part of the"bathtub curve".

為便于理解,舉個(gè)例子:比如正在運(yùn)行中的100只硬盤,1年之內(nèi)出了2次故障,則故障率為0.02次/年。

上文提到的關(guān)于MTBF和Failure Rate關(guān)系值得細(xì)細(xì)體會(huì),在現(xiàn)實(shí)生活中,硬件廠商也的確更熱衷于在產(chǎn)品上標(biāo)注MTBF(個(gè)人猜測是因?yàn)镸TBF往往高達(dá)十萬小時(shí)甚至百萬小時(shí),容易吸引眼球)。Failure Rate伴隨著產(chǎn)品生命周期會(huì)產(chǎn)生變化,因此,只有在前述“浴盆曲線”的平坦底部(通俗點(diǎn)說就是產(chǎn)品的“青壯年時(shí)期”)才存在如下關(guān)系:

MTBF = 1/λ

平均修復(fù)時(shí)間(MTTR)

英文全稱:Mean Time To Repair,顧名思義,是描述產(chǎn)品由故障狀態(tài)轉(zhuǎn)為工作狀態(tài)時(shí)修理時(shí)間的平均值。在工程學(xué),MTTR是衡量產(chǎn)品維修性的值,在維護(hù)合約里很常見,并以之作為服務(wù)收費(fèi)的準(zhǔn)則。

圖2 硬件MTTR估算

圖3 軟件MTTR估算

可用性(Availability)

GB/T3187-97對可用性的定義:在要求的外部資源得到保證的前提下,產(chǎn)品在規(guī)定的條件下和規(guī)定的時(shí)刻或時(shí)間區(qū)間內(nèi)處于可執(zhí)行規(guī)定功能狀態(tài)的能力。它是產(chǎn)品可靠性、維修性和維修保障性的綜合反映。

Availability = MTBF / (MTBF + MTTR)

關(guān)于Availability這個(gè)計(jì)算公式,很容易理解,這里不多做解釋。通常大家習(xí)慣用N個(gè)9來表征系統(tǒng)可用性,比如99.9%(3-nines availability),99.999%(5-nines availability)。

宕機(jī)時(shí)間(Downtime)

顧名思義,指機(jī)器出現(xiàn)故障的停機(jī)時(shí)間。這里之所以會(huì)提Downtime,是因?yàn)槭褂妹磕甑腻礄C(jī)時(shí)間來衡量系統(tǒng)可用性,更符合直覺,更容易理解。

圖4 Availability與Downtime對應(yīng)關(guān)系

延伸思考

MTBF不靠譜?

一般來說,服務(wù)器的主要部件MTBF,廠商標(biāo)稱值都在百萬小時(shí)以上。比如:主板、CPU、硬盤為100wh,內(nèi)存為400wh(4根內(nèi)存約為100wh),從而可以推算出服務(wù)器整體MTBF約25wh(約30年),年故障約3%,也就是說,100臺(tái)服務(wù)器每年總要壞那么幾臺(tái)。

上面的理論計(jì)算看著貌似也沒啥問題,感覺還挺靠譜。但如果換個(gè)角度想想,總覺得哪里不太對勁:MTBF約30年,難道說可以期望它服役30年?先看看希捷的工程師如何解釋:

http://knowledge./articles/en_US/FAQ/174791en?language=en_US):

It iscommon to see MTBF ratings between 300,000 to 1,200,000 hours for hard diskdrive mechanisms, which might lead one to conclude that the specificationpromises between 30 and 120 years of continuous operation. This is not thecase! The specification is based on a large (statistically significant) numberof drives running continuously at a test site, with data extrapolated accordingto various known statistical models to yield the results.

Based on the observed error rate over a few weeks or months,the MTBF is estimated and not representative of how long your individual drive,or any individual product, is likely to last. Nor isthe MTBF a warranty - it is representative of the relative reliability of afamily of products. A higher MTBF merely suggests agenerally more reliable and robust family of mechanisms (depending uponthe consistency of the statistical models used). Historically, the field MTBF,which includes all returns regardless of cause, is typically 50-60% ofprojected MTBF.

看到這里,再聯(lián)系前文對于Failure Rate的闡述,我知道各位讀者有沒有摸清其中的門道。其實(shí)說白了很簡單,這些廠商真正測算的是產(chǎn)品在“青壯年”健康時(shí)期的Failure Rate,然后基于與MTBF的倒數(shù)關(guān)系,得出了動(dòng)輒百萬小時(shí)的MTBF。而現(xiàn)實(shí)世界中,這些產(chǎn)品的Failure Rate在“中晚年”時(shí)期會(huì)快速上升,因此,這些MTBF根本無法反映產(chǎn)品的真實(shí)壽命。文中也提到,希捷也意識到MTBF存在弊端,因此改用AFR(Annualized Failure Rate),俗稱“年度不良率”。

其實(shí),早在2007年,Google和CMU同時(shí)在FAST07發(fā)表論文,詳細(xì)討論了硬盤故障的問題:

Google采集了公司超過10w塊消費(fèi)級HDD硬盤數(shù)據(jù)(SATA和PATA,5400轉(zhuǎn)和7200轉(zhuǎn),7家不同廠商,9種不同型號,容量從80G到400G不等),最終得出如下數(shù)據(jù):

Googlefound that disks had an annualized failure rate (AFR) of 3% for the first threemonths, dropping to 2% for the first year. In the second year the AFR climbedto 8% and stayed in the 6% to 9% range for years 3-5.

如果各位讀者對于MTBF仍然有疑問,再推薦一份入門材料給大家,《Meantime between failure: Explanation and standards》,其中對于人類的MTBF闡述絕對會(huì)讓你恍然大悟。

系統(tǒng)可用性

前文的描述其實(shí)都是針對單一模塊而言,而現(xiàn)實(shí)世界中的系統(tǒng)往往是由若干模塊組合而成。其實(shí),各個(gè)模塊之間的關(guān)系無非“串聯(lián)”和“并聯(lián)”兩種(與串并聯(lián)電路類似),那么整體可用性計(jì)算方式就顯而易見了。

串聯(lián)模塊

圖5 串聯(lián)模塊

整體可用性計(jì)算公式如下:

A = Ax* Ay

并聯(lián)模塊

圖6 并聯(lián)模塊

整體可用性計(jì)算公式如下:

A = 1 – (1 –Ax)2

示例計(jì)算

圖7 系統(tǒng)模塊構(gòu)成

圖8 軟硬件抽象分離

圖9 模塊可用性計(jì)算

圖10 系統(tǒng)可用性計(jì)算

系統(tǒng)設(shè)計(jì)啟發(fā)

通過上一小節(jié)的示例系統(tǒng)可用性計(jì)算,相信各位對于“并聯(lián)”的威力已經(jīng)有了非常直觀的感受。其實(shí)這就是我們做架構(gòu)設(shè)計(jì)常說的“容災(zāi)”“冗余”,其實(shí)在硬件領(lǐng)域也很常見(如雙電源、RAID、雙網(wǎng)卡)。與此同時(shí),對于“串聯(lián)”的局限也應(yīng)該有所體會(huì),只要存在“短板”,整體可用性是上不去的。引申到后臺(tái)軟件系統(tǒng)設(shè)計(jì),我個(gè)人有以下看法,歡迎大家拍磚:

1)        “7*24不停機(jī)”不切實(shí)際

在不少開發(fā)人員的心目中,往往認(rèn)為硬件是很可靠的,但是經(jīng)過前文的洗禮,應(yīng)該認(rèn)識到,其實(shí)硬件真的沒有我們想象得那么可靠。如果你僅僅圍繞兩三臺(tái)服務(wù)器打轉(zhuǎn),可能一兩年都未必碰到一次硬件故障,但是如果你維護(hù)的是上千臺(tái)服務(wù)器,那么恭喜你,基本每周都會(huì)有硬件故障來拜訪你。

單機(jī)軟件的可靠性受限于硬件,因此,言必談“7*24不停機(jī)”本身就是個(gè)無稽之談。隨之而來的就是一些根深蒂固的錯(cuò)誤觀念,比如內(nèi)存碎片。新人一進(jìn)公司往往就會(huì)被教導(dǎo):后臺(tái)開發(fā)應(yīng)該盡量避免使用malloc/free等動(dòng)態(tài)內(nèi)存分配,因?yàn)槿菀讓?dǎo)致內(nèi)存碎片,隨之而來的就是避免使用STL容器等。如果您有幸已經(jīng)用上了64位系統(tǒng),那么如果您還能遇到內(nèi)存碎片,我只能說自求多福了;如果您還在使用32位系統(tǒng),也不用太擔(dān)心,今天的glibc也早就不是當(dāng)年的glibc了,人家也在不斷優(yōu)化內(nèi)存分配算法,何況kernel都在使用動(dòng)態(tài)內(nèi)存分配。退一萬步講,即使真的遇到了,那么就到了我想談的下一個(gè)話題

2)        “可重啟”才是好設(shè)計(jì)

這里所說的“可重啟”和很多人心目中的理解可能不太一樣,我司相當(dāng)多的開發(fā)人員熱衷于共享內(nèi)存的使用:

  • 進(jìn)程間通訊
  • 重啟后數(shù)據(jù)不丟失

比如應(yīng)用升級或者程序CORE掉,往往借助所謂“秒起”來完成服務(wù)恢復(fù),有些更極端的甚至攔截”段錯(cuò)誤”一類信號。其實(shí),無論如何秒起,總歸會(huì)有部分用戶受影響,另外,如果是由于程序錯(cuò)誤導(dǎo)致的意外重啟,誰能保證共享內(nèi)存的數(shù)據(jù)仍然處于正確狀態(tài)呢?

此外,如果出現(xiàn)機(jī)房搬遷、空調(diào)故障、供電故障等意外,所謂的共享內(nèi)存+秒起也只能干瞪眼。

因此,正如上文所說的,通過容災(zāi)備份+路由切換實(shí)現(xiàn)優(yōu)雅無縫重啟才是好的設(shè)計(jì)。一般來說,“可重啟”進(jìn)程具備如下特征:

  • 無論exit還是kill,都可以正確重啟
  • 不使用生命期大于進(jìn)程的IPC(共享內(nèi)存、跨進(jìn)程的mutex等)
  • 不使用難以重建的IPC(父子進(jìn)程共享FD通信等)

那么又該如何優(yōu)雅重啟呢?一般分為兩種場景:

  • 有計(jì)劃的重啟(如版本升級)

首先將節(jié)點(diǎn)從服務(wù)列表中摘除,等待節(jié)點(diǎn)流量跌零,發(fā)起重啟過程(更新文件等),確認(rèn)服務(wù)啟動(dòng)正常后,重新將節(jié)點(diǎn)添加至服務(wù)列表,逐步引流進(jìn)行正確性驗(yàn)證(若發(fā)現(xiàn)異常,及時(shí)摘除)。服務(wù)節(jié)點(diǎn)依次分批處理,真正實(shí)現(xiàn)無縫重啟

  • 意外故障發(fā)生

服務(wù)訪問方支持Failover,自動(dòng)切換備用節(jié)點(diǎn),或者通過Name Service一類設(shè)施自動(dòng)摘除故障節(jié)點(diǎn),人工介入恢復(fù)

當(dāng)然,前面一些看法并非“放之四海而皆準(zhǔn)”,在實(shí)際設(shè)計(jì)系統(tǒng)的時(shí)候,還是應(yīng)該因地制宜,選擇最適合當(dāng)時(shí)環(huán)境的方案。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多