可靠性” 與 “可用性,可靠性實驗的必要性
相信點開這篇文章的讀者,一定或多或少接觸過“高可靠”“高可用”這些字眼,但是往往或語焉不詳,或羅列術(shù)語(mtbf、mttr ...),那么我們到底應(yīng)該如何定量描述系統(tǒng)的可靠性和可用性指標(biāo)呢,這些看著很上流的術(shù)語到底意味著什么呢?也許,看完這篇文章,您從此也可以和小伙伴們愉快地拽術(shù)語了!?
1)軟件過程(代碼評審、單元測試等)2)軟件復(fù)雜度3)軟件規(guī)模4)開發(fā)團(tuán)隊經(jīng)驗5)可復(fù)用代碼比例(久經(jīng)考驗的代碼)6)產(chǎn)品交付前的測試比如正在運(yùn)行中的100只硬盤,1年之內(nèi)出了2次故障,則故障率為0.02次/年。上文提到的關(guān)于mtbf和failure rate關(guān)系值得細(xì)細(xì)體會,在現(xiàn)實生活中,硬件廠商也的確更熱衷于在產(chǎn)品上標(biāo)注mtbf(個人猜測是因為mtbf往往高達(dá)十萬小時甚至百萬小時,容易吸引眼球)。failure rate伴隨著產(chǎn)品生命周期會產(chǎn)生變化,因此,只有在前述“浴盆曲線”的平坦底部(通俗點說就是產(chǎn)品的“青壯年時期”)才存在如下關(guān)系:mtbf = 1/λ一般來說,服務(wù)器的主要部件mtbf,廠商標(biāo)稱值都在百萬小時以上。比如:主板、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)機(jī)房搬遷、空調(diào)故障、供電故障等意外,所謂的共享內(nèi)存+秒起也只能干瞪眼。因此,正如上文所說的,通過容災(zāi)備份+路由切換實現(xiàn)優(yōu)雅無縫重啟才是好的設(shè)計。一般來說,“可重啟”進(jìn)程具備如下特征:無論exit還是kill,都可以正確重啟不使用生命期大于進(jìn)程的ipc(共享內(nèi)存、跨進(jìn)程的mutex等)不使用難以重建的ipc(父子進(jìn)程共享fd通信等)那么又該如何優(yōu)雅重啟呢?一般分為兩種場景:有計劃的重啟(如版本升級)首先將節(jié)點從服務(wù)列表中摘除,等待節(jié)點流量跌零,發(fā)起重啟過程(更新文件等),確認(rèn)服務(wù)啟動正常后,重新將節(jié)點添加至服務(wù)列表,逐步引流進(jìn)行正確性驗證(若發(fā)現(xiàn)異常,及時摘除)。服務(wù)節(jié)點依次分批處理,真正實現(xiàn)無縫重啟意外故障發(fā)生服務(wù)訪問方支持failover,自動切換備用節(jié)點,或者通過name service一類設(shè)施自動摘除故障節(jié)點,人工介入恢復(fù)。當(dāng)然,前面一些看法并非“放之四海而皆準(zhǔn)”,在實際設(shè)計系統(tǒng)的時候,還是應(yīng)該因地制宜,選擇當(dāng)時環(huán)境的方案。?