1. 程式人生 > >分布式基礎知識

分布式基礎知識

acid 提高 知識 強一致性 mage text blob 處理 故障

參考 https://github.com/CyC2018/Interview-Notebook/blob/master/notes/

基本概念

(1)異常:

  • 1. 服務器宕機

  內存錯誤、服務器停電等都會導致服務器宕機,此時節點無法正常工作,稱為不可用。

  服務器宕機會導致節點失去所有內存信息,因此需要將內存信息保存到持久化介質上。

  • 2. 網絡異常

  有一種特殊的網絡異常稱為 網絡分區 ,即集群的所有節點被劃分為多個區域,每個區域內部可以通信,但是區域之間無法通信。

  • 3. 磁盤故障

  磁盤故障是一種發生概率很高的異常。

  使用冗余機制,將數據存儲到多臺服務器。

(2)超時:
  可以將服務器的操作設計為具有 冪等性 ,即執行多次的結果與執行一次的結果相同。如果使用這種方式,當出現超時的時候,可以不斷地重新請求直到成功。

(3)衡量指標

  • 1. 性能

  常見的性能指標有:吞吐量、響應時間。這兩個指標往往是矛盾的,追求高吞吐的系統,往往很難做到低響應時間。

  高吞吐意味並發系統,高並發提高 CPU 資源的利用率,但是請求不能馬上被處理,需要和其它請求一起進行並發處理,響應時間增高。

  • 2. 可用性:指系統在面對各種異常時可以提供正常服務的能力
  • 3. 一致性:見之前的文章
  • 4. 可擴展性:指系統通過擴展集群服務器規模來提高性能的能力。

---------------------------------------------------------------------------------------------------------------------

數據分布

(1)哈希分布

  將數據計算哈希值之後,按照哈希值分配到不同的節點上。例如有 N 個節點,數據的主鍵為 key,則將該數據分配的節點序號為:hash(key)%N。

  傳統的此類算法存在問題:當節點數量變化時,也就是 N 值變化,那麽幾乎所有的數據都需要重新分布,將導致大量的數據遷移。

然後提出了一致性哈希

  Distributed Hash Table(DHT):對於哈希空間 0~2n,將該哈希空間看成一個哈希環,將每個節點都配置到哈希環上。每個數據對象通過哈希取模得到哈希值之後,存放到哈希環中順時針方向第一個大於等於該哈希值的節點上。

技術分享圖片

  一致性哈希的優點是在加入或者刪除節點時只會影響到哈希環中相鄰的節點。

(2)順序分布

  哈希分布式破壞了數據的有序性,順序分布則不會。

  順序分布的數據劃分為多個連續的部分,按一定策略分布到不同節點上。例如下圖中,User 表的主鍵範圍為 1 ~ 7000,使用順序分布可以將其劃分成多個子表,對應的主鍵範圍為 1 ~ 1000,1001 ~ 2000,...,6001 ~ 7000。

  引入 Meta 表是為了支持更大的集群規模,它將原來的一層索引結分成兩層,Meta 維護著 User 子表所在的節點,從而減輕 Root 節點的負擔。

技術分享圖片

---------------------------------------------------------------------------------------------------------------

負載均衡

  衡量負載的因素很多,如 CPU、內存、磁盤等資源使用情況、讀寫請求數等。分布式系統應當能夠自動負載均衡,當某個節點的負載較高,將它的部分數據遷移到其它節點。

  每個集群都有一個總控節點,其它節點為工作節點,由總控節點根據全局負載信息進行整體調度,工作節點定時發送心跳包(Heartbeat)將節點負載相關的信息發送給總控節點。

  一個新上線的工作節點,由於其負載較低,如果不加控制,總控節點會將大量數據同時遷移到該節點上,造成該節點一段時間內無法工作。因此負載均衡操作需要平滑進行,新加入的節點需要較長的一段時間來達到比較均衡的狀態。

--------------------------------------------------------------

復制

  復制是保證分布式系統高可用的基礎,讓一個數據存儲多個副本,當某個副本所在的節點出現故障時,能夠自動切換到其它副本上,從而實現故障恢復。

  多個副本通常有一個為主副本,其它為備副本。主副本用來處理寫請求,備副本主要用來處理讀請求,實現讀寫分離。主副本將同步操作日誌發送給備副本,備副本通過回放操作日誌獲取最新修改。

  兩種:強同步復制協議,一種是異步復制協議。(分別在可用性和一致性有不同的表現,即CA不能共同滿足)

技術分享圖片

---------------------------------------------------------------------------

CAP理論:在之前的文章中有講過(分區容錯需要保證,CA之間權衡)

技術分享圖片

BASE:基本可用、軟狀態、最終一致性:由CAP演化而來,在一致性上妥協

即使無法做到強一致性,但每個應用都可以根據自身業務特點,采用適當的方式來使系統達到最終一致性。

技術分享圖片

  ACID 是傳統數據庫系統常用的設計理論,追求強一致性模型。BASE 常用於大型分布式系統,只需要保證最終一致性。在實際的分布式場景中,不同業務單元和組件對一致性的要求是不同的,因此 ACID 和 BASE 往往會結合在一起使用。

-------------------------------------------------------------------

容錯:(自動化容錯)

故障檢測:可以通過租約機制 來對故障進行檢測

故障恢復:當某個節點故障時,就將它上面的服務遷移到其它節點。可也有主動恢復機制

--------------------------------------------------------------------

CDN架構

  通過將內容發布到靠近用戶的邊緣節點,使不同地域的用戶在訪問相同網頁時可以就近獲取。不僅可以減輕服務器的負擔,也可以提高用戶的訪問速度。

  從下圖可以看出,DNS 在對域名解析時不再向用戶返回源服務器的 IP 地址,而是返回邊緣節點的 IP 地址,所以用戶最終訪問的是邊緣節點。邊緣節點會先從源服務器中獲取用戶所需的數據,如果請求成功,邊緣節點會將頁面緩存下來,下次用戶訪問時可以直接讀取。

技術分享圖片

分布式基礎知識