分佈式概念:數據複製

數據複製是實現數據可靠性的關鍵方法。對數據進行備份,以提高數據的可用性和可靠性,而實現數據備份的關鍵技術就是“數據複製技術”。

可以保證存儲在不同節點上的同一份數據是一致的。這樣當一個節點故障後,可以從其他存儲該數據的節點獲取數據,避免數據丟失,進而提高了系統的可靠性。

主備數據庫
主備數據庫中的數據保持一致。

1.比較注重一致性,比如同步複製技術;

當用戶請求更新數據時,主數據庫必須要同步到備數據庫之後纔可給用戶返回,即如果主數據庫沒有同步到備數據庫,用戶的更新操作會一直阻塞。這種方式保證了數據的強一致性,但犧牲了系統的可用性。
示例:讀寫分離
(1)有兩個節點,分別作爲主節點和備節點。
(2)兩個節點均可接收用戶讀請求,然後將本節點的數據及時返回給用戶。讀請求響應快;
(3)如果是寫請求,寫操作必須由主節點進行,即使用戶將寫請求發送到備節點,備節點也會將該請求轉發給主節點,響應比較慢。
場景:寫操作響應慢,會影響用戶體驗,經常用於分佈式數據庫主備場景,或對數據一致性有嚴格要求的場合,比如金融、交易之類的場景。

2.注重可用性,比如異步複製技術;

當用戶請求更新數據時,主數據庫處理完請求後可直接給用戶響應,而不必等待備數據庫完成同步。保證了系統的可用性,但犧牲了數據的一致性。
主備數據庫同步的流程:
(1)主數據庫完成寫操作後,可直接給用戶回覆執行成功,將寫操作寫入 binary log 中,binary log 中記錄着主數據庫執行的所有更新操作,以便備數據庫獲取更新信息。
(2)備數據庫啓動一個 IO 線程專門讀取 binary log 中的內容然後寫入 relay log 中。
(3)備數據庫啓動一個 SQL 線程會定時檢查 relay log 裏的內容,如發現有新內容則會立即在備數據庫中執行,從而實現數據的一致。
場景:購物網站等面向實際用戶

3.介於前兩者之間的,比如半同步複製技術;

用戶發出寫請求後,主數據庫會執行寫操作,並給備數據庫發送同步請求,但主數據庫不用等待所有備數據庫回覆數據同步成功便可響應用戶。
兩種模式:
(1)當主數據庫收到多個備數據庫中的某一個回覆數據同步成功後,便可給用戶響應寫操作完成;
(2)主數據庫等超過一半節點(包括主數據庫)回覆數據更新成功後,再給用戶響應寫操作成功;

解決不一致情況
Raft 算法,主數據庫等超過一半節點(包括主數據庫)回覆數據更新成功後,再給用戶響應寫操作成功。當有 Follower 節點的數據與 Leader 節點數據不一致時,採用強制複製策略來解決不一致情況
當產生衝突時,以 Leader 節點爲準。Leader 節點上會對比與自己數據不一致的 Follower 節點所存儲的信息,找到兩者最後達成一致的地方,然後強制將這個地方之後的數據複製到該 Follower 節點上。


 

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