某天,下班較早,我正在玩吃雞,已經到決賽圈了,這時候,女朋友滿臉求知慾的朝我走過來。
分散式(distributed)是指在多臺不同的伺服器中部署不同的服務模組,通過遠端呼叫協同工作,對外提供服務。
叢集(cluster)是指在多臺不同的伺服器中部署相同應用或服務模組,構成一個叢集,通過負載均衡裝置對外提供服務。
集中式系統
我和女朋友來到一家小飯店,開始點菜:紅燒魚、糖醋排骨、酸辣土豆絲,好了就這麼多了。
現在,我們和這家飯店之間的就是使用者和系統的關係。我們要求他給我們做出一頓豐盛的晚餐。我們不關心他後廚的一切事情。只要它能在短時間內提供美味的菜品就好了。
上面,我們對這個飯店提出來兩個要求:上菜時間短、菜品美味。除了這些,顧客可能還有其他要求,比如菜品要乾淨衛生、酸辣土豆絲可以多放些辣椒等。
對映到計算機系統中,使用者提出的要求就是:
上菜時間短 -> 效能
乾淨衛生 -> 安全性
菜品多放辣椒 -> 擴充套件性
菜品美味 -> 可用性
複製程式碼
上面說的這家小飯店,只有一個廚師。就是一個集中式系統。
一個集中式部署的電子商務應用
如果飯店內只有我們一個顧客的話,以上幾條基本都可以滿足的。但是,如果到了晚飯時間,突然顧客變多了,這些顧客的要求可能就沒辦法全都滿足了。
飯店內人滿為患,這家小飯店只有一個廚師的情況下,他需要保證所有菜品美味、衛生,又要保證所有菜品可以準時準備好,又要給不同使用者滿足定製化要求。這種挑戰是及其大的。
以上,對映到計算機軟體中,也是一樣的。隨著業務量的增長,網站的高可用、易伸縮、可擴充套件、安全等目標就會受到極大的挑戰。
叢集部署
隨著飯店的生意越來越好,老闆意識到只有一個廚師會存在很大問題。
首先,在客流量高峰期,一個廚師無法滿足所有顧客的要求。
其次,廚師變成了一個單點,就是他不能生病,一旦他生病了,整個飯店就無法營業了。
這可愁壞了老闆,一時之間不知道該如何是好了。但是,老闆有個聰明的老婆,他提了一個建議。
然後,為了提高飯店的待客能力。老闆決定多僱傭幾個廚師。
有了多個廚師了之後。店內顧客的點菜,就可以分配給後廚的多個廚師來做。
具體如何分配,這就是需要一定的策略了。可以選擇分配給空閒的廚師、也可以按順序輪流分配。
雖然,飯店有多個廚師,但是使用者並不知道這些事情,他只知道自己的點菜需求,可以得到滿足就可以了。他也不需要關心到底是哪位廚師給自己做的菜。除非菜品出現了質量問題時,就需要找到指定的廚師來問責了。
以上,對映到計算機軟體中,也是一樣的。集中式系統只有一臺計算機提供服務,叢集就是有多臺計算機提供同樣的服務。
一個叢集部署的電子商務應用
使用者的請求通過負載均衡分配給叢集中的各個機器。整個系統對於使用者來說就像是一臺機器在提供服務一樣。
分散式部署
在飯店僱傭了多個廚師之後,飯店的服務能力確實提升了很多。顧客也越來越多。
但是,最近店內經常會有顧客投訴某個菜品的味道和自己之前吃到過的不一樣了。
經過店長的仔細調查,發現是由於這家店的廚師除了要負責炒菜以外,還需要負責洗菜、切菜、備菜,甚至是刷碗。
這就使得廚師沒辦法專注於炒菜了,他會被很多其他的瑣事而牽絆,導致無法專心炒菜,影響了菜品的質量。
而且,由於最近店內的顧客也越來越多,幾個廚師還是忙不過來。
這時候,老闆就要想辦法繼續提升飯店的服務能力。他想著要繼續僱傭幾個廚師。
還是飯店老闆那個聰明的老婆,又給他出了一個更好的主意。
這就是一種分散式的思想。
通過把一件大的事情,拆分成多個小事情,分別交給不同的人來做。
這樣術業有專攻,洗菜的可以把菜洗的更乾淨、廚師也可以專注炒菜,把菜炒的更加美味。
飯店從多個廚師的配置,變成了多個洗菜工+配菜師+廚師的配置。這家飯店的服務能力大大提升。再也沒有顧客投訴菜品問題了。
對於顧客來說,他們還是不知道後廚的這些變化的,他甚至不知道自己點的菜是多個人配合的結果。
以上,對映到計算機軟體中,也是一樣的。除了通過叢集部署的方式提升系統能理外,還可以通過分散式部署的方式。
一個分散式部署的電子商務應用
把一個大的系統拆分成多個子系統,每個子系統負責自己專注的事情,然後通過網路進行通訊和協調,對使用者來說,就像訪問的是同一臺機器一樣。
隨著飯店的發展,慢慢的從只有一個廚師演變成有多個廚師,進而演變成有洗菜工、配菜師、廚師等多個職位。
這個網站架構發展也類似。網站初期,只需要搭建一個集中式的單體應用就可以了,如果業務量有很大增長,先考慮增加機器,通過叢集部署提升能力。接著,就可以考慮分散式了。