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