單點故障的情況不可避免,而且單副本的儲存方案早已無法滿足業務的可靠性要求,單機可靠性就就兩個9,也就是一年大概有3.65天不可用。因此一般情況下我們至少也會上個雙機儲存架構。凡事最好有個plan B。
主備
主:主機,備:備機。 主機的意思當然是以它為主了,讀寫都是主機上,而備機呢就是備用,默默的在背後吸收主機的資料,時刻待命著等待主機掛了之後取而代之(沒這麼壞哈哈)。因此在主機還活著的情況下,備機的唯一使命就是同步主機的資料,不對外提供服務。
優點:簡單,主備之間只有資料同步,不需要考慮別的情況。就很簡單的配置一下,再搞一臺伺服器就能組成主備架構了。
缺點:備機等於就拿來備份,浪費了備機這臺伺服器的資源。上面說的不考慮別的情況指的是主機和備機它們兩之間就只要複製資料,但是有些情況我們人還是得考慮的:主機掛了如何讓備機上。
有三種選擇
1.人工切換。人工切換時效性不高,出了事情首先你得開機,登入遠端一陣啪啪得好幾分鐘或者萬一你在LOL,黑鐵晉級青銅最後一把努力了幾個月即將晉升倔強青銅的一刻!是吧。還要萬一在深夜或者說....是吧。
2.引入中介軟體。例如ZooKeeper、keepalived。就跟好多房東把房子委託給中介一樣,這中介軟體就是個中介。全權由中介來打理主機和備機,它會根據機子狀態來判別這時候是不是該備機上了。(建議)
3.主機備機之間狀態傳輸(我們不找中介了,自己來打理),啥意思呢?就是除資料同步,主備之間還要有個狀態傳輸過程,來讓備機只要現在主機過得好不好,可以是主機主動推送它的狀態給備機,或者是備機去索要狀態。當狀態拿不到或者不對的時候就開始主備切換。但是可能傳輸出現了波動啥的,導致備機誤判了,然後備機升級為主機,這樣就兩主機了(下面會說主主的問題)。
主從
主:主機,從:從機
從機和備機的區別在於它得除了同步資料之外還得幹活,對外提供讀的操作,你可以理解為它是僕從。但是僕從和備機一樣也有翻身做主人的一天,所以它也在默默的等待著主機掛了,取而代之。
優點:充分利用了資源,嘿嘿不想備機這麼爽了,還得出來幹活,對外提供讀操作。而且在主機掛了的時候,如果沒任命新機主之前,讀操作還是能用的。
缺點:
1.客戶端需要多個判斷,也就是不同操作需要發放給不同伺服器,我上圖主機提供讀寫,有時候讀寫分離了,主機就提供寫。
2.主從延遲,讀操作分配給從庫,就會存在資料同步的延遲問題,比如某個人註冊了賬號之後,登入走的是從機,這時候資料還未從主機同步過來,那可不讓人很難受了。有關主從延遲問題的一些解決辦法
3.和主備一樣的切換問題。(參考主備)
主主
主主就是兩臺都是主機。同時對外提供讀寫操作。客戶端任意訪問提供的一臺。
優點:主主的好處就是可以把寫操作也分擔一下,但是問題恰恰就出在寫操作上,導致主主的架構有很大的侷限性。
缺點:例如主機A有個註冊的插入操作,生成的id是50,同一時刻主機B也有個插入操作生成的id也是50。然後它們之間的資料同步了,你說是誰覆蓋誰呢?誰覆蓋誰都不對!
因此主主只適用於可以雙向複製,覆蓋的資料(例如使用者登入生成的token)。但是我們平日裡絕大部分的資料都不允許。
結語
這種雙機儲存架構一般而言應用於一些業務量不大的場景。主要還是為了儲存的可用性。
如有錯誤歡迎指正!
個人公眾號:yes的練級攻略
有相關面試進階(分散式、效能調優、經典書籍pdf)資料等待領取