一: 什麼是分散式系統 《分散式系統原理與範型》一書中這樣定義分散式系統:“ 分散式系統是若幹獨立電腦的集合,這些電腦對於用戶來說就像是單個相關係統”。 歸納來說就是 : 硬體獨立,軟體統一 。 什麼是硬體獨立 ? 所謂硬體獨立,是指電腦機器本身是獨立的,一個大型的分散式系統,會由若幹台電腦 ...
一: 什麼是分散式系統
《分散式系統原理與範型》一書中這樣定義分散式系統:“ 分散式系統是若幹獨立電腦的集合,這些電腦對於用戶來說就像是單個相關係統”。
歸納來說就是 : 硬體獨立,軟體統一 。
什麼是硬體獨立 ?
所謂硬體獨立,是指電腦機器本身是獨立的,一個大型的分散式系統,會由若幹台電腦來組成系統的基礎設施。
軟體統一:
對於用戶來說,用戶就像是跟單個系統打交道,就好比我們每天上網看視頻,視屏網站就是一個系統軟體,其背後是如何運作的,如何部署的,
部署了幾台伺服器,每台伺服器分工是什麼,這些對用戶來說是透明的,不可見的。用戶只關心今天網站提供什麼節目,視屏是否流暢等。
二 :如何設計分散式系統
設計分散式系統本質 就是 如何 合理的將一個系統拆分成多個子系統並且部署到不同的機器上。 所以,第一就要考慮 如何合理的將系統拆分,
拆分後的各個子系統不可能孤立的存在,必然要通過網路進行連接交互。 所以如何通信,顯得尤為重要。在通信中還要識別敵我,防止信息篡改和攔截。
這就涉及到安全問題了。分散式系統要適應不斷增長的業務需求,就需要考慮其擴展性。還要保證可靠性和數據的一致性。 概括的說 有這幾個方面: 如何將系統拆分為子系統?
如何規划子系統間的通信? 如何考慮通信過程中的安全? 如何讓子系統擴展? 如何保證子系統的可靠性? 如何實現數據的一致性?
三: 分散式系統面臨的一些困難挑戰。
異構性:由於基於不同的網路,操作系統,電腦硬體和編程語言來構造,必須要考慮一種通用的網路通信協議來屏蔽異構系統之間的差異。一般交由中間件來處理。
缺乏全球時鐘:交換消息協調動作 需要經常依賴於程式動作發生的時間共識。
一致性:數據被分散或複製到不同的機器上,如何保證各台主機之間的數據一致性。
故障獨立性: 允許出現故障,而不影響整個系統的正常使用。
併發: 每個資源必須被設計成在併發環境中是安全的。
透明性: 分散式系統中的任何組件,或者主機的升級,遷移,對於用戶來說都是透明的,不可見的。
開放性: 分散式系統由不同的程式員來編寫不同的組件,最終集成為一個系統,那麼組件所發佈的介面必須遵守一定的規範且能夠被互相理解。
安全性:加密和拒絕服務攻擊。 可擴展性: 系統要隨著業務量的增加,相應的系統也必須能擴展來提供對應的服務。
線程: 概不贅述。 通信: 網路基礎知識。
I/O模型:
同步和非同步
同步是指用戶線程發起I/O請求之後需要等待或者輪詢內核I/O 操作完成後才能繼續進行執行。
非同步是指用戶發起I/O請求後任然繼續執行,當內核I/O操作完成後悔通知用戶線程或者調用用戶線程註冊的回調函數。