RTO, RPO是啥?是割韭菜的意思么?
從嫩芽初發(fā)到綠意灼灼,韭菜到底經(jīng)歷了什么?想IPO想瘋了的創(chuàng)業(yè)者最清楚。
第一次聽(tīng)到RPO,我以為是專門(mén)割韭菜的IPO,加上說(shuō)這話的人不斷對(duì)我擠眉弄眼,以至于我手抖,怎么搜都搜不到這個(gè)技術(shù)名詞。
到了最后我才弄明白,他說(shuō)的是RPO,而不是IPO,是災(zāi)備場(chǎng)景中的名詞。
好家伙,又是縮寫(xiě)!不過(guò)經(jīng)過(guò)多年的宣傳,它儼然成了標(biāo)準(zhǔn),反而全稱沒(méi)幾個(gè)人記得住。打個(gè)比方,你知道HIV,但是并不知道HIV的英文全稱是啥,就是這么朗朗上口。
但我們今天就非要看一下它的全稱。
- RTO = Recovery Time Objective = 恢復(fù)時(shí)間目標(biāo)
- RPO = Recovery Point Object = 恢復(fù)點(diǎn)目標(biāo)
其差別,一個(gè)是Time、一個(gè)是Point。用白話來(lái)說(shuō),就是在服務(wù)發(fā)生故障之后,能夠恢復(fù)的時(shí)間和數(shù)據(jù)恢復(fù)的程度。
比如,你的數(shù)據(jù)庫(kù)當(dāng)機(jī)了。如果你的業(yè)務(wù)能夠忍受30分鐘之內(nèi)啟動(dòng)起來(lái),那么RTO就等于30分鐘。
再比如,你的數(shù)據(jù)庫(kù)當(dāng)機(jī)了,30分鐘后恢復(fù)了。如果你的業(yè)務(wù)能夠忍受丟失最后2分鐘的數(shù)據(jù),那么你的RPO就是2分鐘。
值得注意的是,任何宣稱RTO=0和RPO=0的廠商,都是在吹牛皮。
單機(jī)服務(wù)
對(duì)于單機(jī)服務(wù)來(lái)說(shuō),從故障到恢復(fù)正常服務(wù),它的間隔時(shí)間不可能是0。哪怕你是用了supervisor這樣的工具瞬間把它給拉了起來(lái),它也不可能瞬間完成。所以RTO不會(huì)等于0。
但RPO倒是可以做到逼近0損失的。因?yàn)槟壳暗臄?shù)據(jù)庫(kù)服務(wù),大多數(shù)都會(huì)寫(xiě)一份預(yù)寫(xiě)日志來(lái)防止異常發(fā)生。比如ES會(huì)先寫(xiě)一份translog,MySQL會(huì)先寫(xiě)一份redo log,Postgres會(huì)寫(xiě)一份wal日志。這些日志會(huì)順序?qū)懙酱疟P(pán)上,雖然會(huì)丟失flush()之間的一小部分?jǐn)?shù)據(jù),但大多數(shù)無(wú)傷大雅。
但單機(jī)服務(wù)無(wú)法做到HA,所以即使它的指標(biāo)再好看,對(duì)我們來(lái)說(shuō)也沒(méi)有意義。
集群服務(wù)
對(duì)于集群服務(wù)來(lái)說(shuō),就需要考慮分布式環(huán)境中的復(fù)雜問(wèn)題。比如Kafka采用ISR列表防止單臺(tái)機(jī)器故障之后的服務(wù)可用問(wèn)題。
首先,分布式系統(tǒng),都是通過(guò)副本機(jī)制來(lái)保證數(shù)據(jù)的冗余。主從、raft等交互方式都需要從中選出一個(gè)master來(lái)接收數(shù)據(jù)的變更操作。當(dāng)這個(gè)master故障之后,需要從 從列表 中選舉一個(gè)新的master。
拿Kafka來(lái)說(shuō),單節(jié)點(diǎn)當(dāng)機(jī),短暫影響生產(chǎn)消費(fèi),故障恢復(fù)時(shí)間與 leader 選舉時(shí)間與 partition 數(shù)量有關(guān)(約 10 秒 isr 探測(cè)時(shí)間)。使用 ACK 模式,配合重試,能夠保證故障期間數(shù)據(jù)不丟失。
這已經(jīng)算是一個(gè)非常好的效果了。
但假如整個(gè)集群出現(xiàn)問(wèn)題,比如,機(jī)房斷電了,怎么辦?
多機(jī)房
單機(jī)房的風(fēng)險(xiǎn),只能通過(guò)冗余機(jī)房來(lái)解決,目前較為流行的架構(gòu)是兩地三中心。關(guān)于兩地三中心,這里有一篇專門(mén)的文章描述。
《兩地三中心,如何部署奇數(shù)個(gè)節(jié)點(diǎn)?》
跨機(jī)房的集群同時(shí)會(huì)分為AB區(qū)。拿5節(jié)點(diǎn)服務(wù)來(lái)說(shuō),A機(jī)房部署3個(gè),B機(jī)房部署2個(gè),集群要求的最小節(jié)點(diǎn)數(shù)是3。當(dāng)B機(jī)房出現(xiàn)問(wèn)題,A機(jī)房的表現(xiàn)與單機(jī)房表現(xiàn)無(wú)異。但當(dāng)A機(jī)房出現(xiàn)問(wèn)題,我們就需要人工介入,在B機(jī)房手動(dòng)啟動(dòng)第6個(gè)節(jié)點(diǎn)。
故障處理的間隔時(shí)間就是RTO的值。
在這種情況下,同樣有丟失數(shù)據(jù)的風(fēng)險(xiǎn)。5個(gè)節(jié)點(diǎn),根據(jù)NWR策略,需要寫(xiě)入3個(gè)才算成功。但如果數(shù)據(jù)寫(xiě)入的恰好是A機(jī)房的這三個(gè)節(jié)點(diǎn),數(shù)據(jù)還沒(méi)有完全同步到B機(jī)房,那同步時(shí)間間隔內(nèi)的數(shù)據(jù)就會(huì)丟失。所以智能的服務(wù)還要有能夠識(shí)別出機(jī)房和zone的能力,以便在發(fā)生問(wèn)題時(shí),B機(jī)房起碼有一份數(shù)據(jù)時(shí)刻是最新的。
End
所以,縮寫(xiě)還是很有魅力的。比如,xjjdog就可以縮寫(xiě)為xD,雖然你不能解碼它的意思,是不是很帶感?
作者簡(jiǎn)介:小姐姐味道 (xjjdog),一個(gè)不允許程序員走彎路的公眾號(hào)。聚焦基礎(chǔ)架構(gòu)和Linux。十年架構(gòu),日百億流量,與你探討高并發(fā)世界,給你不一樣的味道。