數據處理和存儲系統設計?軟件系統架構設計中,對于數據存儲的設計也是一個重點話題,存儲高可用方案的本質都是通過将數據複制到多個存儲設備,通過數據冗餘的方式來實現高可用,其複雜性主要體現在如何應對複制延遲和中斷導緻的數據不一緻問題因此,對任何一個高可用存儲方案,我們需要從數據如何複制、各節點的職責、如何應對複制延時、如何應對複制終端這幾個方面去進行思考和分析,今天小編就來聊一聊關于數據處理和存儲系統設計?接下來我們就一起去研究一下吧!
軟件系統架構設計中,對于數據存儲的設計也是一個重點話題,存儲高可用方案的本質都是通過将數據複制到多個存儲設備,通過數據冗餘的方式來實現高可用,其複雜性主要體現在如何應對複制延遲和中斷導緻的數據不一緻問題。因此,對任何一個高可用存儲方案,我們需要從數據如何複制、各節點的職責、如何應對複制延時、如何應對複制終端這幾個方面去進行思考和分析。
在存儲高可用的雙機架構中,最主要的目的是為了解決數據庫的單點故障問題,如何解決這個問題?主要采用數據多節點存儲的方式進行處理,數據的多節點存儲,要考慮的是數據如何複制,雙機架構中常用的的複制方案有主備複制、主從複制、雙機切換、主主複制。下面分别說一下這幾種複制方案的優缺點。
主備複制
主備複制是最常見也是最簡單的一種存儲高可用方案,幾乎所有的存儲系統都提供了主備複制的功能,例如MySQL、Redis、MongoDB等。其整體架構比較簡單,主備架構中的備機主要還是起到一個備份作用,并不承擔實際的業務讀寫操作,如果要把備機改為主機,需要人工操作。
優點:
對于客戶端來說,不需要感知備機的存在,即使災難恢複後,原來的備機被人工修改為主機後,對于客戶端來說,隻是認為主機的地址換了而已,無須知道是原來的備機升級為主機。
對于主機和備機來說,雙方隻需要進行數據複制即可,無須進行狀态判斷和主備切換這類複雜的操作。
缺點:
備機僅僅隻為備份,并沒有提供讀寫操作,硬件成本上有浪費。
發生故障後需要人工幹預,無法自動恢複。人工處理的效率是很低的,可能打電話找到能夠操作的人就耗費了10分鐘,甚至如果是深更半夜,出了故障都沒人知道。人工在執行恢複操作的過程中也容易出錯,因為這類操作并不常見,可能1年就2、3次,實際操作的時候很可能遇到各種意想不到的問題。
二、主從複制
主從複制和主備複制隻有一字之差,“從”意思是“随從、仆從”,“備”的意思是備份。我們可以理解為仆從是要幫主人幹活的,這裡的幹活就是承擔“讀”的操作。也就是說,主機負責讀寫操作,從機隻負責讀操作,不負責寫操作。
優點:
主從複制在主機故障時,讀操作相關的業務可以繼續運行。
主從複制架構的從機提供讀操作,發揮了硬件的性能。
缺點:
主從複制架構中,客戶端需要感知主從關系,并将不同的操作發給不同的機器進行處理,複雜度比主備複制要高。
主從複制架構中,從機提供讀業務,如果主從複制延遲比較大,業務會因為數據不一緻出現問題。
故障時需要人工幹預。
三、雙機切換
雙機切換在主從複制的基礎上做了優化,解決了主機故障後無法進行寫操作或者主機出現故障無法恢複時,可以通過人工指定新的主機的問題。雙機切換包括主備切換和主從切換兩種方案。簡單來說,這兩個方案就是在原有方案的基礎上增加切換功能,即系統自動決定主機角色,并完成角色切換。要實現一個雙機切換,必須考慮主備間狀态判斷、切換策略、數據中途解決這幾個方面的問題。常見的雙機切換方案有以下幾種。
互聯式
互聯式,顧名思義,就是指主備機直接建立狀态傳遞的渠道,這個是在主備架構的基礎上,主機和備機多了一個狀态傳遞的通道,這個通道就是用來傳遞狀态信息的。其架構圖如下:
優點:
通過網絡連接或非網絡連接(串口線連接)。
通過主機發送狀态給備機,或者備機到主機來獲取狀态信息。
狀态傳遞通道可以和數據複制通道共用,也可以獨立一條通道。
缺點:
若狀态通道發生故障,備機從而将自己升為主機,而此時主機并沒有故障,最終可能出現兩個主機。
雖然可增加多個通道來增強狀态傳遞的可靠性,但是通道越多,狀态決策就越複雜,因為對備機來說,可能從不同的通道收到了不同甚至矛盾的狀态信息。
中介式
中介式指的是在主備兩者之外引入第三方中介,主備機之間不直接連接,而都去連接中介,并且通過中介來傳遞狀态信息,其架構圖如下:
由上圖我們可以看到,主機和備機之間不再通過互聯通道傳遞狀态信息,而是都将狀态上報給中介這個角色,單純從架構上看,這一架構模式似乎比互聯式更加複雜了,首先要引入中介,然後要各自上報狀态,然而事實上,中介式在狀态傳遞和決策上卻更加簡單了。
優點:
無論是主機還是備機,初始狀态都是備機,并且隻要與中介斷開連接,就将自己降級為備機,因此可能出現雙備機的情況。
主機與中介斷連後,中介能夠立刻告知備機,備機将自己升級為主機。
如果是網絡中斷導緻主機與中介斷連,主機自己會降級為備機,網絡恢複後,舊的主機以新的備機身份向中介上報自己的狀态。
如果是掉電重啟或者進程重啟,舊的主機初始狀态為備機,與中介恢複連接後,發現已經有主機了,保持自己備機狀态不變。
主備機與中介連接都正常的情況下,按照實際的狀态決定是否進行切換。例如,主機響應時間超過3秒就進行切換,主機降級為備機,備機升級為主機即可。
缺點:
中介本身的高可用是一個需要考慮的問題。
如果中介自己宕機了,整個系統就進入了雙備的狀态,寫操作相關的業務都不可用了。
四、主主複制
主主複制指的是兩台機器都是主機,互相将數據複制給對方,客戶端可以任意挑選其中一台機器進行讀寫操作。
優點:
兩台都是主機,不存在切換的概念。
客戶端無須區分不同角色的主機,随便将讀寫操作發送給哪台主機都可以。
缺點:
主主複制架構,必須保證數據能夠雙向複制,而實際在很多業務場景中,很多數據是不能雙向複制的。
主主複制架構對數據的設計有嚴格的要求,一般适合于那些臨時性、可丢失、可覆蓋的數據場景。例如,用戶登錄産生的session數據(可以重新登錄生成)、用戶行為的日志數據(可以丢失)、論壇的草稿數據(可以丢失)等。
上面介紹了不同複制方案,如何選取合理的方案,還需要從業務的角度出發進行考慮,比如讀多寫少的情況下一般采用主從複制,像論壇、BBS、新聞網站這類業務系統。最後給大家推薦一個比較成熟的MYSQL高可用方案,叫MHA,感興趣的同學可以去找找相應的教程。
今天就分享到這裡,感興趣的同學别忘了加關注,持續分享更多軟件架構設計方面的知識。
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!