《分佈式技術原理與算法解析》學習筆記Day23

分佈式數據複製

我們在進行分佈式數據存儲設計時,通常會考慮對數據進行備份,以提高數據的可用性和可靠性,“數據複製技術”就是實現數據備份的關鍵技術。

什麼是數據複製技術?

在分佈式數據庫系統中,通常會設置主備數據庫,當主數據庫出現故障時,備數據庫可以替代主數據庫進行後續的工作,從而保證業務的正常運行。

數據複製技術就是如何讓主備數據庫保持數據一致的技術。

數據複製原理和應用

數據的一致性,是指不同節點上的數據要保持一致。對於分佈式存儲系統中的數據複製技術來講,也需要在一致性和可用性之間做出權衡。

從一致性和可用性來看,數據複製技術一般分爲三類:

  • 比較注重一致性,例如同步複製技術
  • 比較注重可用性,例如異步複製技術
  • 平衡一致性和可用性,例如半同步複製技術

同步複製技術

同步複製技術是指當用戶請求更新數據時,主數據庫必須要同步到備數據庫之後纔可以給用戶返回結果,即如果主數據庫沒有同步到備數據庫,用戶的更新操作會一直阻塞。

這種方式保證了數據的強一致性,但是犧牲了系統的可用性。

在一個分佈式數據庫系統中,有兩個節點,分別作爲主節點和備節點。通常情況下,兩個節點都可以接收用戶讀請求,然後將本節點的數據及時返回給用戶,也就是說讀請求響應比較快。如果用戶發送的事寫請求,寫操作必須由主節點進行,即使用戶將寫請求發送到備節點,備節點也會將請求轉發給主節點,因此寫請求要比讀請求慢一些。

同步複製技術要求主數據庫等待所有備數據庫都操作成功纔可以響應用戶,性能不是很好,影響用戶體驗。因此同步複製技術適用於分佈式數據庫主備場景或者對數據一致性有嚴格要求的場合。

異步複製技術

異步複製技術是指當用戶請求更新數據時,主數據庫處理完請求後可以直接給用戶響應,而不必等到備數據庫完成同步,即備數據庫會異步進行數據同步,用戶的更新操作不會因爲備數據庫未完成數據同步而導致阻塞。

這種方式保證了系統的可用性,但是犧牲了數據的一致性。

分佈式數據庫主備模式場景下,如果對數據一致性要求不高,也可以採用異步複製方法。

MySQL集羣默認採用的數據複製模式就是異步複製技術,主要流程如下:

  1. 主數據庫完成寫操作後,可以直接給用戶回覆成功,將寫操作寫入binary log中,binary log中記錄着主數據庫執行的所有更新操作,以便備數據庫獲取更新信息。
  2. 備數據庫啓動一個IO線程專門讀取binary log中的內容然後寫入relay log中。
  3. 備數據庫啓動一個SQL線程會定時檢查relay log中的內容,如果發現有新內容則會立即在備數據庫中執行,從而實現數據的一致。

異步複製技術一般會應用在對用戶請求響應時延要求很高的場景。

半同步複製技術

半同步複製技術的核心是用戶發出寫請求後,主數據庫會執行寫操作,並給備數據庫發送同步請求,但主數據庫不用等待所有備份數據庫回覆數據同步成功便可以響應用戶,也就是說主數據庫可以等待一部分備數據庫同步完成後響應用戶寫操作執行成功。

半同步複製技術通常由兩種方式:

  1. 當主數據庫收到多個備數據庫中某一個回覆數據同步成功後,便可以給用戶響應寫操作完成。
  2. 當主數據庫收到超過一半節點回複數據更新成功後,再給用戶響應寫操作成功。

我們之前談過的ZooKeeper集羣符合CP特徵,它採用的數據複製技術就是上述第二種半同步複製方案,在ZooKeeper集羣中,寫請求必須由Leader節點進行處理,每次寫請求,Leader會給Follower發Proposal,等待多數節點同意後寫操作纔可成功。通過這樣的方式,ZooKeeper實現了一致性。

數據複製技術選型

多數的分佈式存儲系統可以通過配置來選擇不同的數據複製技術,例如

  • MySQL的數據庫集羣,支持全同步複製、異步複製和半同步複製三種模式。
  • Oracle在數據複製方面提供了最大保護模式(半同步複製技術的第一種方式)、最大性能模式(異步複製技術)和最大可用性模式(平時採用最大保護模式,主備發生網絡故障時採用最大性能模式,這樣在一致性和可用性之間做了權衡)。

三種不同的數據複製技術的詳細比較如下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章