分散式系統基礎

thelovelybugfly發表於2018-09-04

一: 什麼是分散式系統

《分散式系統原理與範型》一書中這樣定義分散式系統:“ 分散式系統是若干獨立計算機的集合,這些計算機對於使用者來說就像是單個相關係統”。

 歸納來說就是 : 硬體獨立,軟體統一 。

什麼是硬體獨立 ?

所謂硬體獨立,是指計算機機器本身是獨立的,一個大型的分散式系統,會由若干臺計算機來組成系統的基礎設施。

軟體統一:

對於使用者來說,使用者就像是跟單個系統打交道,就好比我們每天上網看視訊,視屏網站就是一個系統軟體,其背後是如何運作的,如何部署的,

部署了幾臺伺服器,每臺伺服器分工是什麼,這些對使用者來說是透明的,不可見的。使用者只關心今天網站提供什麼節目,視屏是否流暢等。

二 :如何設計分散式系統 

設計分散式系統本質 就是 如何 合理的將一個系統拆分成多個子系統並且部署到不同的機器上。 所以,第一就要考慮 如何合理的將系統拆分,

拆分後的各個子系統不可能孤立的存在,必然要通過網路進行連線互動。 所以如何通訊,顯得尤為重要。在通訊中還要識別敵我,防止資訊篡改和攔截。

這就涉及到安全問題了。分散式系統要適應不斷增長的業務需求,就需要考慮其擴充套件性。還要保證可靠性和資料的一致性。 概括的說 有這幾個方面: 如何將系統拆分為子系統?

如何規劃子系統間的通訊? 如何考慮通訊過程中的安全? 如何讓子系統擴充套件? 如何保證子系統的可靠性? 如何實現資料的一致性?

三: 分散式系統面臨的一些困難挑戰。

異構性:由於基於不同的網路,作業系統,計算機硬體和程式語言來構造,必須要考慮一種通用的網路通訊協議來遮蔽異構系統之間的差異。一般交由中介軟體來處理。

缺乏全球時鐘:交換訊息協調動作 需要經常依賴於程式動作發生的時間共識。

一致性:資料被分散或複製到不同的機器上,如何保證各臺主機之間的資料一致性。

故障獨立性: 允許出現故障,而不影響整個系統的正常使用。

併發: 每個資源必須被設計成在併發環境中是安全的。

透明性: 分散式系統中的任何元件,或者主機的升級,遷移,對於使用者來說都是透明的,不可見的。

開放性: 分散式系統由不同的程式設計師來編寫不同的元件,最終整合為一個系統,那麼元件所釋出的介面必須遵守一定的規範且能夠被互相理解。

安全性:加密和拒絕服務攻擊。 可擴充套件性: 系統要隨著業務量的增加,相應的系統也必須能擴充套件來提供對應的服務。

執行緒: 概不贅述。 通訊: 網路基礎知識。

I/O模型: 

 同步和非同步

同步是指使用者執行緒發起I/O請求之後需要等待或者輪詢核心I/O 操作完成後才能繼續進行執行。

非同步是指使用者發起I/O請求後任然繼續執行,當核心I/O操作完成後悔通知使用者執行緒或者呼叫使用者執行緒註冊的回撥函式。

 

相關文章