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