當(dāng)應(yīng)用發(fā)展到用一臺服務(wù)器已經(jīng)不能處理產(chǎn)品的需求時(shí),我們的感受會相當(dāng)矛盾,既興奮又沮喪。興奮是因?yàn)槲覀兊臉I(yè)務(wù)增長了,沮喪是因?yàn)槲覀円瓉黹_發(fā)的新時(shí)代,需要采用新技術(shù)擴(kuò)展系統(tǒng)。根據(jù)實(shí)現(xiàn),我們有時(shí)可以依賴集群化的軟件復(fù)制狀態(tài)或會話進(jìn)行擴(kuò)展,但這種方法只能拖延系統(tǒng)達(dá)到極限的時(shí)間,如果我們的業(yè)務(wù)持續(xù)以指數(shù)級發(fā)展,或者只是呈線性發(fā)展,遲早都會達(dá)到這種極限。如果你的公司經(jīng)營得很成功,那么即使是成本很高的會話同步方法也會很快不能滿足它的發(fā)展需求。你很快就會發(fā)現(xiàn)自己在許多應(yīng)用服務(wù)器的內(nèi)存中復(fù)制了太多信息,很可能需要進(jìn)行Y軸或Z軸的劃分了。
我們的許多客戶通常都不進(jìn)行這類劃分,而是依靠負(fù)載均衡器維護(hù)的關(guān)聯(lián)性處理會話和狀態(tài)的需求。一旦用戶登錄了,或啟動了應(yīng)用服務(wù)器池專用的某個(gè)流程,負(fù)載均均衡器就會維持與該應(yīng)用服務(wù)器的關(guān)聯(lián)性,直到功能(就Y軸劃分而言,是由不同的池提供不同的功能)或會話(就Z軸劃分而言,客戶被劃分入不同的池中)完成為止。對于許多發(fā)展放慢了的產(chǎn)品,或客戶對可用性的需求不那么強(qiáng)烈的產(chǎn)品,這種方法足夠了。
以前,維護(hù)關(guān)聯(lián)性意味著相當(dāng)高的成本。當(dāng)幾個(gè)大的或長期運(yùn)行的會話定到很少幾臺服務(wù)器上時(shí),容量計(jì)劃就會變得非常麻煩;當(dāng)為某些用戶運(yùn)行的應(yīng)用服務(wù)器出故障時(shí),這些用戶的可用性會受影響。雖然可以依靠會話復(fù)制創(chuàng)造另一臺主機(jī),在系統(tǒng)出現(xiàn)故障時(shí)遷入其中,但如前所述,這種方法要復(fù)制內(nèi)存消耗和系統(tǒng)容量,因此成本很高。
最后,為超高速發(fā)展的客戶提供的最好解決方案還是盡量不使用狀態(tài)。我們更愿意從“為什么你需要它”這個(gè)問題著手,開始討論狀態(tài)這個(gè)主題。我們的客戶則常常會大吃一驚,典型的反應(yīng)是:“通常不都如此嗎,我們需要知道剛剛發(fā)生了什么,然后才能決定下一步做什么。”如果用收益、增加的交易量等數(shù)據(jù)來說明狀態(tài)的功效,他們常常會不知所措。但是,的確有些解決方案可能需要狀態(tài),如實(shí)施工作流的狀態(tài)機(jī)的解決方案。更常見的情況是,狀態(tài)是種奢侈品,而且成本很高。
永遠(yuǎn)不要低估了應(yīng)用中“簡單且容易”這個(gè)原則的力量,它是對付“昂貴和復(fù)雜”的有效武器。 Craigslist用一個(gè)大型的基于文本的無狀態(tài)應(yīng)用,在本地分類廣告的競爭中戰(zhàn)勝了eBay,雖然eBay總是盡可能地保持應(yīng)用無狀態(tài),有一個(gè)含許多重要功能,并且比競爭對手 Craigslist早出現(xiàn)很多年的頗具競爭力的分類廣告產(chǎn)品。在本地分類廣告的競爭中簡單勝出。不相信嗎? Google在搜索市場又是如何應(yīng)對對手的呢?在其他人都致力于開發(fā)豐富的界面時(shí), Google最初建立的理念就是:你的最后一個(gè)搜索結(jié)果才是最重要的,并且你真正想要的就是最好的搜索結(jié)果。沒有狀態(tài),沒有會話,非常實(shí)際。
關(guān)鍵就在于,會話和狀態(tài)都是需要花錢的,只有通過AB測試或多元分析確定它們在關(guān)鍵的操作指標(biāo)上顯示出了具有競爭性的優(yōu)勢時(shí),才應(yīng)該實(shí)現(xiàn)它們。會話(和狀態(tài))需要內(nèi)存,這就意味著編編碼復(fù)雜度更大了,而運(yùn)行交易的時(shí)間也會稍有加長。這會減少每臺服務(wù)器每秒可以處理的交易量,從而增加需要的服務(wù)器的數(shù)量??紤]到容納狀態(tài)所需的內(nèi)存,那么所需的系統(tǒng)可能會更大或更貴??赡苄枰_發(fā)“狀態(tài)群”(本章后面會介紹),這就意味著更多的設(shè)備。當(dāng)然,更多的設(shè)備意味著需要更多的空間、電力和冷卻設(shè)備,在虛擬化世界中,還需要支付更多的云資源。記住,對每臺服務(wù)器(或虛擬機(jī)),我們都需要支付相當(dāng)于它的成本多倍的錢,因?yàn)樾枰o它提供空間、提供制冷系統(tǒng)以及提供電力。即使采用云資源,成本也是一樣的,它們只是打包提供給了我們。
最好的就是總是對任何應(yīng)用或網(wǎng)站制作服務(wù)中的狀態(tài)需求提出疑問。要與“開發(fā)無狀態(tài)應(yīng)用”一起著重強(qiáng)調(diào)本原則。要搞清楚的是,狀態(tài)分發(fā)(把狀態(tài)轉(zhuǎn)移到瀏覽器上,或分布式狀態(tài)服務(wù)器上或緩存中)不同于無狀態(tài)。
本文地址:http://m.cdrpkj.cn//article/3515.html