分布式資料復制
我們在進行分布式資料存盤設計時,通常會考慮對資料進行備份,以提高資料的可用性和可靠性,“資料復制技術”就是實作資料備份的關鍵技術,
什么是資料復制技術?
在分布式資料庫系統中,通常會設定主備資料庫,當主資料庫出現故障時,備資料庫可以替代主資料庫進行后續的作業,從而保證業務的正常運行,
資料復制技術就是如何讓主備資料庫保持資料一致的技術,
資料復制原理和應用
資料的一致性,是指不同節點上的資料要保持一致,對于分布式存盤系統中的資料復制技術來講,也需要在一致性和可用性之間做出權衡,
從一致性和可用性來看,資料復制技術一般分為三類:
- 比較注重一致性,例如同步復制技術
- 比較注重可用性,例如異步復制技術
- 平衡一致性和可用性,例如半同步復制技術
同步復制技術
同步復制技術是指當用戶請求更新資料時,主資料庫必須要同步到備資料庫之后才可以給用戶回傳結果,即如果主資料庫沒有同步到備資料庫,用戶的更新操作會一直阻塞,
這種方式保證了資料的強一致性,但是犧牲了系統的可用性,
在一個分布式資料庫系統中,有兩個節點,分別作為主節點和備節點,通常情況下,兩個節點都可以接收用戶讀請求,然后將本節點的資料及時回傳給用戶,也就是說讀請求回應比較快,如果用戶發送的事寫請求,寫操作必須由主節點進行,即使用戶將寫請求發送到備節點,備節點也會將請求轉發給主節點,因此寫請求要比讀請求慢一些,
同步復制技術要求主資料庫等待所有備資料庫都操作成功才可以回應用戶,性能不是很好,影響用戶體驗,因此同步復制技術適用于分布式資料庫主備場景或者對資料一致性有嚴格要求的場合,
異步復制技術
異步復制技術是指當用戶請求更新資料時,主資料庫處理完請求后可以直接給用戶回應,而不必等到備資料庫完成同步,即備資料庫會異步進行資料同步,用戶的更新操作不會因為備資料庫未完成資料同步而導致阻塞,
這種方式保證了系統的可用性,但是犧牲了資料的一致性,
分布式資料庫主備模式場景下,如果對資料一致性要求不高,也可以采用異步復制方法,
MySQL集群默認采用的資料復制模式就是異步復制技術,主要流程如下:
- 主資料庫完成寫操作后,可以直接給用戶回復成功,將寫操作寫入binary log中,binary log中記錄著主資料庫執行的所有更新操作,以便備資料庫獲取更新資訊,
- 備資料庫啟動一個IO執行緒專門讀取binary log中的內容然后寫入relay log中,
- 備資料庫啟動一個SQL執行緒會定時檢查relay log中的內容,如果發現有新內容則會立即在備資料庫中執行,從而實作資料的一致,
異步復制技術一般會應用在對用戶請求回應時延要求很高的場景,
半同步復制技術
半同步復制技術的核心是用戶發出寫請求后,主資料庫會執行寫操作,并給備資料庫發送同步請求,但主資料庫不用等待所有備份資料庫回復資料同步成功便可以回應用戶,也就是說主資料庫可以等待一部分備資料庫同步完成后回應用戶寫操作執行成功,
半同步復制技術通常由兩種方式:
- 當主資料庫收到多個備資料庫中某一個回復資料同步成功后,便可以給用戶回應寫操作完成,
- 當主資料庫收到超過一半節點回復資料更新成功后,再給用戶回應寫操作成功,
我們之前談過的ZooKeeper集群符合CP特征,它采用的資料復制技術就是上述第二種半同步復制方案,在ZooKeeper集群中,寫請求必須由Leader節點進行處理,每次寫請求,Leader會給Follower發Proposal,等待多數節點同意后寫操作才可成功,通過這樣的方式,ZooKeeper實作了一致性,
資料復制技術選型
多數的分布式存盤系統可以通過配置來選擇不同的資料復制技術,例如
- MySQL的資料庫集群,支持全同步復制、異步復制和半同步復制三種模式,
- Oracle在資料復制方面提供了最大保護模式(半同步復制技術的第一種方式)、最大性能模式(異步復制技術)和最大可用性模式(平時采用最大保護模式,主備發生網路故障時采用最大性能模式,這樣在一致性和可用性之間做了權衡),
三種不同的資料復制技術的詳細比較如下,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545084.html
標籤:Java
