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