服務(wù)器的黑科技:服務(wù)器是怎么做到每年只停機(jī)30秒的?
1小時(shí)停機(jī)損失,來源ITIC
前些年關(guān)鍵業(yè)務(wù)服務(wù)器的金標(biāo)準(zhǔn)是要做到5個(gè)9,現(xiàn)在已經(jīng)要求6個(gè)9,甚至7個(gè)9。他們是什么意思呢?
X個(gè)9,表示在1年時(shí)間的使用過程中,服務(wù)器可以正常使用時(shí)間與總時(shí)間(1年)的比值。
5個(gè)9:(1-99.999%)*365*24*60=5.26分鐘,表示1年非計(jì)劃停機(jī)時(shí)間不超過5.26分鐘。
6個(gè)9:(1-99.9999%)*365*24*60*60=31.5秒,表示1年非計(jì)劃停機(jī)時(shí)間不超過30秒。
7個(gè)9:(1-99.99999%)*365*24*60*60=3.15秒,表示1年非計(jì)劃停機(jī)時(shí)間不超過3秒。
ITIC統(tǒng)計(jì)2018年80%的企業(yè)最低要求4個(gè)9,可靠性要求增長非常迅速:
來源ITIC
服務(wù)器能夠做到這么短的非計(jì)劃停機(jī)時(shí)間,除了在操作系統(tǒng)上要求嚴(yán)格外,硬件上的保證是重中之重。服務(wù)器的RAS(Reliability, Availability,Serviceability 高可靠性、高可用性、高服務(wù)性)特性(feature)曾經(jīng)是大型機(jī)的驕傲,也是它們高高在上身價(jià)的基礎(chǔ),但隨著X86在RAS功能上的補(bǔ)足,服務(wù)器市場已經(jīng)幾乎被X86服務(wù)器占據(jù)。關(guān)鍵業(yè)務(wù)服務(wù)器由于歷史和維護(hù)原因,還有部分市場份額不在X86的掌控之中,但非X86高可靠性的神話已經(jīng)破滅。根據(jù)ITIC統(tǒng)計(jì):
來源ITIC
X86服務(wù)器不但占據(jù)絕大部分,而且可靠性也僅僅比Power 服務(wù)器低一點(diǎn)點(diǎn)。
那么這些RAS功能都是些什么呢?絕對不是焚香禱告哦
而是實(shí)打?qū)嵉挠补Ψ颍AS的根本在于提供硬件冗余來避免錯(cuò)誤;出錯(cuò)后及時(shí)發(fā)現(xiàn)、糾正和避免錯(cuò)誤擴(kuò)散;替換掉出錯(cuò)的設(shè)備等等。下面我們來分別了解一下。
內(nèi)存鏡像
對計(jì)算機(jī)比較了解的同學(xué)都知道磁盤的RAID模式,RAID提供了數(shù)據(jù)冗余來保證數(shù)據(jù)安全。當(dāng)然RAID是服務(wù)器上的必備要求,但你知道嗎,內(nèi)存也有同樣的模式,那就是內(nèi)存鏡像(Memory Mirror)。內(nèi)存鏡像將4個(gè)通道的內(nèi)存成對存儲相同的數(shù)據(jù),類似磁盤的RAID 1,內(nèi)存的數(shù)據(jù)在硬件上就被保存了兩份,當(dāng)一份損壞時(shí)還有備份,而更妙的是這些是對軟件透明的。
這個(gè)冗余度和RAID1一樣是很大的,一半的資源在大部分情況下閑置了,在提高可靠性的同時(shí)浪費(fèi)也十分嚴(yán)重,有沒有稍微省錢點(diǎn)的做法呢?當(dāng)然有,那就是內(nèi)存?zhèn)溆?Memory Sparing),簡單來說就是保留了部分內(nèi)存,當(dāng)出錯(cuò)再把這些內(nèi)存拿來頂上。它的顆粒度可以到DIMM甚至以Rank為單位。
SDDC、SDDC+1、DDDC和ADDDC
大家知道1位奇偶校驗(yàn)碼可以發(fā)現(xiàn)1位的錯(cuò)誤,但不能糾正,對于2位以上連發(fā)現(xiàn)都發(fā)現(xiàn)不了。ECC好一些,但對于很多位錯(cuò)誤就無能為力了。SDDC (Single Device Data Correction,單設(shè)備數(shù)據(jù)校正 )可以糾正X4的單設(shè)備錯(cuò)誤:
注意是1RX4, 來源SuperMicro
SDDC+1不但可以糾正X4的內(nèi)存錯(cuò)誤,還可以把出錯(cuò)的顆粒替換掉,讓它下次不再出錯(cuò):
來源Supermicro
DDDC(Double Device Data Correction )可以和Lockstep一起,將兩個(gè)DIMM拼拼,糾正兩個(gè)X4顆粒的錯(cuò)誤:
來源Supermicro
DDDC+1和ADDDC(Adaptive Double Device Data Correction)這里就不再介紹,有興趣的可以自行Google。
內(nèi)存巡警
這些都是內(nèi)存訪問的時(shí)候發(fā)現(xiàn)錯(cuò)誤了如何處理,但是還有些錯(cuò)誤可能發(fā)生在沒有訪問的區(qū)域,這些區(qū)域錯(cuò)誤不加處理,積少成多,可能超過DDDC的糾錯(cuò)能力。這就需要Patrol Memory Scrubbing的幫助了。它會像高速巡警一樣,借助一個(gè)特殊的引擎,幫助定期掃描內(nèi)存的可能出現(xiàn)的錯(cuò)誤。Demand Scrubbing會把發(fā)現(xiàn)錯(cuò)誤的數(shù)據(jù),糾正后寫回去,避免錯(cuò)誤積累。
錯(cuò)誤的報(bào)告和隔離
本專欄有過兩篇文章介紹出錯(cuò)的問題:
老狼:計(jì)算機(jī)硬件出錯(cuò)了會發(fā)生什么?
?
zhuanlan.zhihu.com
圖標(biāo)
老狼:WHEA原理和架構(gòu)
?
zhuanlan.zhihu.com
圖標(biāo)
作為服務(wù)器必備的功能,WHEA會把錯(cuò)誤向操作系統(tǒng)報(bào)告,操作系統(tǒng)可以選擇做出相應(yīng)的動作。BIOS還可以設(shè)置poison位來標(biāo)定出錯(cuò)的范圍。
CPU、內(nèi)存和設(shè)備的熱插拔
硬件發(fā)生了錯(cuò)誤,即使已經(jīng)通過各種手段(SDDC等)得到糾正,但隱患已經(jīng)埋下。硬件一旦發(fā)生錯(cuò)誤,可能會越來越嚴(yán)重,慢慢變得不能夠糾正而變成嚴(yán)重錯(cuò)誤。為了避免發(fā)生這種情況,需要把出錯(cuò)的設(shè)備移除和替換。
那么操作系統(tǒng)報(bào)告給管理員錯(cuò)誤后,該怎么辦呢?按照一般的想法就是關(guān)機(jī)換設(shè)備吧。但這種操作是嚴(yán)重影響x個(gè)9的可用性數(shù)據(jù)的。必須在操作系統(tǒng)還在持續(xù)提供服務(wù)的情況下更換設(shè)備、內(nèi)存甚至CPU!
也許你聽說過PCIe設(shè)備的熱插拔,但內(nèi)存和CPU的熱插拔就比較高冷了。CPU和內(nèi)存熱插拔和PCIe類似,有個(gè)attention開關(guān)。在按下后,BIOS、操作系統(tǒng)和硬件會合作把設(shè)備周邊電路隔離、內(nèi)核對象移除和變更,在完成后會有狀態(tài)指示燈顯示準(zhǔn)備工作結(jié)束,可以動手移除了。CPU和內(nèi)存插入和這個(gè)相反,但都要BIOS、操作系統(tǒng)和硬件支持,十分復(fù)雜,但整個(gè)操作下來也十分炫酷。
結(jié)論
6個(gè)9甚至7個(gè)9是個(gè)系統(tǒng)工程,需要整體上考慮。除了這些RAS功能之外,服務(wù)器硬件如磁盤驅(qū)動器等等也與民用不同,十分昂貴。
這些功能整體推高了服務(wù)器的價(jià)格,Google、FB、亞馬遜和阿里等等大型云服務(wù)公司決定另辟蹊徑,從操作系統(tǒng)級別的軟件冗余來解決系統(tǒng)X個(gè)9的可靠性問題,這樣一臺服務(wù)器出錯(cuò),直接整臺offline,而不是CPU或者內(nèi)存的更換。于此同時(shí)另外2到3臺服務(wù)器還在持續(xù)提供服務(wù),服務(wù)不會中斷。
但是大型關(guān)鍵部門如銀行電信等,還在借助傳統(tǒng)的RAS來保證系統(tǒng)的可靠性。
