|
MySpace的成功對于.NET社區(qū)的開發(fā)人員來說無疑是個福音。它讓很多.NET追隨者吃下了一顆定心丸,也不斷吸引了更多的追隨者,讓我們這些追隨者都堅信使用.NET能夠做出世界上最牛x的網(wǎng)站。如果沒有MySpace,當(dāng)我們面對 Java, LAMP fans挑釁時候,我們該如何反擊呢?啞口無言還是掩面逃竄。現(xiàn)在rails就缺乏一個”MySpace”, twitter.com目前還不能讓我們完全誠服rails架構(gòu)。
MySpace從03年底上線,但注冊用戶數(shù)量早在06年就已經(jīng)達(dá)到了1億。它僅用了3年就達(dá)到了這個級別,這點(diǎn)連facebook也自嘆不如了。MySpace的主意最初來自Intermix的ChrisDeWolfe和TomAnderson,可能是受到Friendster最初的成功刺激,加上對Friendster某些功能的不滿意,他們開始花了三個月時間開發(fā)出一個和Friendster功能類似的網(wǎng)站。MySpace最初的戰(zhàn)略并沒有以獨(dú)立制作樂隊和圍繞音樂的社會網(wǎng)絡(luò)為目標(biāo)。有關(guān)音樂的主題是以用戶為中心的網(wǎng)站發(fā)展過程中自然發(fā)展出來的。有趣的是,在最初上線和開始推廣后的6到9個月,用戶增長并不成功。MySpace最初的推廣手段是在Intermix的員工(約250人)中進(jìn)行有獎競賽,讓員工們邀請他們的朋友注冊。這產(chǎn)生了一定效果,但用戶數(shù)很有限。接下來,他們利用電子郵件列表進(jìn)行郵件推廣。這有一些影響,但基本上是失敗的。這是因為電子郵件推廣不能象已經(jīng)存在的小組或組織那樣吸引能對網(wǎng)站產(chǎn)生忠實度的用戶。于是MySpace開始進(jìn)行線下推廣,對洛杉磯地區(qū)的Club、樂隊、和各種派對進(jìn)行贊助。這些努力逐漸給MySpace造成影響。更重要的是吸引了很多小的線下社區(qū)(即小組)來使用MySpace。100到1000人之間的小社區(qū)開始產(chǎn)生雪球式的病毒增長,并吸引更多的個人用戶加入。最初用戶建立起來后,MySpace開始進(jìn)一步利用Intermax的渠道和媒體關(guān)系扇風(fēng)助燃。合作伙伴的推廣結(jié)合上已有的較強(qiáng)用戶基礎(chǔ),使得MySpace從最初的成功走向騰飛。如果沒有利用傳統(tǒng)的推廣手段,MySpace恐怕不會有我們今天看到的高速增長。
為什么MySpace能如此成功,有人總結(jié)出下面幾點(diǎn)關(guān)鍵因素:
- 給用戶更多自由設(shè)計他們的MySpace主頁,讓用戶能高度地表達(dá)自我和與朋友交流。
- 縮短開發(fā)周期,使產(chǎn)品迅速適應(yīng)用戶要求。
- 最初的用戶積累依靠三種手段的結(jié)合:病毒式增長、非網(wǎng)絡(luò)廣告、網(wǎng)絡(luò)傳播合作伙伴。
- 有關(guān)產(chǎn)品和研發(fā)政策的決策,要考慮到網(wǎng)站的負(fù)載能力
OK! 上面把MySpace.com的由來大概說了一下,這對于很多處于創(chuàng)業(yè)中的朋友可能有所幫助。大體情況介紹完了,我們就來仔細(xì)分析MySpace技術(shù)細(xì)節(jié)。MySpace初期是使用Perl+Apache+MySQL架構(gòu)的,后來被Intermix內(nèi)部直接槍斃了,改用ColdFusion+Windows+Microsoft SQL Server, 因為當(dāng)時Intermix內(nèi)部的大多數(shù)開發(fā)人員更為熟悉ColdFusion。ColdFusion對我來說也是傳說中的東東,最開始聽說好像還是上大學(xué)研究adobe三劍客看到的。實際上MySpace是在2005年早期,賬戶達(dá)到9百萬后才開始使用.NETFramework來重新實現(xiàn),效果可以說是立竿見影,MySpace馬上就發(fā)現(xiàn)ASP.NET程序運(yùn)行更有效率,與ColdFusion相比,完成同樣任務(wù)需消耗的處理器能力更小。據(jù)技術(shù)總監(jiān)Whitcomb說,新代碼需要150臺服務(wù)器完成的工作,如果用ColdFusion則需要246臺。Benedetto還指出,性能上升的另一個原因可能是在變換軟件平臺,并用新語言重寫代碼的過程中,程序員復(fù)審并優(yōu)化了一些功能流程。 最終,MySpace開始大規(guī)模遷移到ASP.NET。即便剩余的少部分ColdFusion代碼,也從Cold-Fusion服務(wù)器搬到了ASP.NET,因為他們得到了BlueDragon.NET(它能將ColdFusion代碼自動重新編譯到Microsoft平臺)的幫助。
在2004年早期,MySpace用戶數(shù)增長到50萬后,當(dāng)時只有兩臺Web服務(wù)器和一個數(shù)據(jù)庫服務(wù)器,后面這臺數(shù)據(jù)庫服務(wù)器已經(jīng)已開始汗流浹背,然后重構(gòu)了數(shù)據(jù)庫的架構(gòu),采用類似MySQL的master-slave replication架構(gòu),讓兩臺slave數(shù)據(jù)庫服務(wù)器來負(fù)責(zé)read的負(fù)載,同時同步master機(jī)器最新的更新。但是數(shù)月過后,此時注冊數(shù)已經(jīng)達(dá)到1百萬至2百萬區(qū)間后,數(shù)據(jù)庫服務(wù)器開始受制于I/O容量——即它們存取數(shù)據(jù)的速度。那臺master機(jī)器已經(jīng)扛不住了。用戶的提交請求被阻塞,就像千人樂迷要擠進(jìn)只能容納幾百人的夜總會,站點(diǎn)開始遭遇“主要矛盾”。這一次的數(shù)據(jù)庫架構(gòu)按照垂直分割(Vertical Partitioning)模式設(shè)計,不同的數(shù)據(jù)庫服務(wù)于站點(diǎn)的不同功能,如登錄、用戶資料和博客。于是,站點(diǎn)的擴(kuò)展性問題看似又可以告一段落了,可以歇一陣子。垂直分割策略利于多個數(shù)據(jù)庫分擔(dān)訪問壓力,當(dāng)用戶要求增加新功能時,MySpace將投入新的數(shù)據(jù)庫予以支持它。賬戶到達(dá)2百萬后,MySpace還從存儲設(shè)備與數(shù)據(jù)庫服務(wù)器直接交互的方式切換到SAN(Storage Area NETwork,存儲區(qū)域網(wǎng)絡(luò))——用高帶寬、專門設(shè)計的網(wǎng)絡(luò)將大量磁盤存儲設(shè)備連接在一起,而數(shù)據(jù)庫連接到SAN。這項措施極大提升了系統(tǒng)性能、正常運(yùn)行時間和可靠性。當(dāng)用戶繼續(xù)增加到3百萬后,垂直分割策略也開始難以為繼。盡管站點(diǎn)的各個應(yīng)用被設(shè)計得高度獨(dú)立,但有些信息必須共享。在這個架構(gòu)里,每個數(shù)據(jù)庫必須有各自的用戶表副本——MySpace授權(quán)用戶的電子花名冊。這就意味著一個用戶注冊時,該條賬戶記錄必須在9個不同數(shù)據(jù)庫上分別創(chuàng)建。但在個別情況下,如果其中某臺數(shù)據(jù)庫服務(wù)器臨時不可到達(dá),對應(yīng)事務(wù)就會失敗,從而造成賬戶非完全創(chuàng)建,最終導(dǎo)致此用戶的該項服務(wù)無效。另外一個問題是,個別應(yīng)用如博客增長太快,那么專門為它服務(wù)的數(shù)據(jù)庫就有巨大壓力。在面對Scale up和Scale out選擇時候,MySpace當(dāng)時的決策竟然是選用Scale up,果然是有錢yin啊。應(yīng)該是想規(guī)避需要大量重寫原來軟件,以保證系統(tǒng)能在分布式服務(wù)器上運(yùn)行的風(fēng)險。不過它的scale up experience還是值得研究研究。對于某些場景來講scale up或許是個更加好的解決方案。我們這么多年來一直也享受著scale up帶來的好處,個人也感覺不久前還在用256現(xiàn)在是動不動2G,4G,xxG了,CPU也基本上是hyper-threaded, dual-core, xx-core呵呵。后來MySpace也認(rèn)識到了高端服務(wù)器極其昂貴,是購置同樣處理能力和內(nèi)存速度的多臺服務(wù)器總和的很多倍。而且,站點(diǎn)架構(gòu)師預(yù)測,從長期來看,即便是巨型數(shù)據(jù)庫,最后也會不堪重負(fù),Benedetto說,“換句話講,只要增長趨勢存在,我們最后無論如何都要走上向外擴(kuò)展的道路。” 因此,MySpace最終將目光移到分布式計算架構(gòu)——它在物理上分布的眾多服務(wù)器,整體必須邏輯上等同于單臺機(jī)器。這次,不再按站點(diǎn)功能和應(yīng)用分割數(shù)據(jù)庫,MySpace開始將它的用戶按每百萬一組分割,然后將各組的全部數(shù)據(jù)分別存入獨(dú)立的SQL Server實例。這里做的horizontal partitioning也就是我寫過的文章<<.NET架構(gòu)網(wǎng)站遇到大表該怎么辦?>>闡述的情況。好像我的規(guī)模比此時MySpace的規(guī)模還大點(diǎn)。嘿嘿,得意的笑。注意此時MySpace還不是使用.NET架構(gòu),估計是用ColdFusion扛不住了,看到.NET有那么多的優(yōu)點(diǎn),忍不住就切換到.NET Platform上了。哎,一個把持不住….?然而結(jié)果證實他們的嘗試是值得了,也成功化解了遷移帶來的巨大risk和滿足了新的快速增長負(fù)載。
通過上面一大段我們對MySpace的前期技術(shù)發(fā)展也有了一個大概的了解,同時也能學(xué)習(xí)到了一些針對高負(fù)載網(wǎng)站常見的幾個方面的解決方案。我們能夠明白Scale up和scale out的優(yōu)缺點(diǎn),Horizontal Partition和vertical Partition的作用,以及后臺數(shù)據(jù)和web server的load balance。作為一個技術(shù)人員,如果職業(yè)生涯能夠經(jīng)歷一個網(wǎng)站從幾個用戶到數(shù)千萬到數(shù)億用戶使用,也不枉費(fèi)人世走著一遭,有點(diǎn)夸張了J。
哎,上面水來水去都不是俺們哥們.NET框架的功勞,歡呼個啥呢?別介啥的一般都應(yīng)該在劇末才粉末登場對吧。.NET也是,MySpace team估計已經(jīng)感覺到他們熟悉的ColdFusion很難抗住如此快速增長的負(fù)載,而選擇.NET方案,而不是那個啥Java,呵呵。由此才可以突出俺們哥們.NET的牛x,管它多少用戶,來一百萬消滅一百萬,來一千萬消滅。。。不好意思,哥們吹的有點(diǎn)過了。。。那MySpace是怎么利用.NET來搞定它的數(shù)億用戶的負(fù)載的呢? MySpace是在2005年早期,用戶數(shù)達(dá)到9百萬后才開始使用.NET Framework來重新實現(xiàn),上文已經(jīng)講了切換到.NET后立桿見影的效果,但是當(dāng)用戶數(shù)達(dá)到1千萬時,MySpace再次遭遇存儲瓶頸問題。不過可不是.NET扛不住,而是后臺機(jī)器負(fù)載不夠均衡,導(dǎo)致某些機(jī)器過載了。具體原因之一是每數(shù)據(jù)庫1百萬賬戶的分割策略,通常情況下的確可以將壓力均分到各臺服務(wù)器,但現(xiàn)實并非一成不變。比如第七臺賬戶數(shù)據(jù)庫上線后,僅僅7天就被塞滿了,主要原因是佛羅里達(dá)一個樂隊的歌迷瘋狂注冊。最初,MySpace通過定期重新分配SAN中數(shù)據(jù),以讓其更為均衡的方法基本解決了這個問題,但這是一個人工過程,“大概需要兩個人全職工作。”Benedetto說。長期解決方案是遷移到虛擬存儲體系上,這樣,整個SAN被當(dāng)作一個巨型存儲池,不再要求每個磁盤為特定應(yīng)用服務(wù)。MySpace采用了一種新型SAN設(shè)備——來自加利福尼亞州弗里蒙特的3PARdata。當(dāng)2005年春天賬戶數(shù)達(dá)到1千7百萬時,MySpace又啟用了新的策略以減輕存儲系統(tǒng)壓力,即增加數(shù)據(jù)緩存層——位于Web服務(wù)器和數(shù)據(jù)庫服務(wù)器之間,其唯一職能是在內(nèi)存中建立被頻繁請求數(shù)據(jù)對象的副本,如此一來,不訪問數(shù)據(jù)庫也可以向Web應(yīng)用供給數(shù)據(jù)。Faint, MySpace到這個規(guī)模才想起來用Cache,真的有點(diǎn)sx了。增加緩存服務(wù)器是“一開始就應(yīng)該做的事情,但我們成長太快,以致于沒有時間坐下來好好研究這件事情。”Benedetto補(bǔ)充道。既然承認(rèn)錯誤了,就不打Benedetto的pp了。后來在2005年中期,服務(wù)賬戶數(shù)達(dá)到2千6百萬時,MySpace切換到了還處于beta測試的SQL Server 2005。轉(zhuǎn)換何太急?主流看法是2005版支持64位處理器。但Benedetto說,“這不是主要原因,盡管這也很重要;主要還是因為我們對內(nèi)存的渴求。”支持64位的數(shù)據(jù)庫可以管理更多內(nèi)存。 更多內(nèi)存就意味著更高的性能和更大的容量。原來運(yùn)行32位版本的SQL Server服務(wù)器,能同時使用的內(nèi)存最多只有4G。切換到64位,就好像加粗了輸水管的直徑。升級到SQL Server 2005和64位Windows Server 2003后,MySpace每臺服務(wù)器配備了32G內(nèi)存,后于2006年再次將配置標(biāo)準(zhǔn)提升到64G。看來MySpace還是比較喜歡用scale up的解決方案。也對,反正有$,多花點(diǎn)無所謂。后來在…...歷史車輪還會繼續(xù)向前推進(jìn),MySpace也會不斷遇到新的挑戰(zhàn),雖然這些挑戰(zhàn)我們可能一輩子都不可能遇到,但是作為一個.NET追隨者,應(yīng)該時刻追隨著這個王者的腳步,因為他是我們的領(lǐng)袖,他應(yīng)該是我們心中的信仰….
MySpace對于.NET技術(shù)的發(fā)展毋庸置疑是起了不少推動作用。因為他遇到了很多微軟自身都沒有遇到的問題,它給.NET提供了一個不斷增長的高負(fù)載的實驗平臺,來一個一個檢驗微軟的產(chǎn)品和技術(shù)。微軟在克服一個一個難題后,在下一代產(chǎn)品launch時候把這些問題fix后加入新產(chǎn)品,這樣我們這些終端客戶實際上也間接的享受到了MySpace給我們帶來的.NET技術(shù)promotion。MySpace應(yīng)該是微軟的金牌合作伙伴,在www.ASP.NET上Who is using ASP.NET?第一個就是MySpace。微軟估計開心極了,有MySpace這樣的巨無霸幫他向整個業(yè)界證明了.NET的牛x。很期望將來在中國能夠看到像MySpace這樣的網(wǎng)站,至少應(yīng)該有一些像douban使用Python這樣的互聯(lián)網(wǎng)產(chǎn)品。一枝獨(dú)秀有時不是比百花齊放更美,不是嗎?最后,如果您想成為或者已經(jīng)是.NET的fans,那么您一定要熟記下上面的關(guān)于MySpace的關(guān)鍵數(shù)字,至少能夠做到脫稿講5分鐘。下次,面對小弟請教或者xx fans挑釁時候,不用我說,你應(yīng)該知道該怎么做了。MySpace對我們來說應(yīng)該不僅僅是個互聯(lián)網(wǎng)巨無霸……
后記:多年不寫文章手腳已經(jīng)生疏了,某些段落可能不是那么的連貫,某些形容詞估計也欠推敲。請見諒,少拍點(diǎn)轉(zhuǎn)。虧得不要用筆寫,不然估計錯別字連篇,J。因為個人時間和經(jīng)歷有限,沒有辦法也沒有文學(xué)功底來完成一篇能過得去的文章,所以很多都是直接摘自互聯(lián)網(wǎng)上的文章,個人只是做了一點(diǎn)內(nèi)容的篩選和重新組織,再加上個人的一點(diǎn)感想。如果希望深入了解的朋友,建議還是應(yīng)該看一下參考文章。
作者:shawnliu
出處:http://www.cnblogs.com/liushouzhao/archive/2008/10/30/1322634.html
參考文章:
下面是一張MySpace應(yīng)用所采用的產(chǎn)品的圖表:
APPLICATION | PRODUCT | SUPPLIER |
Web application technology | Microsoft | |
Server operating system | Windows 2003 | Microsoft |
Programming language and environment | Microsoft | |
Programming language and environment | Site originally launched on Adobe's ColdFusion; remaining ColdFusion code runs under New Atlanta's BlueDragon.NET product. | Adobe, New Atlanta |
Database | SQL Server 2005 | Microsoft |
Storage area NETwork | 3PAR Utility Storage | 3PARdata |
InterNET application acceleration | NETScaler | Citrix Systems |
Server hardware | Standardized on HP 585 (see below) | Hewlett-Packard |
Ad server software | DART Enterprise | DoubleClick |
Search and keyword advertising | Google search |
NET技術(shù):MySpace:.Net架構(gòu)網(wǎng)站的王者,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。