分佈式系統在互聯網時代,尤其是大數據時代到來之後,成為了每個程序員的必備技能之一。分佈式系統主要包含了:分佈式網絡,分佈式存儲,分佈式計算,分佈式應用。
分佈式與集群的區別
分佈式(distributed)是指在多臺不同的服務器中部署不同的服務模塊,通過遠程調用協同工作,對外提供服務。
集群(cluster)是指在多臺不同的服務器中部署相同應用或服務模塊,構成一個集群,通過負載均衡設備對外提供服務。
分佈式的定義
分佈式系統(distributed system)簡單來說就是一群獨立計算機集合共同對外提供服務,但是對於系統的用戶來說,就像是一臺計算機在提供服務一樣。分佈式意味著可以採用更多的普通計算機(相對於昂貴的大型機)組成分佈式集群對外提供服務。計算機越多,CPU、內存、存儲資源等也就越多,能夠處理越大的併發訪問量。
分佈式的特性
各個主機之間通信和協調主要通過網絡進行,所以分佈式系統中的計算機在空間上幾乎沒有任何限制,這些計算機可能被放在不同的機櫃上,也可能被部署在不同的機房中,還可能在不同的城市中,對於大型的網站甚至可能分佈在不同的國家和地區。但是,無論空間上如何分佈,一個標準的分佈式系統應該具有以下幾個主要特徵:
分佈性——分佈式系統中的多臺計算機之間在空間位置上可以隨意分佈,系統中的多臺計算機之間沒有主、從之分,即沒有控制整個系統的主機,也沒有受控的從機。
透明性——系統資源被所有計算機共享。每臺計算機的用戶不僅可以使用本機的資源,還可以使用本分佈式系統中其他計算機的資源(包括CPU、文件、打印機等)。
同一性——系統中的若干臺計算機可以互相協作來完成一個共同的任務,或者說一個程序可以分佈在幾臺計算機上並行地運行。
通信性——系統中任意兩臺計算機都可以通過通信來交換信息。
和集中式系統相比,分佈式系統的性價比更高、處理能力更強、可靠性更高、也有很好的擴展性。但是,分佈式在解決了網站的高併發問題的同時也帶來了一些其他問題。首先,分佈式的必要條件就是網絡,這可能對性能甚至服務能力造成一定的影響。其次,一個集群中的服務器數量越多,服務器宕機的概率也就越大。另外,由於服務在集群中分佈是部署,用戶的請求只會落到其中一臺機器上,所以,一旦處理不好就很容易產生數據一致性問題。
分佈式設計開發注意問題
系統如何拆分為子系統
如何規劃子系統間的通信
通信過程中的安全如何考慮
如何讓子系統可以擴展
子系統的可靠性如何保證
數據的一致性是如何實現的
總結
分佈式系統有著漫無邊際的擴展性。(畢竟任何計算機都會有性能的極限,分佈式系統可以通過不斷擴張主機的數量以實現橫向水平性能的擴展)相對集群的另一個好處就是巴菲特的名言:不要把雞蛋放在一個籃子裡,來減輕被一鍋端的風險。