漫小畫
擅長漫話
程小員
擅長編程
某天,下班較早,我正在玩吃雞,已經(jīng)到?jīng)Q賽圈了,這時候,女朋友滿臉求知欲的朝我走過來。
上次他們都說你給我講的面向?qū)ο筇唵瘟恕?/p>
那你想怎樣?為什么我一玩游戲你就過來問我問題呢?
我不管,你給我說說分布式和集群是啥東東?
分布式(distributed)是指在多臺不同的服務器中部署不同的服務模塊,通過遠程調(diào)用協(xié)同工作,對外提供服務。
集群(cluster)是指在多臺不同的服務器中部署相同應用或服務模塊,構(gòu)成一個集群,通過負載均衡設(shè)備對外提供服務。
說人話,這東西我聽不懂。
好吧。走,我們先出去吃飯。邊吃邊聊。
集中式系統(tǒng)
我和女朋友來到一家小飯店,開始點菜:紅燒魚、糖醋排骨、酸辣土豆絲,好了就這么多了。
現(xiàn)在,我們和這家飯店之間的就是用戶和系統(tǒng)的關(guān)系。我們要求他給我們做出一頓豐盛的晚餐。我們不關(guān)心他后廚的一切事情。只要它能在短時間內(nèi)提供美味的菜品就好了。
上面,我們對這個飯店提出來兩個要求:上菜時間短、菜品美味。除了這些,顧客可能還有其他要求,比如菜品要干凈衛(wèi)生、酸辣土豆絲可以多放些辣椒等。
映射到計算機系統(tǒng)中,用戶提出的要求就是:
上菜時間短 -> 性能
干凈衛(wèi)生 -> 安全性
菜品多放辣椒 -> 擴展性
菜品美味 -> 可用性
上面說的這家小飯店,只有一個廚師。就是一個集中式系統(tǒng)。
一個集中式部署的電子商務應用
如果飯店內(nèi)只有我們一個顧客的話,以上幾條基本都可以滿足的。但是,如果到了晚飯時間,突然顧客變多了,這些顧客的要求可能就沒辦法全都滿足了。
飯店內(nèi)人滿為患,這家小飯店只有一個廚師的情況下,他需要保證所有菜品美味、衛(wèi)生,又要保證所有菜品可以準時準備好,又要給不同用戶滿足定制化要求。這種挑戰(zhàn)是及其大的。
以上,映射到計算機軟件中,也是一樣的。隨著業(yè)務量的增長,網(wǎng)站的高可用、易伸縮、可擴展、安全等目標就會受到極大的挑戰(zhàn)。
隨著飯店的生意越來越好,老板意識到只有一個廚師會存在很大問題。
首先,在客流量高峰期,一個廚師無法滿足所有顧客的要求。
其次,廚師變成了一個單點,就是他不能生病,一旦他生病了,整個飯店就無法營業(yè)了。
這可愁壞了老板,一時之間不知道該如何是好了。但是,老板有個聰明的老婆,他提了一個建議。
這有什么好發(fā)愁的?再雇傭幾個廚師就行了呀。
誒,你這個注意很不錯啊。
然后,為了提高飯店的待客能力。老板決定多雇傭幾個廚師。
有了多個廚師了之后。店內(nèi)顧客的點菜,就可以分配給后廚的多個廚師來做。
具體如何分配,這就是需要一定的策略了。可以選擇分配給空閑的廚師、也可以按順序輪流分配。
雖然,飯店有多個廚師,但是用戶并不知道這些事情,他只知道自己的點菜需求,可以得到滿足就可以了。他也不需要關(guān)心到底是哪位廚師給自己做的菜。除非菜品出現(xiàn)了質(zhì)量問題時,就需要找到指定的廚師來問責了。
以上,映射到計算機軟件中,也是一樣的。集中式系統(tǒng)只有一臺計算機提供服務,集群就是有多臺計算機提供同樣的服務。
一個集群部署的電子商務應用
用戶的請求通過負載均衡分配給集群中的各個機器。整個系統(tǒng)對于用戶來說就像是一臺機器在提供服務一樣。
在飯店雇傭了多個廚師之后,飯店的服務能力確實提升了很多。顧客也越來越多。
但是,最近店內(nèi)經(jīng)常會有顧客投訴某個菜品的味道和自己之前吃到過的不一樣了。
經(jīng)過店長的仔細調(diào)查,發(fā)現(xiàn)是由于這家店的廚師除了要負責炒菜以外,還需要負責洗菜、切菜、備菜,甚至是刷碗。
這就使得廚師沒辦法專注于炒菜了,他會被很多其他的瑣事而牽絆,導致無法專心炒菜,影響了菜品的質(zhì)量。
而且,由于最近店內(nèi)的顧客也越來越多,幾個廚師還是忙不過來。
這時候,老板就要想辦法繼續(xù)提升飯店的服務能力。他想著要繼續(xù)雇傭幾個廚師。
還是飯店老板那個聰明的老婆,又給他出了一個更好的主意。
雇傭一個廚師多費錢啊,你用雇傭一個廚師的錢,雇傭幾個洗菜工、配菜師不就行了么。
誒,你這個注意很不錯啊
這就是一種分布式的思想。
通過把一件大的事情,拆分成多個小事情,分別交給不同的人來做。
這樣術(shù)業(yè)有專攻,洗菜的可以把菜洗的更干凈、廚師也可以專注炒菜,把菜炒的更加美味。
飯店從多個廚師的配置,變成了多個洗菜工+配菜師+廚師的配置。這家飯店的服務能力大大提升。再也沒有顧客投訴菜品問題了。
對于顧客來說,他們還是不知道后廚的這些變化的,他甚至不知道自己點的菜是多個人配合的結(jié)果。
以上,映射到計算機軟件中,也是一樣的。除了通過集群部署的方式提升系統(tǒng)能理外,還可以通過分布式部署的方式。
一個分布式部署的電子商務應用
把一個大的系統(tǒng)拆分成多個子系統(tǒng),每個子系統(tǒng)負責自己專注的事情,然后通過網(wǎng)絡進行通信和協(xié)調(diào),對用戶來說,就像訪問的是同一臺機器一樣。
哇,太棒了。
你聽懂了對吧,什么都難不住我的。
什么啊,我想說,這紅燒魚太好吃了。
額、、、
隨著飯店的發(fā)展,慢慢的從只有一個廚師演變成有多個廚師,進而演變成有洗菜工、配菜師、廚師等多個職位。
這個網(wǎng)站架構(gòu)發(fā)展也類似。網(wǎng)站初期,只需要搭建一個集中式的單體應用就可以了,如果業(yè)務量有很大增長,先考慮增加機器,通過集群部署提升能力。接著,就可以考慮分布式了。