我在網上看到的一個圖,特別有意思也很形象:
如果不是很明白那麼看了下面的內容,再回頭看這個圖,你會豁然開朗的
什麼是集群?
百度:
計算機集群簡稱集群是一種計算機系統,它通過一組鬆散集成的計算機軟件和/或硬件連接起來高度緊密地協作完成計算工作。在某種意義上,他們可以被看作是一臺計算機。集群系統中的單個計算機通常稱為節點,通常通過局域網連接,但也有其它的可能連接方式。集群計算機通常用來改進單個計算機的計算速度和/或可靠性。一般情況下集群計算機比單個計算機,比如工作站或超級計算機性能價格比要高得多
頭大,可以直接忽略
集群:同一個業務,部署在多個服務器上,不同的服務器運行同樣的代碼,幹同一件事情。
舉個例子:
將一個網站放在A服務器上,一旦A服務器訪問量過大系統就會崩潰,但是如果把網站再發布到B服務器上,這樣就有兩臺服務器在處理訪問,分擔了壓力,如果這時A服務器崩潰,還有B服務器在工作。可以緩解高併發。
特點:
注意每臺服務器都是運行的同一個系統(或者項目)。
集群技術的優點:
1.通過多臺計算機完成同一個工作,達到更高的效率。
2.兩機或多機內容工作過程等完全一樣。如果一臺死機,另一臺可以起作用。
集群主要解決高併發很有效,解決高併發一個方式就是提高服務器的性能,比如cpu處理速度,增大緩存等等,但是往往成本會很高,另一種方式就是把配置一般的服務器多弄幾個,這樣不僅處理效率會有提高,而且還較少了服務器崩潰導致軟件運作問題。
例如你是一個小超市的老闆,為了解決收銀問題,你可以花重金去聘請一個高效率的收銀員,也可以花同樣的價格甚至更少的錢去聘請兩個效率一般的收銀員。第一種一旦高效率收銀員家裡有事請假了,你這個超市就沒辦法進行下去,,但是第二種,就不需要擔心這個問題,只需要擔心萬一只有一個在場,而結賬的顧客太多怎麼辦。這樣想,集群是不是就很清楚了?
但是假如你的軟件很火,訪問量已經超過你所有服務器形成的集群的最大訪問量,而且再增加服務器的數量效果不明顯的時候,怎麼辦?再為現有的服務器升級?那麼我們看看分佈式是怎麼做的。
什麼是分佈式?
先看概念:
分佈式系統是一組計算機,通過網絡相互連接傳遞消息與通信後並協調它們的行為而形成的系統。組件之間彼此進行交互以實現一個共同的目標。
換句話說:
分佈式:將一個業務拆分成多個子業務,部署在不同的服務器上,不同的服務器。運行不同的代碼,為了同一個目的。
舉個例子:
例如:我們平時自己做課設,前後臺都要自己寫,但是每個人擅長的領域不一樣,就會導致這整個項目很難看,有的做出來頁面很漂亮但是性能不高,有的做出來性能很好但是頁面看不下去。那麼這時候就可以實行“術業有專攻
”,你會前端,你就專門負責前端,你會java後臺,前端的事情就不需要操心,整個項目的質量也會提高。那分佈式是怎樣的呢?就是將每個模塊獨立出來,訪問量大的模塊,我用性能好的服務器裝,訪問量小的模塊我可以用差一點的服務器。這樣一是降低了項目各個模塊的耦合度,便於擴展和優化;二是合理利用了資源,哪一模塊訪問量過大性能跟不上的時候,就單獨優化該模塊的服務器即可。
特點:
將軟件的功能拆分,模塊之間獨立,在使用這些模塊的時候再組合起來就是一個系統了。
優點:
1.模塊之間獨立,各做各的事,便於擴展,複用性高。
2.高吞吐量。某個任務需要一個機器運行10小時,將該任務拆分成10個任務用10臺機器分佈式跑,可能只需要一兩個小時就可以完成了。
它們倆既然這麼厲害能不能合體?當然!
合體叫做:
分佈式集群
舉個例子:
假如你要做個大項目,前端需要2個人、測試1個、java後臺5個人,這後臺的5個人就相當於集群,java、前端、測試三者相對於整個項目而言屬於分模塊的(分佈式)。
說到這裡,其實就會明白,分佈式和集群是可以嵌套的,比如java後臺需求更多,那我再加5個人,將後臺一部分給前五個用java開發,另外一大模塊用python開發。
那麼運用好分佈式和集群,就可以使項目性能更加完善。
一般大型高併發系統架構,都會採用分佈式集群部署,我們幾乎每個人都在用的==12306==就是屬於這種分佈式集群的架構。
詳細文章可以參看這篇:
鏈接: [“12306”的架構到底有多牛逼?](https://blog.csdn.net/ki8qzvka6gz4n450m/article/details/103017731).
當然這只是粗略從概念出發來理解,要深入學習還需要花很多功夫的哦。
歡迎關注松鼠的公眾號:松鼠小碼農
和松鼠一起學習。