1. 程式人生 > 其它 >SpringCloud升級之路2020.0.x版-26.OpenFeign的元件

SpringCloud升級之路2020.0.x版-26.OpenFeign的元件

在redis中使用者可以通過slaveof命令 讓一個伺服器成為另一個伺服器的從伺服器

舊版複製功能

舊版Redis複製功能分為兩步:同步和命令傳播

同步

1.從伺服器向主伺服器傳送sync命令
2.主伺服器收到sync命令執行BGSAVE命令,在後臺生成一個RDB檔案,並使用一個緩衝區記錄從現在開始執行的所有寫命令
3.當主伺服器的BGSAVE命令執行完畢後,主伺服器會將BGSAVE命令生成的RDB檔案傳送給從伺服器,從伺服器接受並載入這個RDB檔案,並將自己的資料庫狀態更新至主伺服器傳送BGSAVE指令時的狀態
4.主伺服器傳送緩衝區的寫命令給從伺服器,從伺服器執行這些寫命令,將自己的伺服器狀態更新至主伺服器現在的狀態

命令傳播

在同步後,主伺服器和從伺服器的狀態保持一致。

之後,主伺服器每次執行修改命令,會將命令傳送給從伺服器。

舊版複製功能的缺陷

在Redis2.8之前,當處於命令傳播階段的從伺服器與主伺服器斷線後,重連需要重新執行同步命令。

這浪費了大量的時間,實際上從伺服器只需要執行從斷線到重連過程中的主伺服器執行過的修改命令即可。

於是有個新版複製功能

新版複製功能

新版複製功能與舊版複製功能主要在命令傳播時的斷線重連階段不同。

新版複製功能使用PSYNC代替SYNC

當斷線重連後,PSYNC採用部分重同步

在部分重同步中,主伺服器和從伺服器會分別維護一個複製偏移量,每當主伺服器傳送N個位元組給重伺服器,就將自己的複製偏移量+N,每當從伺服器收到N個位元組的資料,就將自己的複製偏移量+N。

當斷線重連後,只需要根據主從伺服器的複製偏移量就知道雙方差多少位元組的命令。

同時主伺服器會維持一個複製積壓緩衝區(固定長度的佇列),當主伺服器執行命令傳播時,它會同時將命令寫入複製積壓緩衝區,主伺服器會根據主從伺服器之間的複製偏移量差值從複製擠壓緩衝區中傳送命令(需要注意,如果主從伺服器複製偏移量差的比較多,而複製積壓緩衝區沒有存那麼多的命令,還是會執行同步操作)

我有一壺酒 足以慰風塵 盡傾江海里 贈飲天下人