02.26 分佈式與集群的區別是什麼?

汪青蘭


分佈式和集群不是同一個維度的概念。

  1. 集群是個物理形態,分佈式是個工作方式。只要是一堆機器,就可以叫集群,他們是不是一起協作著幹活,這個誰也不知道;一個程序或系統,只要運行在不同的機器上,就可以叫分佈式,嗯,C/S架構也可以叫分佈式。集群一般是物理集中、統一管理的,而分佈式系統則不強調這一點。所以,集群可能運行著一個或多個分佈式系統,也可能根本沒有運行分佈式系統;分佈式系統可能運行在一個集群上,也可能運行在不屬於一個集群的多臺(2臺也算多臺)機器上。

  2. 通俗的來講,分佈式是指多人分工幹活,集群概念模糊,主要做服務分壓(分壓力);分佈式(拆分業務)。集群主要解決高可用問題,作用相對單一。分佈式上游做業務拆分,在開發階段就體現出它的價值,支持多團隊並行開發。單個節點之間單獨開發,升級,部署。是互聯網應用架構的核心。
  3. 在分佈式的基礎之上,線上環境部署的時候可以使用集群技術增強系統可用性。

上一張圖,大家可以看看能否區分的出集群和分佈式!

個人觀點這個是兩個維度的東西,分佈式應該和SOA相提並論。集群是分佈式上層建築,通常和負載均衡一起出現。


狂客說技術


集群和分佈式,兩者的區別還是挺大的,我就按照自己的理解,向大家解釋一下,如果有不對的地方,歡迎大家留言討論。(回答過類似的問題,不過每次回答的時候,都有新的收穫和感悟可以分享)

集群

一個業務,部署在多臺服務器上,這就是集群。這裡的一個業務,可以直接看做一個程序包。

提到集群,就不得不說一下負載均衡,這兩個概念一起舉個例子:

  • 公司開發了一個網上商城,類似於T寶,顧客可以在上面瀏覽商品、加入購物車、支付,完成整個的購物流程。

  • 公司買了一臺服務器,把這套程序部署上去,可以滿足一千個人同時在線購物。


  • 當顧客越來越多,服務器負載越來越高,商城的頁面也越來越卡,這時候公司再買幾臺服務器,把商城的程序在每個服務器上都部署一套,由負載均衡講請求轉發到各個服務器上,這就是集群。

分佈式

把一個業務,拆分成多個業務,然後部署到不同的服務器上,這就是分佈式。

還是舉例子說明:

  • 公司的網上商城,拆分成兩個系統:商品系統和支付系統,用戶在商品系統上完成瀏覽商品、加入購物車的動作,在支付系統上完成支付動作(當然用戶是無法感知到是在兩個系統上完成的操作),這就是分佈式。

  • 當然,還能繼續拆,例如拆出來:用戶系統、積分系統等等等等。

  • 那麼分佈式的好處是什麼?公司說,我們再做一個二手交易平臺,類似於X魚,這時候用戶系統、支付系統就可以複用了,做到了服務複用。

分佈式+集群

兩者同城是結合一起使用的,比如商品系統部署五臺,支付系統部署五臺,前面各自掛負載均衡,這樣就算有單個服務器Down掉,也不會對整個業務流程造成影響。

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。


會點代碼的大叔


在BAT與同事們交流過,分佈式已經逐漸成為面試時必不可少的問題了。瞭解面試者對分佈式的理解,一方面可以側面驗證其過去工作的規模,另一方面可以測試他對架構設計方面的功底。

但是集群相對來說,在面試中提到的較少,因此很多人對分佈式與集群的區別都不是很清楚。

接下來,我們將從N個方面來分析他們的區別。

物理與邏輯

集群傾向於物理概念,即多臺機器組成一個集群。這多臺機器是否有合作關係並不能保證,比如我們會說我們公司的一個規模為1000臺機器的物理集群部署在昌平,但是這1000臺機器可能是給公司內不同的平臺提供服務,但是從物理角度,由於都部署在一起,在同一個機房,就可以稱之為集群。

分佈式傾向於邏輯概念,即多個節點或程序為了一個共同的目標,部署在一個或者多個物理機器上。舉個例子,一臺物理機上裝了一個Nginx,它連接的兩個Tomcat也在這臺物理機上,但是這個Nginx代表的服務,就可以稱之為分佈式。當然,為了安全性,穩定性等原因,我們並不建議把分佈式部署在一個物理節點上。

冗餘與分解

集群除了可以用來表示多個物理機器,還可以表示一種“冗餘”的理念,即通過部署多個同樣功能的節點,來實現擴展性與可用性的提升。舉個例子,通過在不同節點上部署兩個同樣功能的server,來這樣就算其中一個節點宕機,也能保證服務的可用性。而擴展性,比如一個server的qps可用承擔到2000,但是隨著用戶群體的增加,qps需要達到3000,那麼我們就可以通過增加一個Tomcat節點的方式來實現擴容。

分佈式的分解與微服務的概念有點相近,即把一個系統的功能分佈在不同節點上,每個節點都承擔了不同的責任,這樣分模塊部署最主要的優勢是業務隔離,即個別功能的問題或者改進不會影響其他模塊,這樣就算個別模塊掛掉,其他模塊也能夠繼續運作。舉個例子,前些年春晚搶紅包的時候,曾經由於瞬時間請求量太大導致把微信和支付寶給弄癱瘓了,但是大家都知道,癱瘓的只是紅包部分的功能,微信的信息功能並不受影響,這就是分佈式的好處。

以上是我對分佈式與集群的淺見,歡迎各位在下方留言評論。

我是蘇蘇思量,來自BAT的Java開發程序員,每天分享科技類見聞,歡迎關注我,與我共同進步。


一個存在感小透明


集群比較好理解,多個同等物理服務聯合提供服務,高可用,提升吞吐量。

分佈式就沒那麼簡單吧,把一個系統分解碎片就是分佈式?

分佈式比較早出現在數據庫,文件系統。

在數據庫領域,分佈式數據庫已經研究幾十年了,一直沒啥突破性進展。理想模式的分佈式數據庫是多個寫入點,聯合組成數據庫,能夠跨越地理區域,外部是感知不到數據到底存儲在哪。

這裡面涉及致命問題是分佈式事務,數據庫分佈式數據有現成的方案,2階段提交,問題是性能太差。所以基本沒人敢用。

分佈式文件系統

其實文件系統這塊有個方案,弄個高速共享磁盤,機房內所有服務器共享該設備,實現文件系統層面高速共享。這個方案主要問題出在物理設備太貴,可支持機器有限。

分佈式文件系統,主要還是hdfs為代表。配合hadoop出現。典型特徵還是不知道數據在哪。甚至不知道數據咋組成的。hdfs使用很嚴謹機制來確保寫入正確性。

hadoop的mapreduce也是分佈式的一種,只是限定在特定框架內的分佈式。

分佈式系統,早先出現過soa系統,2010年的一個號稱soa系統,接口使用soap,核心使用jbpm jms完成通信和協調工作,在8個服務器上完成業務切割,將具體業務模塊封裝在jbpm,剩下就是利用jbpm框架在8個物理服務上交替完成業務模塊,一條業務流程,全走完可能隨機分佈在不同的服務上,這個和更早出現的集群不一樣,集群是一個流程會集中在一個物理服務上。

再後來微服務盛行,將業務模塊做成微服務,服務組合利用rest或者mq。將先前soa的8個巨型物理服務器變成n個doker鏡像。驅動業務模塊的jbpm不需要了,可以通過更自由的方式組合使用這些微服務。

分佈式焦點還是事務性,看過一個資料,這塊目前來說還無法真正解決問題,cap原理無法打破。

並行計算和分佈式還有集群的區分,以前並行計算也叫高性能計算,是在大型機器上用特定算法和框架完成大型工程計算。

不過集群和分佈式系統有時也能起到並行計算的效果,比如一個計算節點無法短時間處理10000個任務,那就擴機器,橫向擴大集群,100個節點計算,時間可縮小到1/100。而hadoop也有類似效果,一個計算節點無法完成海量計算,將其分解後,分散到多個計算節點將計算時間變成可行。

還有主從模式算分佈式嗎?

典型數據庫的主從模式算嗎?我個人覺得不算,mysql的分佈式數據庫專指mysql cluster,是在ndb基礎上搭建。

那數據庫分片算嗎?

比如mongo的分片算嗎?

我個人覺得不算。

個人覺得分佈式這個被弄的很凌亂。所以看到不同系統不同資料不同時期,給的概念和定義都有差異。本人見識不足,錯誤的理解之處見諒。


abcdefghi98765432101


“我是喲喲吼說科技,專注於數據網絡的回答,歡迎大家與我交流數據網絡的問題”

分佈式是指將不同功能,或不同地點,或擁有不同數據的多臺計算機通過網絡連接起來,由控制系統統一管理,完成大規模信息處理的計算機系統。

集群是指將多臺服務器集中在一起提供同一種服務,在邏輯上可以看做是一臺服務器對外進行服務,這些服務器組合就是集群。

如題,分佈式和集群的區別是什麼?

喲喲簡單總結一句話:分佈式是“並聯”工作的,集群是“串聯”工作的。

下面喲喲來具體介紹一下兩者的區別:

1、從概念上就可以看出兩者最主要的區別就是分佈式是將一種業務拆分成多個子業務部署在多臺服務器上,進而對外提供服務;而集群就是將多臺服務器組合在一起提供同一種服務;

2、集群強調在多臺服務器位置集中,並且容易統一管理;而分佈式沒有具體要求,不論放置在哪個位置,只要通過網絡連接起來就行;

3、集群是一種物理形態,即多臺服務器在一起提供一種服務;而分佈式是一種工作方式,即一個程序或業務分解到多臺服務器分別完成;

總之,兩者最明顯的區別還是集群是多臺服務器做相同類型的任務,分佈式是多臺服務器協同做一種任務。

歡迎大家多多關注我,在下方評論區說出自己的見解。


喲喲吼說科技


「集群」的核心在「冗餘」,通過冗餘來提高系統的「可用性」,附帶影響了系統「容量」。

「分佈式」的核心在「拆分」,通過拆分後的分工合作,提高系統的「響應」和「容錯能力」,附帶影響了「可用性」。

區分「集群」和「分佈式」的方法就是這一組系統/組件之間是「冗餘」關係,還是「分工合作」關係。


舉個例子

假設題主是個有老婆的程序員!再假設題主的老婆開了一家小吃店!

因為是小本生意,初期收銀、服務、做菜、打掃都是你老婆一個人做。這就是「單機系統」。

但是你老婆也不是超人,偶爾會生個病,或者有其他事情,這個時候就沒法開店了,也就是說「系統停止對外提供服務了」!

為了減少關店的時間,你在老婆有事的時候,就去幫忙開店。這時你和你老婆就組成了「主備」。你老婆是「主」,你是「備」!

後來生意越做越好,你老婆一個人扛不住了。你琢磨著幹軟件沒前途,還不如和老婆開夫妻店去。於是你就辭職和老婆一起開店了。這時你和你老婆就組成了「集群」。你和你老婆都做收銀、服務、做菜、打掃的工作,誰有事了,店也能開,只是服務的人數會(容量)相對的減少。

再後來,生意更好了,於是你招了個服務員,你和你老婆就不再做服務的事情了。現在服務員、你和你老婆就組成了「分佈式」!而你和你老婆之間還是「集群」的關係。

再再後來,一個服務員也不夠了,如果這個服務員請假了,生意又不好做了(單點問題),於是你又招了個服務員。這兩個服務員又組成了「集群」!

最後你生意做得很紅火,你招了廚師、收銀、服務員、洗碗工、清潔員。你帶著你老婆出去浪了~


架構思維


簡單來解釋:

一個任務,只有一個服務器來運行,這個服務器會累成狗;(單機結構)

多個累成狗的服務器組合在一起運行,就可以叫集群,他們是不是一起協作著幹活,這個誰也不知道;(集群結構)

基因優化整合之後,多個服務器被拆分到運行在不同的機器上,就像一群小小的服務器一起工作,(分佈式結構)

要充分理解這個概念,首先先明白什麼是單機結構:

普通的軟件是運行在一臺物理機器上的,一個系統業務量很小的時候,可以將所有的代碼都放在一個項目中,然後部署在一臺服務器上,這臺服務器提供整個項目所有的服務。單機結構的啥缺點顯而易見,因為它的處理能力是有限的,當業務增長到一定程度的時候,單機的硬件資源將無法滿足。

此時便出現了集群模式,單機處理到達瓶頸的時候,你就把單機複製幾份,這樣就構成了一個“集群”。集群中每臺服務器就叫做這個集群的一個“節點”,所有節點構成了一個集群。每個節點都提供相同的服務,那麼這樣系統的處理能力就相當於提升了好幾倍。

分佈式結構就是將一個完整的系統,按照業務功能,把一個服務系統拆分成一個個獨立的子系統,在分佈式結構中,每個子系統就被稱為“服務”。這些子系統能夠獨立運行在web容器中,它們之間通過RPC方式通信。


歐界傳媒


從工作形式來說:

分佈式是將一個業務分拆為多個子業務,部署在不同的服務器上。

集群是將多臺服務器集中在一起,實現同一業務。


從解決問題的角度來說:

分佈式是研究如何把一個需要非常巨大的計算能力才能解決的問題分成許多小的部分,然後把這些部分分配為許多計算機進行處理,最後把這些計算結果綜合起來得到最終的結果。

分佈式是以縮短單個任務的執行時間來提升效率的,任務具有差異性。



集群是一組計算機作為一個整體向用戶提供一組網絡資源,這些單個的計算機系統就是集群的節點。一個理想的集群是,用戶從來不會意識到集群系統底層的節點,在他們看來,集群是一個系統,而非多個計算機系統,並且集群系統的管理員可以隨意增加和刪改集群系統的節點。

集群是以提高單位時間內執行的任務數來提升效率的,任務具有同一性。


從特點來看:

分佈式:

  • 橫向擴展性強

橫向可擴展性是指通過增加服務器數量來提升整體性能,縱向可擴展性是指提升每臺服務器性能進而提升總體性能。縱向可擴展性的上限非常明顯,因為單臺服務器的性能不可能無限提升,而橫向可擴展性的上限空間比較大,分佈式又恰恰總能很方便地增加服務器。


  • 廉價高效

這是分佈式系統的突出特點,成本低廉的PC服務器組成的分佈式,在性能方面能達到超越大型機的處理性能,在成本上遠低於大型機。


  • 網絡開銷大

網絡開銷是分佈式系統最大的瓶頸。


集群:

  • 可擴展性

集群的性能不限於單一的服務實體,新的服務實體可以動態地加入到集群,從而增強集群的性能。


  • 高可用性

在集群中,同樣的服務可以由多個服務實體提供,如果一個服務實體失敗了,另一個服務實體會接管失敗的服務實體,服務實體冗餘保證了錯誤恢復能力,增強了系統的可用性。


  • 負載均衡

負載均衡能把任務比較均衡地分佈到集群環境下的計算和網絡資源。


分佈式與集群間的區別聯繫:

分佈式中的每一個節點,可以做高可用集群,這樣可以保證分佈式每個節點可用。而集群並不一定就是分佈式的。


雲匯天下Chainedbox


以下的解釋都是太片面了,把分佈式=垂直切分、集群=水平拓展。其實分佈式是邏輯概念,集群是物理概念。兩者結合在一起才是真正的分佈式。不管是垂直切分和水平拓展都要考慮分佈式帶來很多的問題,數據不一致,事務失敗、可用性底等,也就是CAP原理,如果要詳細闡述就比較複雜了


分享到:


相關文章: