Open kylemocode opened 2 years ago
(這一篇資訊量好多......待更新)
🥲 不好意思有點多...我再慢慢修改收斂...
組成
如何設置新從庫?
基於語句複製
傳輸預寫式日誌(WAL)
邏輯日誌複製(基於行)
基於觸發器日誌
從庫失效:追趕日誌
主庫失效:故障切换 failover
問題 : 以為自己沒更新或操作失敗,但其實有
解法 : 使用採用讀己之寫一致性(read-your-writes consistency)
作法
單點複製的問題
什麼是多主複製?
應用場景
確保單一主庫寫入
單一用戶單一數據中心
使用鎖定編輯
最後寫入勝利
自定義解決邏輯
自動解決衝突
用來描述寫入操作從一個節點傳播到另一個節點的通信路徑。如果你有兩個主庫
公式說明
常見公式
可用性的判斷
侷限性
寬鬆法定移交
Replication 的困難之處在於處理複製資料的 變更(change) 三種主要的 Replication Algo
複製要點:
主要的三種方法:
有 Leader 的主要寫入機器常稱為 Master, 而 Follower 則是 Slave, 所以才會常聽到 Master-Slave, Dual Master ... etc.
同步複製和非同步複製是設計系統很重要的議題,常見的問題及是在分散式設計下的 FB 要怎麼在最短的時間內把 Post 散步到世界上的 Read-Slave 中。
然後設定 Master 完全一樣的 Replica 通常會用 DB Snapshot 的方式實作,每次快照會去 Catch up 到最新的進度。而在失效處理的方面上,從庫會比較簡單的多,就從當機到啟動那段時間的進度需要追趕,不過如果是主庫死掉那就會讓整個系統爛掉,所以才衍生出 Dual Master 這種架構,這時候另一台的 Master 幾乎就是 100% replica of Master 而且通常只提供 Read-only 或是什麼服務都不提供。
為了達到 【寫後讀一致性(read-after-write consistency)】,比較簡單的就是使用者自己的檔案都從主庫讀取,但是如果大部分的 Read 請求都是從瀏覽自己資料,就是重新設計一下規則或是 Request routing ... etc. 另外要避免 【時光倒流】的方法則是對使用者讀的 Slave 進行雜湊分區,避免在多次讀取中讀到很多不一樣的 Slave。
PS. 無主複製幾乎看不懂是正常的嗎XD