weblab-tw / ddia-study-group

Designing Data-Intensive Applications Study Group
36 stars 5 forks source link

第五章節:學習要點 #53

Open kylemocode opened 2 years ago

kylemocode commented 2 years ago
at7211 commented 2 years ago

(這一篇資訊量好多......待更新)

jxiu0129 commented 2 years ago
  1. 現有的分散式系統,DB 間的複製主流分法有三種方式
    • 單主
    • 多主
    • 無主
  2. 每種複製方式都有延遲問題,此書提到的例子
    • 讀己之寫
    • 單調讀
    • 一致字 prefix
  3. 無主複製的一些重點
    • 法定人數一制性
    • 寬鬆的法定人數
    • 提示移交
0x171-0 commented 2 years ago

🥲 不好意思有點多...我再慢慢修改收斂...

5.1 領導者與追隨者

為什麼需要複製?

複製副本的難點

複製的架構與配置

分布式數據庫:三種架構

分布式數據庫:3 種複製的方式

節點間同步的方法

基於領導者複製 leader-based replication

複製日誌 replication log

步驟

類型

節點故障的應對方法


5.2 複製延遲的問題 & 解法

讀己之寫 read-your-writes

單調讀 monotonic reads

一致性前綴


5-3. 多主複製

衝突&處理衝突的方法

什麼是衝突?

檢測方法

避免方法

收斂方法

複製拓墣 replication topology

用來描述寫入操作從一個節點傳播到另一個節點的通信路徑。如果你有兩個主庫

種類

作法


5-4. 無主複製

What is 無主複製?

面對節點故障的方法

故障節點重新上線後如何趕上?

操作成功判斷的公式

監控陳舊度

AK4codee commented 2 years ago

複製資料的好處

如何確保資料完整複製到副本上

處理寫入衝突

Parkerhiphop commented 2 years ago

WHY? 為什麼要分佈到多台機器上?

  1. 可伸縮性 伸縮可以接受讀請求的機器數量。
    • 資料量
    • 讀取負載
    • 寫入負載
  2. 容錯 / 高可用性
    • 一臺故障時,另一臺可以接管。
  3. 延遲 得資料與使用者在地理上接近
    • 在全球範圍部署多個伺服器
    • 每個使用者可以從地理上最近的資料中心獲取服務
    • 避免等待網路資料包穿越半個世界

      HOW? 使用 Replication 在多台機器上保留相同資料的副本

      Replication 的困難之處在於處理複製資料的 變更(change) 三種主要的 Replication Algo

  4. Single Leader
  5. Multiple Leader
  6. Leaderless
    • 比較
      1. Single Leader 實作起來單純,不用處理 node 的衝突
      2. Mulitple & Leaderless 則能更好地處理「Faulty Node」、「Network Interruption」、「Latency Spikes」
        • 代價:很難推理、一致性很弱

          Replication 延遲時的一致性模型

  7. Read-after-write consistency
    • 使用者應該總是能看到自己提交的資料
  8. Monotonic Reads
    • 使用者在看到某個時間點的資料後
      • 他們不應該再看到該資料在更早時間點的情況
  9. Consistent Prefix Reads
    • 使用者應該看到資料處於一種具有因果意義的狀態
      • 如,按正確的順序看到一個問題和對應的回答
JimmyFUFU commented 2 years ago
samwu4166 commented 2 years ago

複製要點:

主要的三種方法:

  1. Leaderless
  2. Multi Leader
  3. Single Leader

有 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。

taco0929 commented 2 years ago
kkshyu commented 2 years ago
  1. 不要隨便挑戰 multi-master
  2. 離線操作問題等價於多主複製問題,協同操作問題則是等價於單主同步操作問題
  3. 盡可能讓應用層無須擔心資料庫複製問題

PS. 無主複製幾乎看不懂是正常的嗎XD