#5 興趣使然地學習分散式系統(0)
Distributed System,分散式系統聽起來非常炫,但實際上沒有那麼遙不可及,我們生活中的很多服務(幾乎是所有),都奠基於它。很可惜的是要學到跟這有關的知識,大多數都是靠實戰或是啃 Paper,很少像這本書一樣能夠從 System Design 的角度來深入淺出地介紹。
為什麼要了解分散式系統?
所謂分散式系統,其實就是把一台電腦上能做的事情,分到很多台電腦上面共同完成。
聽起來很簡單?
回想一下大學時候的分組報告,把一個報告分配給很多人一起做,可能會遇到有人偷懶、分工不均、組員失戀,或其他組員根本就人間蒸發只剩你一人。
你就知道要設計出一個好的系統,是一項需要實務和理論才能完成的艱難任務了。
現在很流行的 Cloud service 就是奠基於 Distributed systems,甚至許多業界流行的東西也成為大家共同遵守的標準,那我們是不知道可以只用雲服務就好呢?為什麼還要從頭學起?
要知道,當你要從頭設計起一個能承受多人用的系統時,如果你腦袋裡沒有一些既有的知識,那一定會不知道從何開始,或者就是隨便選一個服務。
接著,你會花很長的時間在還那些你一開始沒有想到的爛帳。
與其這樣,不如就投資一點時間在分散式系統上。就算到時候爆炸了,你也比較知道該怎麼樣求救。(真的啦 XD)
更重要的是,你明白分散式系統到底在解決什麼問題以後,你就不是一個被動的使用者,而是主動去了解底下發生什麼事情的優質消費者,理論上能做出更好的選擇。
講的功利一點的話,懂得系統設計對於面試也是一件有幫助的事情,$$ 也是很重要,你知道的。
架構
不是軟體的架構,而是這本書的架構。
Chapter 1: Basic
從 High level 的角度來看分散式系統,同時瞭解一些重要的「術語」。學習這些術語不是為了把事情變複雜,而是方便溝通、找資料。
另外也解釋了這些東西 High level 的目標是什麼,舉例像是:scalability, availability、performance、latency 以及 fault tolerance。當然也會提到達到這些目標有多困難。
最後,這章最重要的一點是簡單地告訴你對應這些問題的 model。
model 指的就是對應這些問題的抽象化存在,你不用去考慮什麼網路、作業系統、資料庫⋯⋯等等。
Chapter 2: Up and down the level of abstraction
更深一層的告訴你為什麼有些事情達不到,會講到大名鼎鼎的 CAP 理論,以及 FLP Impossibility。
知道了目前在理論上會遇到哪些限制以後,會再進一步去挖掘更多 consistency models。
Chapter 3: Time and Order
前面說到我們把一台電腦可以做完的事情分配給多台電腦做,但不同的機器可能會在不同的時間崩潰,或是第一件事情還沒做完,第二件事情就跟著來了,這些都是棘手的問題。
這一章就是要介紹我們如何 model 時間跟順序,會介紹各種 Clock(包含但不限於 Vector clock, failure detectors)。
Chapter 4: Replication — Preventing Divergence
Chapter 5: Replication — Accepting Divergence
這兩章可以擺在一起介紹,就是處理 Replication 啦!
因為都放在同一台電腦怕意外發生,所以在分散式系統中我們會把資料放在很多台不同的電腦上,這,就是 Replication。
放上去沒有問題,但是當要做異動時,別的先不說,資料的一致性就會是一個馬上噴你滿臉的問題了。
本書的最後兩章介紹兩種不一樣的角度來處理這個問題,第一個是預防不一致的發生,第二則是當發生後要怎樣子去做「Reconcilliation」(有點像是調解委員會,但是在分散式系統裡的有用非常多)。
結論
我想除非已經是對於架構非常熟稔的人(在台灣這種經驗真的是可遇不可求啊!),否則像我這樣算是半程式麻瓜的人在讀這本書時都會獲得一些很不錯的啟發。
接下來會慢慢把這本書啃完,如果看完對這本書有興趣的話,歡迎點下方的連結直接去看整本書。
這應該算是讀書筆記(?),不過這本書是免費公開在網路上,並且每一個連結都能夠分享。最重要的是,寫這些東西本來就是給自己看的 XD,有其他人看得懂也是剛好而已,所以還是決定將它放在日報裡面
接續下一篇:興趣使然地學習分散式系統(1)