【編者按】每個機(jī)構(gòu)都期望擁有大量的活躍用戶,因為在這個時代用戶的數(shù)量直接與應(yīng)用的價值掛鉤,就比如日前WhatsApp被Facebook以160億美元的天價收購。然而,海量用戶地支撐并不是件容易的事情,本次為大家分享Vistaprint Web平臺組Sriram Devadas的博文――從咖啡店管理看Web應(yīng)用擴(kuò)展。
以下為譯文:
首先,我有一間咖啡店,經(jīng)營的開銷與資源成正比。我有1間100平方英尺的店面,同時還有1臺咖啡機(jī)及1名咖啡調(diào)配師。
其次,是我店鋪的產(chǎn)能:同時只能服務(wù)一個客戶,一杯咖啡需要煮3分鐘,每個客戶服務(wù)時間總計5分鐘。
假設(shè)我的咖啡師可以無休工作,德國制造的咖啡機(jī)同樣堅固無比,那么我的咖啡店每小時就可以服務(wù)12名客人。
Web Server
鑒于同一時間只能服務(wù)一位顧客,因此在高峰時期會存在客戶流失的情形,沒有等待的空間。因此我得升級店鋪,情況如下:
同樣大小的店鋪和基礎(chǔ)設(shè)施,3個咖啡調(diào)配師,2個咖啡機(jī)以及2張椅子。這時候的店鋪產(chǎn)能是,3分鐘兩杯咖啡,7分鐘可以服務(wù)3個顧客,2個顧客可以在椅子上等待,即:并發(fā)客戶=3,客戶容量=5。
縱向擴(kuò)展
生意興隆,是時候升級了,我期望更大的產(chǎn)能,于是進(jìn)行了如下的調(diào)整:
店鋪占地擴(kuò)大到200平方英尺,5個咖啡調(diào)配師,4個咖啡機(jī)及3把椅子。能力按比例提升,一切進(jìn)行的非常好。
在夏季,生意冷淡。對于咖啡店來說再正常不過了,因此有些時候我特別想縮減開支,但是房東肯定不會那么好說話。因此對于我這樣業(yè)務(wù)不恒定的公司來說,大不一定總是好事!
通過負(fù)載均衡器進(jìn)行橫向擴(kuò)展
如果使用更小點可以安置3個咖啡機(jī)的柜臺,同時我只做增加或減少柜臺數(shù)量操作,那么房東肯定不會太在意。那么,只要預(yù)先通知,他就可以減少或者增加一個設(shè)施。但是,如果同一個時間,我只能照顧一個柜臺上的生意,那該怎么弄?
幸運的是,這里有一種特殊的柜臺恰恰就是這么設(shè)置的,這個柜臺允許幾個顧客同時與柜臺管理員交互。實際情況下,負(fù)責(zé)柜臺的員工也并不需要是個咖啡調(diào)配師,他只需要完成訂單方面的相關(guān)工作,同時咖啡調(diào)配師也并不需要直接與顧客交流。這樣的話,店鋪的產(chǎn)能被提升,我也可以按需減少或者增加放置咖啡機(jī)的基礎(chǔ)設(shè)施。
資源深加工
其實我的咖啡機(jī)是個通用型的食品制作工具,在接收到許多客戶的現(xiàn)烤面包需求后,我決定把這個食品放到菜單上。
但是問題出現(xiàn)了,我使用的兩個咖啡機(jī)1次只能制作1磅面包,并且耗費制作咖啡雙倍的時間。因此從時間上看,1磅的面包=4杯咖啡。
因此有些時候面包的訂單會阻塞整個系統(tǒng),喝咖啡的顧客并不愿意等待太久,低效率的言語也隨之出來。我需要1個方法來分割訂單,同時更好地利用資源。
基于異步隊列的處理
我引入了1個基于令牌的隊列系統(tǒng)。在用戶下單后會取得一個對應(yīng)的令牌號碼,然后等待他的食物。訂單攝入部分會取得訂單并分類存儲――面包及咖啡。
咖啡調(diào)配師根據(jù)現(xiàn)有設(shè)備運行情況分析訂單,并選擇是先做面包還是咖啡。當(dāng)面包或者是咖啡做好后,調(diào)配師會將它傳出,隨后柜臺人員叫號發(fā)送。
除下新建的輸入和輸出隊列,其他都是用著之前相同的資源,但是產(chǎn)能明顯提高了。
從顧客的角度上看,他們有著和之前完全不一樣的用戶體驗。
只要顧客能接受這個異步系統(tǒng),我們就可以管理它的復(fù)雜性,它提供了1個容量和產(chǎn)品多樣化的擴(kuò)展途徑,與鄰居的競爭中將獲絕對優(yōu)勢。
未來的擴(kuò)展方向
當(dāng)異步系統(tǒng)達(dá)到限制極限時,我們又該如何處理?很顯然,在這種規(guī)模下咖啡店比喻已經(jīng)完全不可用了,不妨深度搜索一些類似DNS round robin的技術(shù)。Web應(yīng)用程序的擴(kuò)展已經(jīng)不是件新鮮的事情,不妨多參加一些交流,向擴(kuò)展大師們?nèi)〗?jīng)。
原文鏈接:
Intuitively Showing How To Scale a Web Application Using a Coffee Shop
as an Example(編譯/仲浩 審校/毛夢琪)