(第四章)容器化思維(續)

1.etcd原理簡介

  • etcd作爲一個分佈式鍵值存儲系統,解決了分佈式場景中的數據一致性問題,爲服務發現提供了一個穩定、高可用的消息註冊倉庫,爲以微服務協同工作的架構提供了無限的可能。
  • etcd的架構,如圖4-24
    (1)HTTP Server:處理用戶的API請求,處理其它etcd節點的同步與心跳信息請求
    (2)Store:是etcd對用戶提供的大多數API功能的具體實現
    (3)Raft:強一致性算法的具體實現,是etcd的核心
    (4)WAL:即Write Ahead Log(預寫式日誌),他是etcd的數據存儲方式,除了在內存中存有所有數據的狀態以及節點的索引日誌外,etcd還通過WAL進行持久化存儲。
    (5)Entry是存儲的具體日誌的內容,Snapshot是爲了防止數據過多而進行的狀態快照;
    在這裏插入圖片描述
一個用戶的請求會由HTTP server轉發給Store進行具體的事務處理。
若是節點的修改,則交給Raft模塊進行狀態的變更、日誌的記錄;
然後再同步給別的etcd節點以確認數據提交,最後進行數據的提交,再次同步;
  • 集羣化應用與實現原理
    (1)etcd是一個高可用的鍵值存儲系統,天生就是爲集羣化而設計的。
    etcd一般部署集羣推薦奇數個點
    (2)集羣啓動的3種方案:靜態配置啓動,etcd自身服務發現,通過DNS進行服務發現
    (3)運行時重構使得etcd集羣無須重啓即可修改集羣的配置;在配置etcd集羣數量時,至少配置3個核心節點,配置述目越多,可用性越強;
    (4)etcd的節點都是實時同步的,每個節點上都存儲了所有的信息
    (5)Proxy模式下的etcd作爲一個反向代理把客戶的請求轉發給可用的etcd集羣。
    Proxy並不是直接加入到符合強一致性的etcd集羣中的,它沒有增加集羣的可靠性,也沒有降低集羣的寫入性能。
    爲什麼要有Proxy模式而不是直接增加etcd核心節點呢?
    因爲etcd每增加一個核心節點peer,都會給Leader節點增加一定程度的負擔(網絡,CPU,負載)。每次增加信息的變化都需要進行同步備份,增加一個輕量級的Proxy模式etcd節點就是對直接增加etcd節點的一個有效的替代。
    在這裏插入圖片描述

2.etcd數據存儲原理

  • etcd存儲分爲內存存儲和持久化(硬盤)存儲兩部分。
    (1)內存中的存儲:順序化地記錄所有用戶對節點數據變更的記錄,對數據進行索引,建堆等方便查詢的操作
    (2)WAL:對數據進行持久化的存儲
  • etcd的持久化存儲目錄有2個:
    (1)WAL:存儲着所有事務的變化記錄,在數據的修改提交之前,都要先寫入到WAL中。使用WAL進行數據的存儲,使得etcd能夠故障快速恢復,數據回滾或重做
    (2)Snapshot:用於存儲某一個時刻etcd所有目錄的數據

3.Raft算法關鍵內容理解

  • Raft中的一個任期是啥意思?
    定義:從某一次競選開始到下一次競選開始。
    若Follower接收不到Leader節點心跳,就會結束當前任期,變爲Candidate發起競選
    在這裏插入圖片描述

  • Raft狀態機是如何切換的?
    Raft剛剛開始運行時,節點默認進入到Follower的狀態,等待Leader發來心跳信息
    在這裏插入圖片描述

  • 如何保證最短時間內競選出Leader,以防止競選衝突
    在Candidate狀態下有個心跳超時,這是個隨機值。在時間差內,若Candidate1收到的競選信息比自己發起的競選信息的任期要大,那麼Candidate1就會投票給Candidate2

  • 如何防止遺漏數據的節點成爲Leader?
    若發起競爭的節點在上一個任期中保存的已提交的數據不完整,節點就會拒絕投票給他

  • Raft某個節點宕機後會如何?
    (1)若是Follower節點宕機,集羣基本不受影響
    (2)若是Leader節點宕機,則開啓競選機制

  • 爲什麼Raft短髮在確定可用節點數量時不需要考慮拜占庭將軍問題?
    (1)拜占庭將軍問題指出:允許n個節點宕機還能提供正常服務的分佈式架構,需要的總結點數量爲3n+1,而raft只需要2n+1。
    原因是:拜占庭將軍問題中存在數據欺騙的現象,而etcd中假設的所有節點都是誠實的
    (2)etcd嚴格限制Leader到Follower這樣的數據流向,以保證數據一致性不出錯

  • 用戶從集羣中哪個節點讀寫數據?
    所有用戶更新的數據請求都是最先由Leader獲得並保存下來,然後通知其它節點將其保存,等到大多數節點反饋時,一個已提交的數據項纔是Raft真正穩定存儲下來的數據項。

  • etcd實現的Raft算法的性能?
    單實例節點每秒1千次數據寫入。
    節點增加,網絡延遲會對數據同步造成影響;由於每個節點都能處理用戶的讀請求,所以讀性能會提升。

  • etcd的API
    etcd中處理API的包稱之爲Store,該API都是對etcd存儲的鍵值進行操作。

發佈了569 篇原創文章 · 獲贊 140 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章