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