經常聽到MySql集群、Redis集群、分布式系統等概念,但是,很少有機會深究,到底什麼集群,什麼是分布式?在概念上這倆個詞很接近,難道不需要區分?其實,非常有必要區分這兩個概念,幫助我們對計算機的理論有更深入的理解。今天,我就嘗試去解釋一下這兩個概念。
定義的區别計算機集群(英語:computer cluster)是一組松散或緊密連接在一起工作的計算機。由于這些計算機協同工作,在許多方面它們可以被視為單個系統。與網格計算機不同,計算機集群将每個節點設置為執行相同的任務,由軟件控制和調度。
維基百科的解釋,關鍵詞是:一組計算機、相同的任務。
分布式系統是一組電腦,透過網絡相互連接傳遞消息與通信後并協調它們的行為而形成的系統。[1]組件之間彼此進行交互以實現一個共同的目标。把需要進行大量計算的工程數據分割成小塊,由多台計算機分别計算,再上傳運算結果後,将結果統一合并得出數據結論的科學。
維基百科的解釋,關鍵詞是:一組計算機、大計算分解。
集群和分布式,都是描述的一組計算機。集群的所有節點跑的是同樣的任務,而分布式系統的節點跑的是分解後的任務。以修手機為例:維修一部手機要分為檢測、維修、測試三個環節,為了提高效率,雇了10位工程師。如果每個工程師維修時,對每台手機進行檢測、維修和測試,這就是集群的工作方式。如果2位工程師負責檢測,5位工程師負責維修,剩下的3位工程師負責測試,這就是分布式的工作方式。
應用中的區别在工作中,有時候并沒有嚴格按照概念去理解這兩個詞。但是,回想一下什麼時候用集群這個詞,Redis集群、MySql集群、Nginx集群等等,按照上述的定義分析,這些集群裡的每個節點,都是跑的同樣的業務。微服務平台、雲計算平台,這些平台的節點往往跑着不同的業務,組成強大的能力對外提供服務,這就是分布式系統。
集群的關鍵作用是提升并發處理能力。例如:一台MySql數據庫不能滿足性能需求,通過分表分庫方案,部署多台實例;一個Redis節點不足以支撐業務,多個節點組成集群提高并發處理能力。但凡能夠組成集群的,往往都是職責單一,功能目标明确的應用。相對來說,集群化是簡單的,對服務幾乎無侵入的,通過入口分發負載,應用與應用之間是等價的、無感知的。
分布式的關鍵作用是解耦以便于快速疊代。單機版應用能不能做的很強大、很複雜?當然可以!十幾年前的SAP、Oracle ERP軟件,這些業務巨複雜的系統,都是可以部署在一台服務器上的。通過模塊化、SOA等設計理念,工程師們也可以協同工作寫出複雜的應用。這些軟件可能一年才需要升級一次,但互聯網應用幾乎每周都在發版升級,顯然這種開發模式在互聯網領域并不适用。通過把功能模塊拆分出來,部署在不同的節點,按節點進行升級,實現快速疊代。
通過上面的講述,這種理論模型的分布式,和真實的分布式還是不同。沒有誰見過分布式系統中的業務模塊,是單節點部署的。是的,沒有錯,現實中的分布式系統,其實是分布式 集群的綜合體。這樣的模式,結合了兩者的優勢,即實現了解耦,又做到了高并發能力,完美呼應了互聯網對應用的需求。其他的概念,高可用、一緻性等,都是在分布式 集群的理念上,發展出來的解決具體問題的方法論。
本文從概念入手,“性格分裂”式的剖析了集群和分布式。我認為,這種剖析有利于理解概念,有利于理解“為什麼”。在具體實踐中,不能把兩者對立起來,複雜的業務系統,往往都是兩者的結合體。
針對我的理解,你有什麼想說的嗎?歡迎拍磚。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!