?可靠性” 與 “可用性,可靠性實驗的必要性
相信點開這篇文章的讀者,一定或多或少接觸過“高可靠”“高可用”這些字眼,但是往往或語焉不詳,或羅列術(shù)語(MTBF、MTTR ...),那么我們到底應(yīng)該如何定量描述系統(tǒng)的可靠性和可用性指標呢,這些看著很上流的術(shù)語到底意味著什么呢?也許,看完這篇文章,您從此也可以和小伙伴們愉快地拽術(shù)語了!?
5) 可復(fù)用代碼比例(久經(jīng)考驗的代碼)比如正在運行中的100只硬盤,1年之內(nèi)出了2次故障,則故障率為0.02次/年。上文提到的關(guān)于MTBF和Failure Rate關(guān)系值得細細體會,在現(xiàn)實生活中,硬件廠商也的確更熱衷于在產(chǎn)品上標注MTBF(個人猜測是因為MTBF往往高達十萬小時甚至百萬小時,容易吸引眼球)。Failure Rate伴隨著產(chǎn)品生命周期會產(chǎn)生變化,因此,只有在前述“浴盆曲線”的平坦底部(通俗點說就是產(chǎn)品的“青壯年時期”)才存在如下關(guān)系:一般來說,服務(wù)器的主要部件MTBF,廠商標稱值都在百萬小時以上。比如:主板、CPU、硬盤為100wh,內(nèi)存為400wh(4根內(nèi)存約為100wh),從而可以推算出服務(wù)器整體MTBF約25wh(約30年),年故障約3%,也就是說,100臺服務(wù)器每年總要壞那么幾臺。上面的理論計算看著貌似也沒啥問題,感覺還挺靠譜。但如果換個角度想想,總覺得哪里不太對勁:MTBF約30年,難道說可以期望它服役30年?先看看希捷的工程師如何解釋比如應(yīng)用升級或者程序CORE掉,往往借助所謂“秒起”來完成服務(wù)恢復(fù),有些更極端的甚至攔截”段錯誤”一類信號。其實,無論如何秒起,總歸會有部分用戶受影響,另外,如果是由于程序錯誤導(dǎo)致的意外重啟,誰能保證共享內(nèi)存的數(shù)據(jù)仍然處于正確狀態(tài)呢?此外,如果出現(xiàn)機房搬遷、空調(diào)故障、供電故障等意外,所謂的共享內(nèi)存+秒起也只能干瞪眼。因此,正如上文所說的,通過容災(zāi)備份+路由切換實現(xiàn)優(yōu)雅無縫重啟才是好的設(shè)計。一般來說,“可重啟”進程具備如下特征:
- 不使用生命期大于進程的IPC(共享內(nèi)存、跨進程的mutex等)
那么又該如何優(yōu)雅重啟呢?一般分為兩種場景:首先將節(jié)點從服務(wù)列表中摘除,等待節(jié)點流量跌零,發(fā)起重啟過程(更新文件等),確認服務(wù)啟動正常后,重新將節(jié)點添加至服務(wù)列表,逐步引流進行正確性驗證(若發(fā)現(xiàn)異常,及時摘除)。服務(wù)節(jié)點依次分批處理,真正實現(xiàn)無縫重啟服務(wù)訪問方支持Failover,自動切換備用節(jié)點,或者通過Name Service一類設(shè)施自動摘除故障節(jié)點,人工介入恢復(fù)。當然,前面一些看法并非“放之四海而皆準”,在實際設(shè)計系統(tǒng)的時候,還是應(yīng)該因地制宜,選擇最適合當時環(huán)境的方案。?