分布式系統介紹
來自: http://www.cnblogs.com/-10086/p/5179000.html
分布式系統介紹
內容整理來自 <大型網站系統與java中間件>
分布式系統介紹
定義:
- 組件分布在網絡計算機上
-
組件之間僅僅通過消息傳遞來通信并協調行動
分布式系統的意義:
- 升級單機處理能力的性價比
根據摩爾定律來說,如果把時間固定下來,所需要的處理器性能越高,付出的成本就越高,性價比就越低。而且單機處理器始終有瓶頸 - 單機處理能力存在瓶頸
單機處理器的瓶頸只能通過多機來解決 -
穩定性和可用性如果采用單機系統,如果這臺機器一切正常,則一切ok,如果這臺機器壞了。整個應用就訪問不了了。如果要做容災備份等方案,就需要考慮分布式系統了。
負載均衡
- 硬件負載均衡
如f5等,大多比較昂貴。 -
軟件負載均衡如lvs,nginx等。免費,可控性強
總結:
1:增加網絡開銷與延遲,不過基本上影響很小,可以不在考慮因素之內
2:負載均衡硬件/軟件出現問題,那么整個網絡都會受到影響,所以需要考慮代理服務器的雙機熱備問題。而且在切換過程中,未完成的請求還是會受到影響。總的來說,是一種非常方便及適用的保證高可用的一種方式。
</div>
- 采用名稱服務的直聯方式的請求調用
同樣是完成一次請求調用,與上面f5/lvs等最大的區別在于請求發起方與請求處理方不經過代理服務器也沒有代理服務器,他們雙方是直接連接的,不過外部有一個“名稱服務”的角色,它的作用是收集與提供請求處理的服務器的地址信息,起到的是一個地址交換的作用,原來在代理(lvs/f5)上做的工作被拆分到了名稱服務和發起請求的機器上了。打個比方,就像以前的114一樣,我們不知道A家的電話號碼,可以打114查一下就知道了。這個名稱服務就是起到了類似的作用。 - 采用規則服務器控制路由的請求調用
與名稱服務的方式很像,只是采用了規則服務器替換名稱服務。也一樣是直聯而不用通過代理服務器。這里的區別主要是規則服務器本身不和請求處理的機器進行交互,只負責把規則提供給發起請求的服務器。
總結:
1.假如這個名稱服務/規則服務器暫時壞掉了,我們也有不少的辦法可以保證請求的正常處理。
2.發起請求方與處理請求方是直連的方式,減少了中間路徑及帶寬的消耗。
3.代碼升級較復雜
</div>
分布式系統難點
- 缺乏全局時鐘
- 面對故障獨立性
單機系統上,如果是機器或者程序的問題,整個程序就不能用了,在分布式環境中,由于分布式系統由多個節點組成,全部壞掉的概率很小很小,但是會經常出現一部分節點/模塊有問題,另一部分正常運行。對于這種現象叫做故障獨立性,必須要找到解決故障獨立性的辦法。 - 單點故障
在整個分布式系統中,如果某個功能只有在某臺單機在支撐,那么這個節點稱為單點,其發生的故障稱為單點故障。我們要在分布式系統中盡量避免出現單點,盡量保證所有的功能都是由集群完成的。如果不能把單機實現為集群。那么解決要做好下面兩點
- 給單點做好備份,能夠在出問題時進行恢復,并且盡量做到自動恢復。降低恢復所有時間
- 降低單點故障影響范圍
下面就是一個單點的例子,當交易數據庫出現故障時,整個系統就會癱瘓。
所以為了解決這個單點的問題,我們可以添加另外一個數據庫,與數據庫一保持相同的數據。

4.事務
單機的事務很方便的就能控制,而在分布式環境中,事務是比較重要也比較難解決的一個問題。主要是通過兩段提交(2pc)/最終一致/BASE/CAP/Paxos等來實現的。關于這些算法,可以看一下下面的這些連接:
分布式一致性算法:
http://www.hollischuang.com/archives/693
http://www.hollischuang.com/archives/663
兩階段提交協議/三階段提交協議: http://www.hollischuang.com/archives/681
本文由用戶 lgh01b5d32ds 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!