iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
AI & Data

資料工程師修煉之路 Part II系列 第 13

Trouble with Distributed Systems (4-2) - System Model & Summary

Day 12

今天的特別理論和抽象,所以懶得看就跳過吧!

系統模型和現實 (System Model and Reality)

很多演算法是被設計來解決分散式系統問題的,演算法要被設計成可用,就不能太依賴硬體或特定軟體來執行,反而要求我們以某種方式形式化我們期望在系統中發生的故障類型,我們通過定義系統模型來做到這一點,今天就是要用比較抽象的角度來看看這些算法能假設的事物為何。

首先是時序假設 (timing assumptions),我們有 3 個常用的模型:

  • 同步模型 (Synchronous model)
    • 同步模型假設網路延遲、程序暫停和時鐘錯誤都是有界的,意味者你會知道這些最多不會超過一個上限,但這並不符合現實生活裡的系統(網路延遲都不知道會延遲多久了)。
  • 部份同步模型 (Partially synchronous model)
    • 這個模型假設了大多數的系統行為是同步的,但它能接受有時候會有越界 (out of bound) 的事情發生。
  • 非同步模型 (Asynchronous model)
    • 這個模型的演算法不允許時序假設,它甚至沒有時鐘,所以也就沒有 timeout。

再來是節點失敗假設,一樣有 3 類:

  • 崩潰就停故障 (Crash-stop faults)
    • 演算法假設節點只能以一種方法故障,也就是節點崩潰 (crashing), 意味者節點死亡後永遠回不來了。
  • 崩潰恢復故障 (Crash-recovery faults)
    • 這個一樣假設節點會隨時故障,但它或許會在未知時間後恢復,所以它會假設節點是使用穩定的儲存設備(非揮發式硬碟),以便從故障中恢復,也會假設記憶體中的資料會消失。
  • 拜占庭式故障 (Byzantine faults)
    • 節點發瘋了的故障(細節可看 Day 12)。

現實生活中的系統模型大多數都是 部份同步模型+ 崩潰恢復故障,那麼... 究竟分散式演算法怎麼應對這些模型呢?我們會從明天開始探討算法細節。

Summary

Day 8 ~ Day 13 講了分散式系統會遇到的鬼故事,網路會延遲、時鐘不準、程序會暫停等等,都是概念性的東西居多,多一點認識總是能幫助你未來 debug 時能有更多的想像力,從明天開始,終於就要進入比較實戰的部份啦!當 Day 8 ~ Day 13 的鬼故事都發生時,我們該怎麼辦。


上一篇
Trouble with Distributed Systems (4-1) - Truth and Lies
下一篇
Consistency and Consensus (1) - Consistency Guarantees
系列文
資料工程師修煉之路 Part II30

尚未有邦友留言

立即登入留言