[redis讀書筆記] 第三部分 多機資料庫的實現 複製

來源:互聯網
上載者:User

標籤:沒有   logs   com   讀書筆記   需要   全域   主從   接收   時間   

複製即主伺服器向從伺服器的資料同步,REDIS的實現具有參考意義,尤其對於有主從同步需求,資料量不是特別大,可以用記憶體儲存,其中巧妙之處在於 offset和緩衝區的配對使用,讓主伺服器能夠很快的知道應該同步哪些資料,即使面對多個從伺服器可以做到處理流程一樣。

書中分析了老版本和新版本在複製過程中,斷鏈發生時的不同處理,來描述複製的過程。

老版本複製主要2個方式:

1. 從伺服器主動發送SYNC給主伺服器,主伺服器啟動BGSAVE,產生一個DB檔案,傳給從伺服器,從伺服器載入DB檔案,然後主伺服器將這個過程中接收到的寫命令也同步給從伺服器,從伺服器也執行這些寫命令,同步結束。

   SYNC的過程是非常耗費資源的,CPU,記憶體,頻寬都會在不同時期被佔用

2. 主從伺服器DB相同,主伺服器執行了寫命令,主動同步給從伺服器,稱之為命令傳播

老版本的bug:上面第2點,假如主伺服器和從伺服器斷鏈,主伺服器無法感知,依然進行命令傳播,將主伺服器上的寫命令傳送給從伺服器,而從伺服器接收不到,最後建連後資料就不一致了。

當然,建鏈後可以直接來一次SYNC,不過這樣過於耗費資源。

新版本:

有了PSYNC命令,斷鏈後,等到建鏈,從伺服器發送PSYNC給主伺服器,主伺服器會將斷鏈時間段的所有寫命令同步給從伺服器。

中+CONTINUE回複標識開始部分同步。

二 部分複製的實現細節:

1. 首先,主從伺服器都會記下同步的位元組數,所謂複製位移量,主伺服器上記錄 同步多少位元組給從伺服器,從伺服器記錄接收到主伺服器同步多少個位元組,15-7中同步了10086位元組的資料

如果斷鏈後恢複,從伺服器發送PSYNC給主伺服器,帶上本地的複製位移量,主伺服器比較後發現和本地的不一樣,就意味著主從資料不一致,需要進行資料同步。

2. 主服務發現本地的offset和從伺服器的offset不一致,意味著要進行資料同步,怎麼同步呢?

主伺服器中會有一個固定長度(1MB)的FIFO的複製積壓緩衝區,每個複製到從伺服器的位元組,都會儲存在這個緩衝區中,每個位元組都對應到一個offset.

當從伺服器發送PSYNC,帶來自己的offset,主伺服器會在複製積壓緩衝區中尋找,如果offset+1依然在緩衝區中,沒有被擠壓出隊列(固定長度FIFO,儲存最新的命令,如果隊列滿,最老的命令會被擠壓出隊列),就可以執行部分複製。否則就要進行全部複製,即SYNC

 

 

2.伺服器運行ID,從伺服器會儲存主伺服器的運行ID,此ID是全域唯一的。如果斷鏈再建聯,主伺服器發現從伺服器發來的主伺服器運行ID(伴隨PSYNC命令)和自己的不一樣,那麼就要進行完整的複製,如果ID一致,可以選擇進行部分複製。

 

 

[redis讀書筆記] 第三部分 多機資料庫的實現 複製

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.