自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySpace的六次重構(gòu)

運(yùn)維 系統(tǒng)運(yùn)維
myspace的六次重構(gòu)基本都是圍繞數(shù)據(jù)庫(kù)來(lái)進(jìn)行的。做了這么多年的WEB應(yīng)用,我早就知道了數(shù)據(jù)庫(kù)對(duì)于一個(gè)網(wǎng)站來(lái)說(shuō)是多么的重要。在程序沒(méi)有額外的問(wèn)題的基礎(chǔ)上,隨著流量的增大,最先出現(xiàn)問(wèn)題的往往就是數(shù)據(jù)庫(kù)。這個(gè)時(shí)候,我們能做的事非常有限。

在每個(gè)里程碑,站點(diǎn)負(fù)擔(dān)都會(huì)超過(guò)底層系統(tǒng)部分組件的最大載荷,特別是數(shù)據(jù)庫(kù)和存儲(chǔ)系統(tǒng)。接著,功能出現(xiàn)問(wèn)題,用戶失聲尖叫。最后,技術(shù)團(tuán)隊(duì)必須為此修訂系統(tǒng)策略。

雖然自2005年早期,站點(diǎn)賬戶數(shù)超過(guò)7百萬(wàn)后,系統(tǒng)架構(gòu)到目前為止保持了相對(duì)穩(wěn)定,但MySpace仍然在為SQL Server支持的同時(shí)連接數(shù)等方面繼續(xù)攻堅(jiān),Benedetto說(shuō),"我們已經(jīng)盡可能把事情做到最好"。

里程碑一:50萬(wàn)賬戶

按Benedetto 的說(shuō)法,MySpace最初的系統(tǒng)很小,只有兩臺(tái)Web服務(wù)器和一個(gè)數(shù)據(jù)庫(kù)服務(wù)器。那時(shí)使用的是Dell雙CPU、4G內(nèi)存的系統(tǒng)。

單個(gè)數(shù)據(jù)庫(kù)就意味著所有數(shù)據(jù)都存儲(chǔ)在一個(gè)地方,再由兩臺(tái)Web服務(wù)器分擔(dān)處理用戶請(qǐng)求的工作量。但就像MySpace后來(lái)的幾次底層系統(tǒng)修訂時(shí)的情況一樣,三服務(wù)器架構(gòu)很快不堪重負(fù)。此后一個(gè)時(shí)期內(nèi),MySpace基本是通過(guò)添置更多Web服務(wù)器來(lái)對(duì)付用戶暴增問(wèn)題的。

但到在2004年早期,MySpace用戶數(shù)增長(zhǎng)到50萬(wàn)后,數(shù)據(jù)庫(kù)服務(wù)器也已開(kāi)始汗流浹背。

但和Web服務(wù)器不同,增加數(shù)據(jù)庫(kù)可沒(méi)那么簡(jiǎn)單。如果一個(gè)站點(diǎn)由多個(gè)數(shù)據(jù)庫(kù)支持,設(shè)計(jì)者必須考慮的是,如何在保證數(shù)據(jù)一致性的前提下,讓多個(gè)數(shù)據(jù)庫(kù)分擔(dān)壓力。

在第二代架構(gòu)中,MySpace運(yùn)行在3個(gè)SQL Server數(shù)據(jù)庫(kù)服務(wù)器上——一個(gè)為主,所有的新數(shù)據(jù)都向它提交,然后由它復(fù)制到其他兩個(gè);另兩個(gè)全力向用戶供給數(shù)據(jù),用以在博客和個(gè)人資料欄顯示。這種方式在一段時(shí)間內(nèi)效果很好——只要增加數(shù)據(jù)庫(kù)服務(wù)器,加大硬盤(pán),就可以應(yīng)對(duì)用戶數(shù)和訪問(wèn)量的增加。

里程碑二:1-2百萬(wàn)賬戶

MySpace注冊(cè)數(shù)到達(dá)1百萬(wàn)至2百萬(wàn)區(qū)間后,數(shù)據(jù)庫(kù)服務(wù)器開(kāi)始受制于I/O容量——即它們存取數(shù)據(jù)的速度。而當(dāng)時(shí)才是2004年中,距離上次數(shù)據(jù)庫(kù)系統(tǒng)調(diào)整不過(guò)數(shù)月。用戶的提交請(qǐng)求被阻塞,就像千人樂(lè)迷要擠進(jìn)只能容納幾百人的夜總會(huì),站點(diǎn)開(kāi)始遭遇"主要矛盾",Benedetto說(shuō),這意味著 MySpace永遠(yuǎn)都會(huì)輕度落后于用戶需求。

"有人花5分鐘都無(wú)法完成留言,因此用戶總是抱怨說(shuō)網(wǎng)站已經(jīng)完蛋了。"他補(bǔ)充道。

這一次的數(shù)據(jù)庫(kù)架構(gòu)按照垂直分割模式設(shè)計(jì),不同的數(shù)據(jù)庫(kù)服務(wù)于站點(diǎn)的不同功能,如登錄、用戶資料和博客。于是,站點(diǎn)的擴(kuò)展性問(wèn)題看似又可以告一段落了,可以歇一陣子。

垂直分割策略利于多個(gè)數(shù)據(jù)庫(kù)分擔(dān)訪問(wèn)壓力,當(dāng)用戶要求增加新功能時(shí),MySpace將投入新的數(shù)據(jù)庫(kù)予以支持它。賬戶到達(dá)2百萬(wàn)后,MySpace還從存儲(chǔ)設(shè)備與數(shù)據(jù)庫(kù)服務(wù)器直接交互的方式切換到SAN(Storage Area Network,存儲(chǔ)區(qū)域網(wǎng)絡(luò))——用高帶寬、專門(mén)設(shè)計(jì)的網(wǎng)絡(luò)將大量磁盤(pán)存儲(chǔ)設(shè)備連接在一起,而數(shù)據(jù)庫(kù)連接到SAN。這項(xiàng)措施極大提升了系統(tǒng)性能、正常運(yùn)行時(shí)間和可靠性,Benedetto說(shuō)。

里程碑三:3百萬(wàn)賬戶

當(dāng)用戶繼續(xù)增加到3百萬(wàn)后,垂直分割策略也開(kāi)始難以為繼。盡管站點(diǎn)的各個(gè)應(yīng)用被設(shè)計(jì)得高度獨(dú)立,但有些信息必須共享。在這個(gè)架構(gòu)里,每個(gè)數(shù)據(jù)庫(kù)必須有各自的用戶表副本——MySpace授權(quán)用戶的電子花名冊(cè)。這就意味著一個(gè)用戶注冊(cè)時(shí),該條賬戶記錄必須在9個(gè)不同數(shù)據(jù)庫(kù)上分別創(chuàng)建。但在個(gè)別情況下,如果其中某臺(tái)數(shù)據(jù)庫(kù)服務(wù)器臨時(shí)不可到達(dá),對(duì)應(yīng)事務(wù)就會(huì)失敗,從而造成賬戶非完全創(chuàng)建,最終導(dǎo)致此用戶的該項(xiàng)服務(wù)無(wú)效。

另外一個(gè)問(wèn)題是,個(gè)別應(yīng)用如博客增長(zhǎng)太快,那么專門(mén)為它服務(wù)的數(shù)據(jù)庫(kù)就有巨大壓力。

2004年中,MySpace面臨Web開(kāi)發(fā)者稱之為"向上擴(kuò)展"對(duì)"向外擴(kuò)展"(譯者注:Scale Up和Scale Out,也稱硬件擴(kuò)展和軟件擴(kuò)展)的抉擇——要么擴(kuò)展到更大更強(qiáng)、也更昂貴的服務(wù)器上,要么部署大量相對(duì)便宜的服務(wù)器來(lái)分擔(dān)數(shù)據(jù)庫(kù)壓力。一般來(lái)說(shuō),大型站點(diǎn)傾向于向外擴(kuò)展,因?yàn)檫@將讓它們得以保留通過(guò)增加服務(wù)器以提升系統(tǒng)能力的后路。

但成功地向外擴(kuò)展架構(gòu)必須解決復(fù)雜的分布式計(jì)算問(wèn)題,大型站點(diǎn)如Google、Yahoo和Amazon.com,都必須自行研發(fā)大量相關(guān)技術(shù)。以Google為例,它構(gòu)建了自己的分布式文件系統(tǒng)。

另外,向外擴(kuò)展策略還需要大量重寫(xiě)原來(lái)軟件,以保證系統(tǒng)能在分布式服務(wù)器上運(yùn)行。"搞不好,開(kāi)發(fā)人員的所有工作都將白費(fèi)",Benedetto說(shuō)。

因此,MySpace首先將重點(diǎn)放在了向上擴(kuò)展上,花費(fèi)了大約1個(gè)半月時(shí)間研究升級(jí)到32CPU服務(wù)器以管理更大數(shù)據(jù)庫(kù)的問(wèn)題。Benedetto說(shuō),"那時(shí)候,這個(gè)方案看似可能解決一切問(wèn)題。"如穩(wěn)定性,更棒的是對(duì)現(xiàn)有軟件幾乎沒(méi)有改動(dòng)要求。

糟糕的是,高端服務(wù)器極其昂貴,是購(gòu)置同樣處理能力和內(nèi)存速度的多臺(tái)服務(wù)器總和的很多倍。而且,站點(diǎn)架構(gòu)師預(yù)測(cè),從長(zhǎng)期來(lái)看,即便是巨型數(shù)據(jù)庫(kù),最后也會(huì)不堪重負(fù),Benedetto說(shuō),"換句話講,只要增長(zhǎng)趨勢(shì)存在,我們最后無(wú)論如何都要走上向外擴(kuò)展的道路。"

因此,MySpace最終將目光移到分布式計(jì)算架構(gòu)——它在物理上分布的眾多服務(wù)器,整體必須邏輯上等同于單臺(tái)機(jī)器。拿數(shù)據(jù)庫(kù)來(lái)說(shuō),就不能再像過(guò)去那樣將應(yīng)用拆分,再以不同數(shù)據(jù)庫(kù)分別支持,而必須將整個(gè)站點(diǎn)看作一個(gè)應(yīng)用?,F(xiàn)在,數(shù)據(jù)庫(kù)模型里只有一個(gè)用戶表,支持博客、個(gè)人資料和其他核心功能的數(shù)據(jù)都存儲(chǔ)在相同數(shù)據(jù)庫(kù)。

既然所有的核心數(shù)據(jù)邏輯上都組織到一個(gè)數(shù)據(jù)庫(kù),那么MySpace必須找到新的辦法以分擔(dān)負(fù)荷——顯然,運(yùn)行在普通硬件上的單個(gè)數(shù)據(jù)庫(kù)服務(wù)器是無(wú)能為力的。這次,不再按站點(diǎn)功能和應(yīng)用分割數(shù)據(jù)庫(kù),MySpace開(kāi)始將它的用戶按每百萬(wàn)一組分割,然后將各組的全部數(shù)據(jù)分別存入獨(dú)立的SQL Server實(shí)例。目前,MySpace的每臺(tái)數(shù)據(jù)庫(kù)服務(wù)器實(shí)際運(yùn)行兩個(gè)SQL Server實(shí)例,也就是說(shuō)每臺(tái)服務(wù)器服務(wù)大約2百萬(wàn)用戶。Benedetto指出,以后還可以按照這種模式以更小粒度劃分架構(gòu),從而優(yōu)化負(fù)荷分擔(dān)。

當(dāng)然,還是有一個(gè)特殊數(shù)據(jù)庫(kù)保存了所有賬戶的名稱和密碼。用戶登錄后,保存了他們其他數(shù)據(jù)的數(shù)據(jù)庫(kù)再接管服務(wù)。特殊數(shù)據(jù)庫(kù)的用戶表雖然龐大,但它只負(fù)責(zé)用戶登錄,功能單一,所以負(fù)荷還是比較容易控制的。

里程碑四:9百萬(wàn)到1千7百萬(wàn)賬戶

2005年早期,賬戶達(dá)到9百萬(wàn)后,MySpace開(kāi)始用Microsoft的C#編寫(xiě) ASP.NET程序。C#是C語(yǔ)言的最新派生語(yǔ)言,吸收了C++和Java的優(yōu)點(diǎn),依托于Microsoft .NET框架(Microsoft為軟件組件化和分布式計(jì)算而設(shè)計(jì)的模型架構(gòu))。ASP.NET則由編寫(xiě)Web站點(diǎn)腳本的ASP技術(shù)演化而來(lái),是 Microsoft目前主推的Web站點(diǎn)編程環(huán)境。

可以說(shuō)是立竿見(jiàn)影, MySpace馬上就發(fā)現(xiàn)ASP.NET程序運(yùn)行更有效率,與ColdFusion相比,完成同樣任務(wù)需消耗的處理器能力更小。據(jù)技術(shù)總監(jiān) Whitcomb說(shuō),新代碼需要150臺(tái)服務(wù)器完成的工作,如果用ColdFusion則需要246臺(tái)。Benedetto還指出,性能上升的另一個(gè)原因可能是在變換軟件平臺(tái),并用新語(yǔ)言重寫(xiě)代碼的過(guò)程中,程序員復(fù)審并優(yōu)化了一些功能流程。

最終,MySpace開(kāi)始大規(guī)模遷移到ASP.NET。即便剩余的少部分ColdFusion代碼,也從Cold-Fusion服務(wù)器搬到了 ASP.NET,因?yàn)樗麄兊玫搅薆lueDragon.NET(喬治亞州阿爾法利塔New Atlanta Communications公司的產(chǎn)品,它能將ColdFusion代碼自動(dòng)重新編譯到Microsoft平臺(tái))的幫助。

賬戶達(dá)到1千萬(wàn)時(shí),MySpace再次遭遇存儲(chǔ)瓶頸問(wèn)題。SAN的引入解決了早期一些性能問(wèn)題,但站點(diǎn)目前的要求已經(jīng)開(kāi)始周期性超越SAN的I/O容量——即它從磁盤(pán)存儲(chǔ)系統(tǒng)讀寫(xiě)數(shù)據(jù)的極限速度。

原因之一是每數(shù)據(jù)庫(kù)1百萬(wàn)賬戶的分割策略,通常情況下的確可以將壓力均分到各臺(tái)服務(wù)器,但現(xiàn)實(shí)并非一成不變。比如第七臺(tái)賬戶數(shù)據(jù)庫(kù)上線后,僅僅7天就被塞滿了,主要原因是佛羅里達(dá)一個(gè)樂(lè)隊(duì)的歌迷瘋狂注冊(cè)。

某個(gè)數(shù)據(jù)庫(kù)可能因?yàn)槿魏卧?,在任何時(shí)候遭遇主要負(fù)荷,這時(shí),SAN中綁定到該數(shù)據(jù)庫(kù)的磁盤(pán)存儲(chǔ)設(shè)備簇就可能過(guò)載。"SAN讓磁盤(pán)I/O能力大幅提升了,但將它們綁定到特定數(shù)據(jù)庫(kù)的做法是錯(cuò)誤的。"Benedetto說(shuō)。

最初,MySpace通過(guò)定期重新分配SAN中數(shù)據(jù),以讓其更為均衡的方法基本解決了這個(gè)問(wèn)題,但這是一個(gè)人工過(guò)程,"大概需要兩個(gè)人全職工作。"Benedetto說(shuō)。

長(zhǎng)期解決方案是遷移到虛擬存儲(chǔ)體系上,這樣,整個(gè)SAN被當(dāng)作一個(gè)巨型存儲(chǔ)池,不再要求每個(gè)磁盤(pán)為特定應(yīng)用服務(wù)。MySpace目前采用了一種新型SAN設(shè)備——來(lái)自加利福尼亞州弗里蒙特的3PARdata。

在3PAR的系統(tǒng)里,仍能在邏輯上按容量劃分?jǐn)?shù)據(jù)存儲(chǔ),但它不再被綁定到特定磁盤(pán)或磁盤(pán)簇,而是散布于大量磁盤(pán)。這就使均分?jǐn)?shù)據(jù)訪問(wèn)負(fù)荷成為可能。當(dāng)數(shù)據(jù)庫(kù)需要寫(xiě)入一組數(shù)據(jù)時(shí),任何空閑磁盤(pán)都可以馬上完成這項(xiàng)工作,而不再像以前那樣阻塞在可能已經(jīng)過(guò)載的磁盤(pán)陣列處。而且,因?yàn)槎鄠€(gè)磁盤(pán)都有數(shù)據(jù)副本,讀取數(shù)據(jù)時(shí),也不會(huì)使SAN的任何組件過(guò)載。

當(dāng)2005年春天賬戶數(shù)達(dá)到1千7百萬(wàn)時(shí),MySpace又啟用了新的策略以減輕存儲(chǔ)系統(tǒng)壓力,即增加數(shù)據(jù)緩存層——位于Web服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器之間,其唯一職能是在內(nèi)存中建立被頻繁請(qǐng)求數(shù)據(jù)對(duì)象的副本,如此一來(lái),不訪問(wèn)數(shù)據(jù)庫(kù)也可以向Web應(yīng)用供給數(shù)據(jù)。換句話說(shuō),100個(gè)用戶請(qǐng)求同一份資料,以前需要查詢數(shù)據(jù)庫(kù)100次,而現(xiàn)在只需1次,其余都可從緩存數(shù)據(jù)中獲得。當(dāng)然如果頁(yè)面變化,緩存的數(shù)據(jù)必須從內(nèi)存擦除,然后重新從數(shù)據(jù)庫(kù)獲取——但在此之前,數(shù)據(jù)庫(kù)的壓力已經(jīng)大大減輕,整個(gè)站點(diǎn)的性能得到提升。

緩存區(qū)還為那些不需要記入數(shù)據(jù)庫(kù)的數(shù)據(jù)提供了驛站,比如為跟蹤用戶會(huì)話而創(chuàng)建的臨時(shí)文件——Benedetto坦言他需要在這方面補(bǔ)課,"我是數(shù)據(jù)庫(kù)存儲(chǔ)狂熱分子,因此我總是想著將萬(wàn)事萬(wàn)物都存到數(shù)據(jù)庫(kù)。"但將像會(huì)話跟蹤這類的數(shù)據(jù)也存到數(shù)據(jù)庫(kù),站點(diǎn)將陷入泥沼。

增加緩存服務(wù)器是"一開(kāi)始就應(yīng)該做的事情,但我們成長(zhǎng)太快,以致于沒(méi)有時(shí)間坐下來(lái)好好研究這件事情。"Benedetto補(bǔ)充道。

里程碑五:2千6百萬(wàn)賬戶

2005年中期,服務(wù)賬戶數(shù)達(dá)到2千6百萬(wàn)時(shí),MySpace切換到了還處于beta測(cè)試的SQL Server 2005。轉(zhuǎn)換何太急?主流看法是2005版支持64位處理器。但Benedetto說(shuō),"這不是主要原因,盡管這也很重要;主要還是因?yàn)槲覀儗?duì)內(nèi)存的渴求。"支持64位的數(shù)據(jù)庫(kù)可以管理更多內(nèi)存。

更多內(nèi)存就意味著更高的性能和更大的容量。原來(lái)運(yùn)行32位版本的SQL Server服務(wù)器,能同時(shí)使用的內(nèi)存最多只有4G。切換到64位,就好像加粗了輸水管的直徑。升級(jí)到SQL Server 2005和64位Windows Server 2003后,MySpace每臺(tái)服務(wù)器配備了32G內(nèi)存,后于2006年再次將配置標(biāo)準(zhǔn)提升到64G。

意外錯(cuò)誤

如果沒(méi)有對(duì)系統(tǒng)架構(gòu)的歷次修改與升級(jí),MySpace根本不可能走到今天。但是,為什么系統(tǒng)還經(jīng)常吃撐著了?很多用戶抱怨的"意外錯(cuò)誤"是怎么引起的呢?

原因之一是MySpace對(duì)Microsoft的Web技術(shù)的應(yīng)用已經(jīng)進(jìn)入連Microsoft自己也才剛剛開(kāi)始探索的領(lǐng)域。比如11月,超出SQL Server最大同時(shí)連接數(shù),MySpace系統(tǒng)崩潰。Benedetto說(shuō),這類可能引發(fā)系統(tǒng)崩潰的情況大概三天才會(huì)出現(xiàn)一次,但仍然過(guò)于頻繁了,以致惹人惱怒。一旦數(shù)據(jù)庫(kù)罷工,"無(wú)論這種情況什么時(shí)候發(fā)生,未緩存的數(shù)據(jù)都不能從SQL Server獲得,那么你就必然看到一個(gè)'意外錯(cuò)誤'提示。"他解釋說(shuō)。

去年夏天,MySpace的Windows 2003多次自動(dòng)停止服務(wù)。后來(lái)發(fā)現(xiàn)是操作系統(tǒng)一個(gè)內(nèi)置功能惹的禍——預(yù)防分布式拒絕服務(wù)攻擊(黑客使用很多客戶機(jī)向服務(wù)器發(fā)起大量連接請(qǐng)求,以致服務(wù)器癱瘓)。MySpace和其他很多頂級(jí)大站點(diǎn)一樣,肯定會(huì)經(jīng)常遭受攻擊,但它應(yīng)該從網(wǎng)絡(luò)級(jí)而不是依靠Windows本身的功能來(lái)解決問(wèn)題——否則,大量 MySpace合法用戶連接時(shí)也會(huì)引起服務(wù)器反擊。

"我們花了大約一個(gè)月時(shí)間尋找Windows 2003服務(wù)器自動(dòng)停止的原因。"Benedetto說(shuō)。最后,通過(guò)Microsoft的幫助,他們才知道該怎么通知服務(wù)器:"別開(kāi)槍,是友軍。"

緊接著是在去年7月某個(gè)周日晚上,MySpace總部所在地洛杉磯停電,造成整個(gè)系統(tǒng)停運(yùn)12小時(shí)。大型Web站點(diǎn)通常要在地理上分布配置多個(gè)數(shù)據(jù)中心以預(yù)防單點(diǎn)故障。本來(lái),MySpace還有其他兩個(gè)數(shù)據(jù)中心以應(yīng)對(duì)突發(fā)事件,但Web服務(wù)器都依賴于部署在洛杉磯的SAN。沒(méi)有洛杉磯的SAN,Web服務(wù)器除了懇求你耐心等待,不能提供任何服務(wù)。

Benedetto說(shuō),主數(shù)據(jù)中心的可靠性通過(guò)下列措施保證:可接入兩張不同電網(wǎng),另有后備電源和一臺(tái)儲(chǔ)備有30天燃料的發(fā)電機(jī)。但在這次事故中,不僅兩張電網(wǎng)失效,而且在切換到備份電源的過(guò)程中,操作員燒掉了主動(dòng)力線路。

2007年中,MySpace在另兩個(gè)后備站點(diǎn)上也建設(shè)了SAN。這對(duì)分擔(dān)負(fù)荷大有幫助——正常情況下,每個(gè)SAN都能負(fù)擔(dān)三分之一的數(shù)據(jù)訪問(wèn)量。而在緊急情況下,任何一個(gè)站點(diǎn)都可以獨(dú)立支撐整個(gè)服務(wù),Benedetto說(shuō)。

MySpace仍然在為提高穩(wěn)定性?shī)^斗,雖然很多用戶表示了足夠信任且能原諒偶現(xiàn)的錯(cuò)誤頁(yè)面。

"作為開(kāi)發(fā)人員,我憎惡Bug,它太氣人了。"Dan Tanner這個(gè)31歲的德克薩斯軟件工程師說(shuō),他通過(guò)MySpace重新聯(lián)系到了高中和大學(xué)同學(xué)。"不過(guò),MySpace對(duì)我們的用處很大,因此我們可以原諒偶發(fā)的故障和錯(cuò)誤。" Tanner說(shuō),如果站點(diǎn)某天出現(xiàn)故障甚至崩潰,恢復(fù)以后他還是會(huì)繼續(xù)使用。

這就是為什么Drew在論壇里咆哮時(shí),大部分用戶都告訴他應(yīng)該保持平靜,如果等幾分鐘,問(wèn)題就會(huì)解決的原因。Drew無(wú)法平靜,他寫(xiě)道,"我已經(jīng)兩次給 MySpace發(fā)郵件,而它說(shuō)一小時(shí)前還是正常的,現(xiàn)在出了點(diǎn)問(wèn)題……完全是一堆廢話。"另一個(gè)用戶回復(fù)說(shuō),"畢竟它是免費(fèi)的。"Benedetto坦承 100%的可靠性不是他的目標(biāo)。"它不是銀行,而是一個(gè)免費(fèi)的服務(wù)。"他說(shuō)。

換句話說(shuō),MySpace的偶發(fā)故障可能造成某人最后更新的個(gè)人資料丟失,但并不意味著網(wǎng)站弄丟了用戶的錢財(cái)。"關(guān)鍵是要認(rèn)識(shí)到,與保證站點(diǎn)性能相比,丟失少許數(shù)據(jù)的故障是可接受的。"Benedetto說(shuō)。所以,MySpace甘冒丟失2分鐘到2小時(shí)內(nèi)任意點(diǎn)數(shù)據(jù)的危險(xiǎn),在SQL Server配置里延長(zhǎng)了"checkpoint"操作——它將待更新數(shù)據(jù)永久記錄到磁盤(pán)——的間隔時(shí)間,因?yàn)檫@樣做可以加快數(shù)據(jù)庫(kù)的運(yùn)行。

Benedetto說(shuō),同樣,開(kāi)發(fā)人員還經(jīng)常在幾個(gè)小時(shí)內(nèi)就完成構(gòu)思、編碼、測(cè)試和發(fā)布全過(guò)程。這有引入Bug的風(fēng)險(xiǎn),但這樣做可以更快實(shí)現(xiàn)新功能。而且,因?yàn)檫M(jìn)行大規(guī)模真實(shí)測(cè)試不具可行性,他們的測(cè)試通常是在僅以部分活躍用戶為對(duì)象,且用戶對(duì)軟件新功能和改進(jìn)不知就里的情況下進(jìn)行的。因?yàn)槭聦?shí)上不可能做真實(shí)的加載測(cè)試,他們做的測(cè)試通常都是針對(duì)站點(diǎn)。

"我們犯過(guò)大量錯(cuò)誤,"Benedetto說(shuō),"但到頭來(lái),我認(rèn)為我們做對(duì)的還是比做錯(cuò)的多。"

MySpace Tech Roster

January 16, 2007

By David F. Carr

我的一些思考:

看完這篇文章首先很驚訝myspace居然是基于.net平臺(tái)的系統(tǒng),windows2003+asp.net+IIS+SQLSERVER,雖然我是一個(gè)純粹的MS技術(shù)者,但是對(duì)于MS的WEB應(yīng)用總是有點(diǎn)疑慮,我的擔(dān)心大概是來(lái)自于到處都在鼓吹的LAMP,我并不敵視開(kāi)源,但是我承認(rèn),它給我?guī)?lái)了很大的壓力.看了這篇文章,我有點(diǎn)慶幸也有點(diǎn)笑自己之前的迂腐,其實(shí)對(duì)于技術(shù)來(lái)說(shuō),優(yōu)劣只在于開(kāi)發(fā)者本身,myspace的六次重構(gòu),很好的說(shuō)明了這一點(diǎn).
我們常常講分布式系統(tǒng),這個(gè)概念很大,簡(jiǎn)單點(diǎn)說(shuō),就是把系統(tǒng)給拆分開(kāi)來(lái),把本來(lái)一臺(tái)服務(wù)器做的事,分到兩臺(tái)服務(wù)器來(lái)做.如果只在一臺(tái)服務(wù)器上部署兩個(gè)程序來(lái)執(zhí)行之前一個(gè)程序做的事,我認(rèn)為那不叫分布式,也是完全沒(méi)必要的,分布式的原則是"后分布"(lazy distribute),因?yàn)檫@本身是件損耗性能的工作,如果不能通過(guò)它來(lái)獲得明顯的性能提升,那為什么還要分布式?

myspace的六次重構(gòu)基本都是圍繞數(shù)據(jù)庫(kù)來(lái)進(jìn)行的,做了這么多年的WEB應(yīng)用,我早就知道了數(shù)據(jù)庫(kù)對(duì)于一個(gè)網(wǎng)站來(lái)說(shuō)是多么的重要.在程序沒(méi)有額外的問(wèn)題的基礎(chǔ)上,隨著流量的增大,最先出現(xiàn)問(wèn)題的,往往就是數(shù)據(jù)庫(kù).癥狀通常為,數(shù)據(jù)庫(kù)查詢/ 更新變的非常非常的慢,經(jīng)常超時(shí)等.

這個(gè)時(shí)候,我們能做的事非常有限,無(wú)非是調(diào)整下SQLServer的內(nèi)存大小,給服務(wù)器加內(nèi)存換速度更快的硬盤(pán)等.如果要認(rèn)真的解決這個(gè)問(wèn)題,對(duì)于一般的開(kāi)發(fā)者來(lái)說(shuō),都會(huì)自然的想到拆庫(kù).海量的數(shù)據(jù)查詢對(duì)于SQL來(lái)說(shuō)本就是不該存在的,無(wú)論你的數(shù)據(jù)庫(kù)優(yōu)化的多么好,比如你用的Oracle,數(shù)據(jù)吞吐量很大,難道查詢100W的記錄會(huì)比SQL查詢1W條更快嗎?拆庫(kù)又分本地?cái)?shù)據(jù)庫(kù)分多個(gè)表和多個(gè)服務(wù)器分多個(gè)庫(kù),執(zhí)行順序?yàn)橛汕暗结?當(dāng)數(shù)據(jù)庫(kù)的壓力由海量查詢變成磁盤(pán)IO之后,就需要更多的數(shù)據(jù)庫(kù)服務(wù)器了.

除了硬件手段,更常用的是采用緩存.myspace直到第四次改版的后期才開(kāi)始正式的引入緩存策略,這確實(shí)是個(gè)失誤,如果從最開(kāi)始就考慮到緩存的作用的話,那么數(shù)據(jù)庫(kù)服務(wù)器至少不會(huì)膨脹的那么快,也可以有更多的時(shí)間來(lái)思考更好的架構(gòu).當(dāng)然,正如Benedetto所說(shuō),這是件一開(kāi)始就該考慮的事,但是 myspace成長(zhǎng)的太快了.

不是誰(shuí)都有機(jī)會(huì)來(lái)為一個(gè)流量在世界上排名前10的網(wǎng)站來(lái)設(shè)計(jì)架構(gòu),因此myspace的后面的若干次重構(gòu),對(duì)于普通的開(kāi)發(fā)者已經(jīng)很難接觸了,我認(rèn)為,在第三個(gè)里程碑時(shí),也就是通過(guò)服務(wù)器的橫向擴(kuò)展來(lái)實(shí)現(xiàn)的分布式,已經(jīng)足夠支持巨型網(wǎng)站的應(yīng)用了.myspace是個(gè)交互型特別強(qiáng)的網(wǎng)站,用戶執(zhí)行的請(qǐng)求數(shù)會(huì)遠(yuǎn)大于一般的網(wǎng)站,這也是它巨大的數(shù)據(jù)庫(kù)壓力的來(lái)源.
最后總結(jié)一下WEB系統(tǒng)分布式的要點(diǎn):

  1. 不到需要,絕對(duì)不要分布
  2. 分布式應(yīng)該圍繞數(shù)據(jù)庫(kù)展開(kāi)
  3. 分布式系統(tǒng)本身具有很強(qiáng)的擴(kuò)展性,系統(tǒng)性能的提升和硬件的增加是線性關(guān)系.

via 武凱的Blog

責(zé)任編輯:yangsai 來(lái)源: 武凱的Blog
相關(guān)推薦

2021-04-29 23:45:07

函數(shù)式接口可用性

2018-09-29 05:04:16

2013-05-23 13:55:19

綠色通信技術(shù)通信技術(shù)網(wǎng)絡(luò)通信

2014-11-18 15:33:06

阿里云降價(jià)

2024-01-11 17:01:55

2024-04-17 08:18:22

MyBatis批量插入SQL

2009-02-23 09:56:25

MySpace首席執(zhí)行官

2017-07-07 16:07:41

2022-02-17 11:24:21

KubernetesCNCF云原生

2009-03-25 08:52:01

MySpaceWebIM

2009-03-31 08:36:10

Windows MobSilverlight移動(dòng)OS

2024-11-18 08:51:56

2009-02-13 13:42:42

MySpaceFacebook社交網(wǎng)絡(luò)

2021-08-03 08:13:48

重構(gòu)API代碼

2021-11-02 17:36:13

Python驗(yàn)證程序員

2010-02-20 11:24:50

2009-04-01 08:24:26

Windows Mob移動(dòng)OS微軟

2009-03-04 08:36:47

MySpace首席運(yùn)營(yíng)官離職

2010-04-15 12:50:10

影響力領(lǐng)袖柳傳志
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)