分散式與網路作業系統

分散式作業系統(distributed operating system)

想像一間很大的廚房,二十位廚師、二十個爐台、二十台冰箱散布在整棟建築裡,全都用線路連在一起。現在想像你走過去,下一張訂單,然後它就完成了——你完全不必知道是哪位廚師切的洋蔥、哪台冰箱放的雞蛋。分散式作業系統就是想讓一整群以網路相連、彼此獨立的電腦,感覺起來像一台單一的機器。你登入一次、執行一支程式、開啟一個檔案,系統便默默決定究竟由哪台實體機器真正做事、資料究竟住在哪裡。

它的核心承諾是「透明性」:使用者(理想上連程式設計師也是)不必在乎東西在哪裡。位置透明性是指你替檔案或服務命名時,不必知道是哪個節點持有它;遷移透明性是指一個執行中的工作可以被搬到比較不忙的機器上,而使用者毫無察覺;複製透明性是指資料為了安全可以存在好幾份副本,但你看到的就只有一份。為了達成這些,作業系統把自己的各個部分——排程、檔案系統、命名、通訊——分散到許多互相合作的節點上,而它們是靠互相傳訊息來合作的,因為它們既不共用記憶體、也不共用一個中央時鐘。

為什麼重要,以及誠實的提醒:真正的分散式作業系統其實很難做、也很罕見。你實際用到的大多數系統都比這個更鬆散——它們是網路作業系統(你明確登入 A 機器,再把檔案複製到 B 機器),上面再黏一層中介軟體。要做出「整體看起來像一台機器」這個完整幻覺之所以這麼難,原因就和整個領域之所以難一樣:沒有共用記憶體、沒有共用時鐘,訊息會花時間、也可能遺失,而且部分失效(有些節點當掉、其他還在跑)是常態,而非例外。

在一個理想的分散式作業系統上,你輸入一個指令去跑一項繁重的運算。系統不會告訴你,它挑了房間另一頭一台空閒的機器,把你的程式送過去、跑完、再把結果交回來——對你而言,這看起來就和在本機執行一模一樣。對照之下,在網路作業系統上,你得先手動 ssh 進那台機器,再自己把檔案複製過去。

理想:許多機器,看起來卻像一台電腦。實務上很少有系統真正完全做到。

別把分散式作業系統和雲端運算或虛擬化搞混:後兩者是在共用硬體上跑許多互相隔離的機器,而分散式作業系統則是要讓許多真實的機器看起來像一台。

又稱
DOS (in this sense)分散式作業系統