iT邦幫忙

2021 iThome 鐵人賽

DAY 8
1
AI & Data

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

Trouble with Distributed Systems (1)

之前的文章我們大多都是在談系統 出錯 了怎麼辦,諸如 節點掛掉怎麼做做副本 (replication) 時 Lag 怎麼辦 等等等等;一切就只是希望讓工程師們意識到,邊界條件(鬼故事)在現實世界中是會發生的,先了解,才能更好的處理它們。

分散式系統會因為各種原因出錯,所以從這章開始,是時候要把鬼故事升級成魔王故事了,我們將談談更多可能會發生的錯誤,用最大力氣假設系統若會故障就真的會故障,就像投資時要全盤考量各種風險那樣(但有些人沒在管)。

接下來我們會有最經典的網路問題、時鐘精度問題,最後就是在分散式系統中最有趣的,有關節點狀態的真與假,但首先先談談部份故障為何吧!

故障和部份故障 (Faults and Partial Failures)

當你寫一段程式在單一台電腦上,它的結果很好預測,成功執行或失敗;一個執行在獨立電腦的好軟體沒有道理會起肖(除非你看太多奇怪東西中毒了),當你的硬體正常運作時,相同的操作會得到相同的結果,但當你硬體發生問題時(例如記憶體損壞、某條排線鬆脫等等),其結果就是整個作業系統故障(例如 windows 的藍色當機畫面),一個好軟體在獨立電腦上執行的結果,要嘛正常,要嘛故障,沒有中間的。

當你的軟體開始執行在多台電腦上時,用網路連接,這情況就不一樣了,我們並不是在一個理想化系統模型中運行;在分散式系統中,總是有很多意想不到的方式出錯(例如有人不小心把某一機櫃的網路線拔掉了),稱為 部份故障 (partial failure),部份故障是不確定的。

雲端運算和超級運算 (Cloud Computing and Supercomputing)

這裡有幾個關於如何建立大規模運算系統的哲學:

  • 一邊是有著高效能計算 (High-performance computing) 能力的超級電腦們,它們有上千顆 CPU 用在需要密集科學資料運算的任務上,如天氣預測或分子動力計算。
  • 而另一邊是雲到極致的雲端計算,透過網路串連。
  • 傳統企業用資料中心落在上面 2 個極端之間。

這些哲學處理故障的方式很不一樣,超級電腦在任務中會時不時地建立狀態檢查點,當某台節點故障,通常的解法就是停止整個叢集,修復節點,然後從檢查點繼續計算,就像獨立電腦當機的意思一樣。

而雲端運算的分散式系統就必須要考量部份故障的可能性,軟體必須要有容錯機制,我們需要從不可靠的元件中建立可靠的系統 (2020 Day 2 - Reliable),儘管你的系統只跑在幾個節點中也是一樣。


明天就要開始進入最經典的網路問題啦!


上一篇
Transactions (5-2) - Serializability Isolation - SSI & Summary
下一篇
Trouble with Distributed Systems (2) - Unreliable Networks
系列文
資料工程師修煉之路 Part II30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言