高可用架構(上)

1. 背景

在學習完各種高性能發(fā)實現(xiàn)方案后,就需要對三大復雜度一直的高可用進行開刀了,在高可用方面主要有哪些東西是我們需要考慮的呢?接下來將從三個方面逐一分析。

2. 理論

在設計高可用架構理論方面,我們主要有2個方向選擇,分別是CAP理論和BASE理論,那什么是CAP,什么是BASE呢? 這個還是要好好分析一下。

2.1 CAP

  • C(Consistence):一致性
  • A(Availability):可用性
  • P(Partition Tolerance):分區(qū)容錯性

一致性:指的是從所有節(jié)點獲取的數據都是最新的(最新,那就是每個節(jié)點數據都是最新的數據,相同的)。

可用性:非故障節(jié)點在合理時間內返回合理響應。這個主要是為了排除一些非正常響應,如:超時,或者錯誤的結果

分區(qū)容錯性:在發(fā)生網絡異常時,系統(tǒng)能夠繼續(xù)保持任務運行

CAP理論有三個,但是在分布式系統(tǒng)中來說,只能選擇其中兩個。多系統(tǒng)網絡中,我們無法保證網絡100%正常,所以必須要選擇P,保持系統(tǒng)繼續(xù)運行,然后才是在C、A之間做取舍。如果選擇CP, 那就是需要保證數據的一致,當無法保證數據一致時,就要對異常節(jié)點剔除,就無法保證系統(tǒng)可用性。當選擇AP,當網絡波動時,數據無法同步,無法保持最新數據,但系統(tǒng)可以訪問。

通過上面的描述,有沒有發(fā)現(xiàn)一個問題?這些理論都是針對數據來說的,當CP時,數據保證了一致,當AP時,數據不一致。我們有一個誤區(qū),認為系統(tǒng)設計一定要選AP,或者CP。其實這樣是不正確的。因為在同一個系統(tǒng)中,可能部分數據需要保證AP,有一部分數據需要保證CP,例如:關于金額的數據則需要保證AP,但是用戶相關昵稱、簡介可以使用AP。

所以,在系統(tǒng)正常運行的時候,是不存在選AP,還是CP的,我們應該同時關注CA。CAP的理論的前提是發(fā)生了網絡分區(qū),但是,當網絡正常時,我們沒有必要放棄A或C,我們應該同時滿足。

2.2 BASE

  • B(Basically Available):基本可用
  • S( Soft State):軟狀態(tài)
  • E(Eventual Consistency):最終一致性

基本可用:分布式系統(tǒng)發(fā)生故障的時候,保證系統(tǒng)能夠基本運行,允許損失部分可用性

軟狀態(tài):過渡期,數據處于某中非最終狀態(tài)??梢岳斫鉃椋簲祿灰恢?/p>

最終一致性:系統(tǒng)中的數據經過一段時間后,最終達到一致的狀態(tài)(非實時一致)

BASE理論是對CAP理論的一種補充,在CAP中,C大多數指的情況是強一致性,在同一時刻,從所有節(jié)點獲取的數據是相同的。而在BASE中,則通過軟狀態(tài),和最終一致性來保證系統(tǒng)可用,而非在同一刻數據相同,而是通過一段時間后,所有節(jié)點數據相同。或者說,當系統(tǒng)發(fā)生分區(qū)故障時,數據不一致也可以使用,而最后通過通過,達到所有節(jié)點數據一致。

3. 接口層面

當在理論方面選擇完可用性后,我們就需要在接口層面來考慮系統(tǒng)的可用性了。不然,一個接口調用,就搞掛系統(tǒng),這樣可就丟人啦。

通常,我們從接口層面考慮可用性主要分為4個方面,相信大家也是耳熟能詳。分別是:熔斷,限流,降級,排隊。接下來就從這4個方面介紹。

3.1 熔斷

熔斷,這就和我們生活中的保險絲很像,當功率過大的時候,保險絲就會斷掉,防止功率過大,引起火災。我們在進行接口設計時,也需要考慮熔斷,當系統(tǒng)接口調用失敗,達到一定失敗率或壓力時,應該熔斷系統(tǒng)。這里的熔斷,不是指掛掉接口,而是快速響應。我們通過自定義響應內容,快速返回結果,響應客戶端。熔斷的核心理念也就是快速響應,保證系統(tǒng)可用。

3.2 限流

限流。這個就像我們周五進地鐵,由于人多,防止地鐵里的人員發(fā)生踩踏,擁擠事件,就在地鐵口弄幾個架子,讓人慢慢排隊,減小入口流量,保證地鐵里的人流能夠正常運行。限流和地鐵這個沒有大的區(qū)別,防止系統(tǒng)應對過大的流量,壓垮系統(tǒng),則通過閘口,控制進入系統(tǒng)的流量,這樣可以使得系統(tǒng)在一個合理的流量內運行,保證了系統(tǒng)的正常運行。我們通過這樣可以看得出來:限流是通過外部方式,來解決系統(tǒng)可用性。

3.3 降級

降級,那就是在流量高峰期間,關閉或減少系統(tǒng)其他功能,保證系統(tǒng)的核心功能可用。舉個栗子:那就是淘寶雙11的時候了,只能下單,而不能就行查單/或者只能查詢最近幾天的單。為什么呢?因為用戶下單后可能進行大量的查單操作,占用大量系統(tǒng)資源,那就會影響下單,影響業(yè)務收入,這樣就得不償失。通過關閉查單,保證下單可用,這樣就保證了核心系統(tǒng)的可用。

3.4 排隊

排隊,顧名思義,就是排隊。就像網紅奶茶店,大家都擠著去買奶茶,人員忙不過來,那咋辦? 那大家就排隊唄,在這等著,然后等到你的時候,在給你響應。在系統(tǒng)中,我們可以通過暫緩用戶請求,排在隊列中,讓用戶等待,限制處理量,等處理后在給用戶響應。大家應該也有所發(fā)現(xiàn),排隊和限流還是蠻像的,限流是直接拒絕,而排隊,是讓用戶等待。

4. 存儲

從理論,到接口,那么接下來就是存儲方面的高可用。在互聯(lián)網中,大量的用戶,大量的數據,帶來的極多挑戰(zhàn),那么,我們到底有什么方案可以保證存儲高可用呢?

存儲高可用的本質都是通過將數據復制到多個存儲設備,通過數據冗余的方式來實現(xiàn)高可用。其主要的復雜性體現(xiàn)在:數據同步延時和數據復制中斷帶來的數據不一致問題。所以我們也主要從四個方面考慮問題。1、數據如何復制,2、各個節(jié)點的職責,3、如果應對復制延遲,4、如果應對數據復制中斷。

4.1 切換方式

常見的分布式方案有;主從,主備,主主

4.1.1 主備

主備,從字面意思理解,就是一個主節(jié)點,一個備機。 主節(jié)點用來處理所有的操作。備機從主節(jié)點備份數據,但是不對外提供服務。這種方式就是簡單,切換主,備客戶端無感知。缺點就是:備機僅僅用來備份,有些浪費。

4.1.2 主從

主從,從字面理解就是一個主人,一個隨從。隨從和備機還是有區(qū)別的,隨從需要干活,備份不需要。主從和主備相似,只是從機需要提供查詢服務。這中方式彌補了主備方式備機浪費的缺點,但也帶來了新的問題,主從復制延遲問題,客戶端需要根據情況切換到主機或備機。

4.1.3 主主

主主,顧名思義,就是兩個節(jié)點都是主節(jié)點。雙主帶來的好處就是任何一個節(jié)點都可以進行讀寫操作,但缺點也顯而易見。雙主節(jié)點需要對對方的數據進行同步,這樣就帶來了同步延時的問題,同時,在同步的時候還會帶來數據重復的問題。如:在A服務注冊了手機號為F的用戶,在B服務業(yè)注冊了手機號為的用戶,在合并時如何處理的。所以,在未考慮復雜性的時候,主主更適用于數據具有可重復性,可丟失的場景。

4.2 雙機切換

我們從主備和主從的方案中發(fā)現(xiàn),當主節(jié)點掛掉后,就無法在對外提供服務。這樣就會導致服務宕機,那么我們就要采取一個合適的方案,來進行新的主節(jié)點的選取,那么就涉及到了雙擊切換

要設計切換方案,我們就要從這幾個方面考慮:

4.2.1 主備間狀態(tài)判斷

主要包括:1、狀態(tài)傳遞的渠道,也就是通過什么樣的方式來傳遞內容。 2、 狀態(tài)檢測的內容:主要是通過什么東西來判斷主節(jié)點是否掛掉,如:斷電,進程死亡?

4.2.2 切換的決策

切換決策主要包含幾個方面:1、什么時候切換,2、如何切換,3、切換的方式如何?

4.2.3 數據沖突問題

我們在切換過程中,可能主備/主從之間數據還未完全同步,如何保證切換后數據一致,這個就有點類似上面的主主方案了。

5. 總結

以上分享的是高可用架構理論,接口,存儲方面的理論知識,在設計高可用的時候還是有許多要考慮的。如果有什么問題,歡迎指正,討論

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容