只需要復(fù)制數(shù)據(jù)和功能就可以快速擴(kuò)展事務(wù)。為成功做好計(jì)劃,把系統(tǒng)設(shè)計(jì)為能夠橫向擴(kuò)展的。不要讓自己陷入如此困境:要進(jìn)行縱向擴(kuò)展時(shí),卻發(fā)現(xiàn)已經(jīng)沒(méi)錢(qián)購(gòu)買(mǎi)更快更大的系統(tǒng)了。
當(dāng)你發(fā)現(xiàn)系統(tǒng)中的客戶和事務(wù)在快速增長(zhǎng),而系統(tǒng)卻不能擴(kuò)展到多個(gè)服務(wù)器上時(shí),你會(huì)怎么做?理想情況下,應(yīng)該研究你有哪些選擇。是購(gòu)買(mǎi)更大的服務(wù)器,還是花費(fèi)更多的編程時(shí)間使軟件能在多個(gè)服務(wù)器上運(yùn)行。讓?xiě)?yīng)用程序或數(shù)據(jù)庫(kù)能夠在多個(gè)服務(wù)器上運(yùn)行,就是所謂的橫向擴(kuò)展。繼續(xù)讓系統(tǒng)在更大的硬件上運(yùn)行,則稱為縱向擴(kuò)展。在分析過(guò)程中,通過(guò)ROI計(jì)算,結(jié)論可能會(huì)是購(gòu)買(mǎi)更大的硬件比花費(fèi)技術(shù)資源來(lái)修改應(yīng)用程序更便宜。雖然我們支持得出這種結(jié)論的分析方法,但對(duì)于超高速發(fā)展的公司和產(chǎn)品來(lái)說(shuō),這個(gè)結(jié)論可能是錯(cuò)誤的。原因在于它可能沒(méi)有考慮長(zhǎng)期成本。把具有兩個(gè)64位雙核處理器的服務(wù)器換成具有四個(gè)處理器的服務(wù)器,其成本與從中得到的新增計(jì)算資源是成比例的(約2倍)。當(dāng)我們繼續(xù)購(gòu)買(mǎi)具有更多處理器的大型服務(wù)器時(shí),謬誤就出現(xiàn)了。計(jì)算處理能力的成本曲線是條冪次定律曲線,其中成本的增長(zhǎng)與更大的服務(wù)器提供的處理能力的增長(zhǎng)不再成比例l假設(shè)你的公司在持續(xù)地成功與增長(zhǎng),那么你購(gòu)買(mǎi)更大系統(tǒng)的成本就會(huì)隨著曲線一直增長(zhǎng)。雖然你可能已經(jīng)為技術(shù)更新做了預(yù)算,但是仍可能會(huì)不得不用高得離譜的價(jià)格去購(gòu)買(mǎi)新系統(tǒng)。而如果你的系統(tǒng)是能夠橫向擴(kuò)展的,那么購(gòu)買(mǎi)的系統(tǒng)就會(huì)便宜得多。整體說(shuō)來(lái),你總的成本支出會(huì)大大增加。當(dāng)然,隨著代碼庫(kù)的增大以及系統(tǒng)復(fù)雜度的增加,用于解決問(wèn)題的編程資源的成本也會(huì)增加,但這種增長(zhǎng)是線性的。因此,在本章開(kāi)頭的分析應(yīng)該得出的結(jié)論是:盡早花時(shí)間修改代碼進(jìn)行橫向擴(kuò)展。
7個(gè)配置(內(nèi)存和硬盤(pán)等)幾乎完全相同的服務(wù)器的成本,唯一不同的是處理器的數(shù)量和每個(gè)處理器的核數(shù)量。圖中采用的是一家大型服務(wù)器供應(yīng)商的在線報(bào)價(jià)和配置。無(wú)可否認(rèn),兩個(gè)雙核處理器的計(jì)算資源與一個(gè)四核處理器的計(jì)算資源并不相等,但從成本上對(duì)比,它們的成本非常接近。請(qǐng)注意快速增長(zhǎng)的曲線。
根據(jù)我們?yōu)樯习賯€(gè)客戶服務(wù)的經(jīng)驗(yàn),這種分析產(chǎn)生的結(jié)論幾乎都是修改代碼或數(shù)據(jù)庫(kù)以進(jìn)行橫向擴(kuò)展。這就是為f什么AKF Partners認(rèn)定縱向擴(kuò)展總是失敗的原因所在。最終你總會(huì)遇到兩種情況之一,即成本不合算了,或者沒(méi)有更大型的硬件設(shè)備可用了。例如,我們有過(guò)這樣一位客戶,在把自己的顧客群分布到不同系統(tǒng)之后,他們依然有能力一直擴(kuò)展數(shù)據(jù)庫(kù)的硬件。最后,當(dāng)采用了硬件供應(yīng)商所提供的6臺(tái)最大型的服務(wù)器后,達(dá)到了極限。每臺(tái)這樣的服務(wù)器需要花費(fèi)300多萬(wàn)美金,硬件的整體花費(fèi)接近2000萬(wàn)。由于顧客數(shù)量還在增長(zhǎng),所以他們還是要竭力擴(kuò)展,于是他們同意了對(duì)數(shù)據(jù)庫(kù)進(jìn)行橫向擴(kuò)展的項(xiàng)目。他們選擇用4臺(tái)較小的服務(wù)器替換每1臺(tái)大型的服務(wù)器。每臺(tái)小服務(wù)器的成本是35萬(wàn)美金。最終,他們不僅成功實(shí)現(xiàn)了顧客增長(zhǎng)所需的擴(kuò)展,還節(jié)約了將近100萬(wàn)美金的成本。后來(lái),這家公司一直在使用這些舊系統(tǒng),直到最后這些系統(tǒng)過(guò)時(shí),才采用低成本、更小的新系統(tǒng)。
大多數(shù)系統(tǒng)從最初設(shè)計(jì)時(shí)就能夠在多臺(tái)服務(wù)器上運(yùn)行,或者能夠被很容易地改為具有這種功能。對(duì)于大多數(shù)SaaS應(yīng)用來(lái)說(shuō),只要把代碼復(fù)制到多個(gè)應(yīng)用服務(wù)器上,然后把應(yīng)用服務(wù)器放在負(fù)載均衡器上,就可以實(shí)現(xiàn)這一點(diǎn)。應(yīng)用服務(wù)器之間不需要互相通信,哪個(gè)服務(wù)器處理哪個(gè)請(qǐng)求是由負(fù)載均衡器決定的。如果某個(gè)應(yīng)用需要記錄狀態(tài),那么可以用負(fù)載均衡器的會(huì)話 cookie維護(hù)客戶瀏覽器和特定的應(yīng)用服務(wù)器之間的關(guān)聯(lián)關(guān)系。一旦客戶發(fā)起了最初請(qǐng)求,那么響應(yīng)該請(qǐng)求的服務(wù)器就會(huì)一直處理該客戶的請(qǐng)求,直到會(huì)話結(jié)束。橫向擴(kuò)展數(shù)據(jù)庫(kù)通常需要更多的計(jì)劃和編程工作,但就像本章開(kāi)頭解釋的,這種投人是值得的。我們介紹了擴(kuò)展應(yīng)用程序或數(shù)據(jù)庫(kù)的三種方法。它們?cè)贏KF擴(kuò)展立方上被標(biāo)識(shí)為X軸、Y軸和Z軸,分別對(duì)應(yīng)于復(fù)制(克隆)拆分不同的東西(服務(wù))和拆分相近的東西(客戶)
“等等!”你可能會(huì)大喊,“Intel的創(chuàng)始人之一戈登?摩爾在1965年預(yù)言過(guò),集成電路上的晶體管數(shù)目,每?jī)赡昃蜁?huì)翻一番!”不錯(cuò),近50年來(lái),摩爾定律一直是對(duì)的,這點(diǎn)令人驚嘆。問(wèn)題是,這個(gè)“定律”并不是永恒的真理,戈登·摩爾在2005年的訪談中也承認(rèn)了這一點(diǎn)。此外,如果你的公司真是一個(gè)超高速發(fā)展的網(wǎng)站建設(shè)公司,那么你的客戶數(shù)或業(yè)務(wù)量不會(huì)每?jī)赡曛环环?,很可能每個(gè)季度就翻一番。如果依據(jù)摩爾定律擴(kuò)展你的系統(tǒng),那么無(wú)論是擴(kuò)展應(yīng)用程序還是擴(kuò)展數(shù)據(jù)庫(kù),都可能會(huì)導(dǎo)致失敗。
本文地址:http://m.blackside-inc.com//article/3459.html