iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 5
1

CAP理論

  1. Consistency一致性 : 所有節點上的數據都能隨時保持著同步的狀態
  2. Availability可用性 : 每次請求都能得到一個回應, 無論回應成功或是失敗
  3. Partition-tolerance分區容錯 : 系統因網路問題或某節點發生故障, 導致系統被切分成數個子系統且彼此無法通訊溝通時;或是任意數量的訊息在節點之間遺失, 系統還是能提供服務. 畢竟網路並非100%可靠.

CAP理論主要是說, 在分散式架構下, 只要涉及讀寫操作時, 上面三個性質, 最多保證兩個滿足, 另一個最多盡量滿足, 又或是被犧牲.

C+A

滿足了一致性+高可用, 但就犧牲了分區容錯.
But!!! 分散式架構下, 集群的節點間不可能保證網路絕對沒問題, 所以P基本上是必須考慮的.

C+P

滿足了資料的一致性跟分區容錯. 如果節點發生錯誤, 就會導致該系統某些請求會失敗.

A+P

滿足了高可用性和分區容錯, 但資料的強一致性會犧牲掉, 但能夠確保資料的最終一致性.
大部分的NoSQL都選擇此策略來實現叢集架構.

Strong Consistency / Weak Consistency / Eventually Consistency

NWR模型

CAP理論中的Consistency一致性, 能靠NWR模型知道這系統是強一致性還是弱一致性
N : 表示N個replica(副本); 資料被複製到多少個節點
R : 表示一次讀取操作中, 成功讀取操作的最小節點數(就是要讀幾個replica, 然後從中返回最新版本的資料)
W : 成功寫入操作的最小節點數(就是要完成幾個replica的同步才叫寫入完成)

NWR模型與CAP

  1. C+A 滿足了一致性+高可用, 但就犧牲了分區容錯; 讀寫均衡一致.
    副本數量就是1, 就沒得擴充.
  2. C+P 滿足了資料的一致性跟分區容錯; 讀多,寫少. W=N的配置
  3. A+P 滿足了高可用性和分區容錯; 寫多,讀少.
    W=1, 寫入一個副本(單機也算)就算成功, 其他副本就慢慢複製.

Quorum法定數量機制

用來設定每次執行更新操作時要達成的consistency level
也是用來保證資料冗餘與最終一致性的投票演算法.
有幾種一致性級別, 這些級別是能依靠NWR模型來定義.
概念類似於鴿籠原理

  1. Any : master收到更新命令後, 就寫入log, 快速回結果給client; MySQL異步複製就是這機制.
  2. All : master收到更新命令後, 就寫入log, 並且等待所有的replica都同步了, 才返回結果.
  3. One : 有一個replica返回ack給master後, 就返回結果; 上篇提的rpl_semi_sync_master_wait_for_slave_count預設就是1個
  4. Quorum : 設定需要收到幾個ack訊號來確保同步的完成; 上篇提的rpl_semi_sync_master_wait_for_slave_count設定成>1的數字

Strong Consistency 強一致性

如果資料庫做主從抄寫, 當更新請求發出到主庫時, 客戶端需要等待主庫複製到從庫完成, 之後所有查詢該紀錄的請求都會拿到最新的資料, 那這情境就是強一致性的保證.
RDBMS能確保這件事情都是依賴對資料加上Lock實現的, 但吞吐量就會下降.

W+R > N 時 == 強一致性

3個副本節點時, 寫入要求至少2個有ack, 讀取也是任意讀取2節點,挑選版本最新的資料.
這樣寫入時過半節點都能確保有更新成功, 讀取節點也過半, 一定會撈到最新版本的資料.
這樣就能確保系統在讀取時都能拿到最新的資料.

Weak Consistency

不同replica上的資料有新有舊.
W + R <= N == Weak consistency
上面為例, 寫入要求2個ack, 讀取只讀取1個節點; W+R=3 <= 3, 有可能還是讀到舊資料.
寫入要求1個ack, 讀取只讀取2個節點; 還是可能讀到舊資料.

讀寫均衡

NWR模型中;
W要是越大, TPS就越低.
R要是越大, QPS就越低.
為了保持讀寫均衡, 通常的配置係數是 : W=R=Q, Q=(N/2)+1 (i.e. Quorum > 副本數量/2)


上一篇
微服務瞎談(4) 單機ACID事務 & MySQL主從同步
下一篇
微服務瞎談(6) BASE理論 & Transactional Outbox Pattern
系列文
服務開發雜談33

尚未有邦友留言

立即登入留言