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