儲存高可用方案的本質都是通過將資料複製到多個儲存裝置,通過資料冗餘的方式來實現高可用,其複雜性主要體現在如何應對複製延遲和中斷導致的資料不一致問題
主備:讀寫主機,「備機」主要還是起到乙個備份作用,並不承擔實際的業務讀寫操作
主從:主機讀寫,從機讀
雙機切換:狀態判斷/切換決策
中介式:主機和備機不再通過互聯通道傳遞狀態資訊,而是都將狀態上報給中介這一角色,mongodb(m) 表示主節點,mongodb(s) 表示備節點,mongodb(a) 表示仲裁節點。主備節點儲存資料,仲裁節點不儲存資料。客戶端同時連線主節點與備節點,不連線仲裁節點。開源方案已經有比較成熟的中介式解決方案,例如 zookeeper 和 keepalived。zookeeper 本身已經實現了高可用集群架構,因此已經幫我們解決了中介本身的可靠性問題,在工程實踐中推薦基於 zookeeper 搭建中介式切換架構
模擬式:模擬式指主備機之間並不傳遞任何狀態資料,而是備機模擬成乙個客戶端,向主機發起模擬的讀寫操作,根據讀寫操作的響應情況來判斷主機的狀態,對比一下互連式切換架構,我們可以看到,主備機之間只有資料複製通道,而沒有狀態傳遞通道,備機通過模擬的讀寫操作來探測主機的狀態,然後根據讀寫操作的響應情況來進行狀態決策
主主複製:主主複製指的是兩台機器都是主機,互相將資料複製給對方,客戶端可以任意挑選其中一台機器進行讀寫操作,必須保證資料能夠雙向複製,因此對資料的設計有嚴格的要求,一般適合於那些臨時性、可丟失、可覆蓋的資料場景
資料集群:多台機器組合在一起形成乙個統一的系統
分割槽:資料分割槽指將資料按照一定的規則進行分割槽,不同分割槽分布在不同的地理位置上,每個分割槽儲存一部分資料,通過這種方式來規避地理級別的故障所造成的巨大影響
計算高可用的主要設計目標是當出現部分硬體損壞時,計算任務能夠繼續正常執行。因此計算高可用的本質是通過冗餘來規避部分故障的風險
難點:任務管理方面,即當任務在某台伺服器上執行失敗後,如何將任務重新分配到新的伺服器進行執行
zookeeper例子:
任務分配器:zookeeper 中不存在獨立的任務分配器節點,每個 server 都是任務分配器,follower 收到請求後會進行判斷,如果是寫請求就**給 leader,如果是讀請求就自己處理。角色指定:zookeeper 通過 zab 演算法來選舉 leader,當 leader 故障後,所有的 follower 節點會暫停讀寫操作,開始進行選舉,直到新的 leader 選舉出來後才繼續對 client 提供服務。
從0開始學架構 推薦
程式設計師的成長繞不開架構設計,有時架構設計就像鴻溝一樣擋在程式設計師晉公升之路上,只要跨過去就可以海闊天空。但不少技術能力很強的程式設計師依然不能完全掌握架構設計,這與架構設計的思維方式和訓練機制與寫 有很大差異有關,加之人們對架構設計存在很多誤區,缺乏一套行之有效的架構設計方 就可能導致在實踐過...
《從0開始學架構》 什麼是架構設計
本系列是極客時間 從0開始學架構 的讀書筆記。對應 01 架構到底是指什麼?架構是頂層設計 框架是面向程式設計或配置的半成品 元件是從技術維度上的復用 模組是從業務維度上職責的劃分 系統是相互協同可執行的實體。按照我的理解,架構的維度是最大的,一般我們會講業務架構和技術架構兩類。而框架重在提供一種約...
從0開始學架構 高效能架構模式
目錄 儲存高效能 關係型資料庫 nosql 快取 計算高效能 單伺服器高效能 集群高效能 讀寫分離 一主多從,一主一從 主從複製延遲解決方案 1.寫操作後的讀操作指定發給資料庫主伺服器 2.讀從機失敗後再讀一次主機 3.關鍵業務讀寫操作全部指向主機,非關鍵業務採用讀寫分離 分庫分表 業務分庫 joi...