面試官:你知道雙機(jī)存儲(chǔ)有哪幾種嗎?分別有哪些優(yōu)缺點(diǎn)(主備、主從、主主)
雖說我們的機(jī)子(服務(wù)器)在絕大部分下是可靠的,但是還是會(huì)有意外發(fā)生。
單點(diǎn)故障的情況不可避免,而且單副本的存儲(chǔ)方案早已無法滿足業(yè)務(wù)的可靠性要求,單機(jī)可靠性就就兩個(gè)9,也就是一年大概有3.65天不可用。因此一般情況下我們至少也會(huì)上個(gè)雙機(jī)存儲(chǔ)架構(gòu)。凡事最好有個(gè)plan B。
主備
主:主機(jī),備:備機(jī)。主機(jī)的意思當(dāng)然是以它為主了,讀寫都是主機(jī)上,而備機(jī)呢就是備用,默默的在背后吸收主機(jī)的數(shù)據(jù),時(shí)刻待命著等待主機(jī)掛了之后取而代之(沒這么壞哈哈)。因此在主機(jī)還活著的情況下,備機(jī)的唯一使命就是同步主機(jī)的數(shù)據(jù),不對(duì)外提供服務(wù)。
優(yōu)點(diǎn):簡(jiǎn)單,主備之間只有數(shù)據(jù)同步,不需要考慮別的情況。就很簡(jiǎn)單的配置一下,再搞一臺(tái)服務(wù)器就能組成主備架構(gòu)了。
缺點(diǎn):備機(jī)等于就拿來備份,浪費(fèi)了備機(jī)這臺(tái)服務(wù)器的資源。上面說的不考慮別的情況指的是主機(jī)和備機(jī)它們兩之間就只要復(fù)制數(shù)據(jù),但是有些情況我們?nèi)诉€是得考慮的:主機(jī)掛了如何讓備機(jī)上。
有三種選擇
人工切換。人工切換時(shí)效性不高,出了事情首先你得開機(jī),登錄遠(yuǎn)程一陣啪啪得好幾分鐘或者萬一你在LOL,黑鐵晉級(jí)青銅最后一把努力了幾個(gè)月即將晉升倔強(qiáng)青銅的一刻!是吧。還要萬一在深夜或者說....是吧。
引入中間件。例如ZooKeeper、keepalived。就跟好多房東把房子委托給中介一樣,這中間件就是個(gè)中介。全權(quán)由中介來打理主機(jī)和備機(jī),它會(huì)根據(jù)機(jī)子狀態(tài)來判別這時(shí)候是不是該備機(jī)上了。(建議)
主機(jī)備機(jī)之間狀態(tài)傳輸(咱不找中介了,自己來打理),啥意思呢?就是除數(shù)據(jù)同步,主備之間還要有個(gè)狀態(tài)傳輸過程,來讓備機(jī)只要現(xiàn)在主機(jī)過得好不好,可以是主機(jī)主動(dòng)推送它的狀態(tài)給備機(jī),或者是備機(jī)去索要狀態(tài)。當(dāng)狀態(tài)拿不到或者不對(duì)的時(shí)候就開始主備切換。但是可能傳輸出現(xiàn)了波動(dòng)啥的,導(dǎo)致備機(jī)誤判了,然后備機(jī)升級(jí)為主機(jī),這樣就兩主機(jī)了(下面會(huì)說主主的問題)。
主從
主:主機(jī),從:從機(jī)
從機(jī)和備機(jī)的區(qū)別在于它得除了同步數(shù)據(jù)之外還得干活,對(duì)外提供讀的操作,你可以理解為它是仆從。但是仆從和備機(jī)一樣也有翻身做主人的一天,所以它也在默默的等待著主機(jī)掛了,取而代之。
優(yōu)點(diǎn):充分利用了資源,嘿嘿不想備機(jī)這么爽了,還得出來干活,對(duì)外提供讀操作。而且在主機(jī)掛了的時(shí)候,如果沒任命新機(jī)主之前,讀操作還是能用的。
缺點(diǎn):
客戶端需要多個(gè)判斷,也就是不同操作需要發(fā)放給不同服務(wù)器,我上圖主機(jī)提供讀寫,有時(shí)候讀寫分離了,主機(jī)就提供寫。
主從延遲,讀操作分配給從庫(kù),就會(huì)存在數(shù)據(jù)同步的延遲問題,比如某個(gè)人注冊(cè)了賬號(hào)之后,登錄走的是從機(jī),這時(shí)候數(shù)據(jù)還未從主機(jī)同步過來,那可不讓人很難受了。有關(guān)主從延遲問題的一些解決辦法
和主備一樣的切換問題。(參考主備)
主主
主主就是兩臺(tái)都是主機(jī)。同時(shí)對(duì)外提供讀寫操作??蛻舳巳我庠L問提供的一臺(tái)。
優(yōu)點(diǎn):主主的好處就是可以把寫操作也分擔(dān)一下,但是問題恰恰就出在寫操作上,導(dǎo)致主主的架構(gòu)有很大的局限性。
缺點(diǎn):例如主機(jī)A有個(gè)注冊(cè)的插入操作,生成的id是50,同一時(shí)刻主機(jī)B也有個(gè)插入操作生成的id也是50。然后它們之間的數(shù)據(jù)同步了,你說是誰覆蓋誰呢?誰覆蓋誰都不對(duì)!
因此主主只適用于可以雙向復(fù)制,覆蓋的數(shù)據(jù)(例如用戶登錄生成的token)。但是我們平日里絕大部分的數(shù)據(jù)都不允許。
結(jié)語
這種雙機(jī)存儲(chǔ)架構(gòu)一般而言應(yīng)用于一些業(yè)務(wù)量不大的場(chǎng)景。主要還是為了存儲(chǔ)的可用性。
特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:
長(zhǎng)按訂閱更多精彩▼
如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!