高可用架構(gòu):fail-over 的三種經(jīng)典模式
前面的文章聊過,高可用的核心方法論是:冗余(replication) + 故障自動轉(zhuǎn)移(fail-over)。
冗余很好理解,復(fù)制服務(wù),復(fù)制數(shù)據(jù)。那故障轉(zhuǎn)移有幾種模式?
故障轉(zhuǎn)移(fail-over)主要有三種模式。
其一:Active-Passive影子主模式。
在這種模式下,只有一個主節(jié)點(Active)在處理請求,另一個影子節(jié)點(Passive)則處于待命狀態(tài),準(zhǔn)備在主節(jié)點故障時接管。
它的特點是,影子節(jié)點在主節(jié)點正常工作時并不參與工作,只有主節(jié)點發(fā)生故障時,影子節(jié)點才接管并參與負(fù)載。系統(tǒng)資源利用率最多只有50%。
無狀態(tài)的服務(wù),例如Nginx可以使用影子主模式保證高可用。
其二:Active-Active多活模式。
在這種模式下,所有節(jié)點均處于“活動”狀態(tài),平均處理負(fù)載,其優(yōu)勢是:
- 保證了高可用;
- 提升了吞吐量;
- 實施了負(fù)載均衡;
- 提高了資源利用效率;
但是,這類模式需要注意雪崩效應(yīng),少量節(jié)點掛掉的情況下,剩余節(jié)點能不能扛得住。
無狀態(tài)的服務(wù)例如站點服務(wù),微服務(wù),可以采用這種高可用模式。
對于包含狀態(tài)的服務(wù),例如數(shù)據(jù)庫,如果使用多活高可用。需要額外的機(jī)制來同步數(shù)據(jù),并解決同步數(shù)據(jù)的過程中帶來的數(shù)據(jù)沖突問題。對于大數(shù)據(jù)量高并發(fā)量的互聯(lián)網(wǎng)業(yè)務(wù)最佳實踐,一般不采用這種模式實施數(shù)據(jù)庫的高可用,數(shù)據(jù)沖突問題根本搞不定。
那包含狀態(tài)的服務(wù),例如數(shù)據(jù)庫,要怎么保證高可用?
其三:Hot-Standby熱備模式。
熱備份可以理解為影子模式的一種特例。
他的影子節(jié)點在平時也會工作,怎么工作呢?
影子節(jié)點只和主節(jié)點保持?jǐn)?shù)據(jù)同步,但并不對外提供服務(wù)。
畫外音:這里主要指寫入服務(wù),讀服務(wù)不會變更數(shù)據(jù)狀態(tài),且不討論。
這樣,影子節(jié)點保持有最新的數(shù)據(jù)副本,在主節(jié)點掛掉后可以迅速接管,減少切換時間。并且影子節(jié)點在平時不對外提供服務(wù),也不會有數(shù)據(jù)沖突。
在數(shù)據(jù)庫這類存儲狀態(tài),且需要快速恢復(fù)的場景,一般使用熱備模式。
但需要注意的是,當(dāng)主掛掉時,需要折衷一致性與可用性:
- 如果數(shù)據(jù)同步完成之前啟動影子節(jié)點,數(shù)據(jù)可能會丟失,從而喪失最終一致;
- 但如果等數(shù)據(jù)同步完成再啟動影子節(jié)點,可能會等待一段時間,從而喪失可用性;
簡單總結(jié),fail-over三種常見模式:
- Active-Passive影子主模式,例如:NG;
- Active-Active多活模式,例如:web-server,service;
- Hot-Standby熱備模式,例如:DB;
知其然,知其所以然。
思路比結(jié)論更重要。