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