國(guó)內(nèi)外大型SNS網(wǎng)站后臺(tái)架構(gòu)對(duì)比
原創(chuàng)【51CTO觀察】要問時(shí)下什么類型的站點(diǎn)人氣最旺?答案當(dāng)屬SNS網(wǎng)站。短短幾年的時(shí)間,SNS便迅速確立了Web 2.0核心的地位。用戶的增長(zhǎng)量之快更是讓人咂舌,而Facebook訪問量首次超越Google的消息也讓人覺得SNS的前途不可限量。當(dāng)然,面對(duì)龐大且繁瑣的數(shù)據(jù)量、面對(duì)應(yīng)用的高復(fù)雜度及用戶體驗(yàn),大型SNS站點(diǎn)的后臺(tái)架構(gòu)成為了51CTO開發(fā)頻道近期關(guān)注的重點(diǎn)之一。
在連續(xù)報(bào)道了《世界最大的PHP站點(diǎn) Facebook后臺(tái)技術(shù)探秘》及《專訪人人網(wǎng)黃晶:SNS網(wǎng)站后臺(tái)架構(gòu)探秘》之后,除了看到SNS網(wǎng)站后臺(tái)的獨(dú)特風(fēng)景之外,我們也看到了作為國(guó)內(nèi)外SNS站點(diǎn)的代表,F(xiàn)acebook和人人網(wǎng)在后臺(tái)技術(shù)應(yīng)用上還是有很多不同的地方,當(dāng)然,造成這種不同的原因有很多。這里我們將對(duì)比Facebook和人人網(wǎng)的后臺(tái)架構(gòu),在找出這些差異的同時(shí),我們也能夠看出,跟國(guó)外相比,國(guó)內(nèi)SNS網(wǎng)站的后臺(tái)技術(shù)差距還有多大?差距在哪里?
后臺(tái)語言的選擇
作為一個(gè)大型站點(diǎn),后臺(tái)語言的選擇意味著不同的架構(gòu)路線、以及不同的開發(fā)框架??紤]到SNS網(wǎng)站后臺(tái)架構(gòu)的復(fù)雜性,可選擇的語言并不多,F(xiàn)acebook作為一個(gè)大型LAMP網(wǎng)站,選擇了PHP;而人人網(wǎng)則使用Java。當(dāng)然,PHP和Java各具優(yōu)勢(shì),PHP+MySQL的黃金搭檔被無數(shù)站點(diǎn)所使用;在評(píng)價(jià)Java的優(yōu)勢(shì)時(shí),黃晶老師說道,“而當(dāng)項(xiàng)目日漸復(fù)雜的時(shí)候,Java則能通過其良好的OO特性,保持非常好的模塊性,也有益于網(wǎng)站重構(gòu)。”
后臺(tái)語言的選擇有很多因素,選擇哪種語言也并不重要,關(guān)鍵是要適合相應(yīng)的生產(chǎn)環(huán)境,這里比較PHP與Java的優(yōu)劣并沒有太大的意義。但要說明的是,每種語言都有它的劣勢(shì),如何進(jìn)行有效的優(yōu)化才是開發(fā)者們需要思考的,就像Facebook為PHP量身打造了HipHop那樣。
數(shù)據(jù)庫
在后臺(tái)架構(gòu)中,數(shù)據(jù)庫一直是我們關(guān)心的重點(diǎn)。曾經(jīng)日壯山河的關(guān)系型數(shù)據(jù)庫,在NoSQL運(yùn)動(dòng)下,仿佛顯得日薄西山,這句話用在SNS站點(diǎn)中再合適不過了。沒錯(cuò),由于SNS站點(diǎn)的高復(fù)雜性,其對(duì)數(shù)據(jù)庫的要求非常高,高性能、可擴(kuò)展性以及可用性,缺一不可。
Facebook并不是一個(gè)傳統(tǒng)意義上的LAMP站點(diǎn),MySQL也主要作為一個(gè)Key-value的持久性存儲(chǔ)使用,而它的存儲(chǔ)系統(tǒng)則是NoSQL運(yùn)動(dòng)的一個(gè)重要組成部分——Cassandra,它的特點(diǎn)也正是SNS站點(diǎn)所需求的,盡管很多人認(rèn)為NoSQL還不夠成熟,缺乏可靠性,但Facebook的成功卻是一個(gè)活生生的例子。
Facebook數(shù)據(jù)庫架構(gòu)圖,請(qǐng)點(diǎn)擊原圖查看
通過黃晶老師的介紹我們了解到,其實(shí)人人網(wǎng)也不只是在使用MySQL。Nuclear是人人網(wǎng)團(tuán)隊(duì)自主研發(fā)的分布式KV存儲(chǔ)系統(tǒng),目前已經(jīng)在逐步的試用。關(guān)于Nuclear的詳細(xì)介紹,可以參考人人網(wǎng)UGC團(tuán)隊(duì)博客的介紹:http://ugc.renren.com/2010/01/21/ugc-nuclear-guide-use/。
從中我們不難看出,關(guān)系型數(shù)據(jù)庫已經(jīng)不能滿足大型SNS站點(diǎn)的需求,在外國(guó)大膽使用NoSQL的同時(shí)(包括Facebook、Twitter等),國(guó)內(nèi)對(duì)NoSQL的使用還是顯得比較謹(jǐn)慎,技術(shù)水平的差距,在這點(diǎn)上確實(shí)有所體現(xiàn)。從長(zhǎng)遠(yuǎn)角度講,特別是在SNS領(lǐng)域,NoSQL必將會(huì)逐步代替?zhèn)鹘y(tǒng)的關(guān)系型數(shù)據(jù)庫。
緩存
緩存技術(shù)在后臺(tái)架構(gòu)中扮演著重要的角色。對(duì)于SNS站點(diǎn)來說,僅僅依靠數(shù)據(jù)庫、Web服務(wù)器等軟件的自身緩存機(jī)制是絕對(duì)不能滿足要求的。Memcached是人人網(wǎng)和Facebook都用到的一個(gè)分布式內(nèi)存緩存系統(tǒng),其已成為互聯(lián)網(wǎng)最有名氣的軟件之一了。當(dāng)然,緩存的手段是多種多樣的,僅僅保證日常后臺(tái)的穩(wěn)定運(yùn)行也是不夠的。面對(duì)一些突發(fā)事件,緩存機(jī)制更是尤為重要,特別是在數(shù)據(jù)庫服務(wù)器與Web服務(wù)器上。
圖片存儲(chǔ)架構(gòu)
圖片會(huì)給Web服務(wù)器帶來不小的壓力,特別是Facebook處理的圖片量(每個(gè)月超過30億張照片被上傳),非常驚人!對(duì)此,F(xiàn)acebook專門開發(fā)了一套圖片存儲(chǔ)架構(gòu)——Haystack。關(guān)于Haystack的詳細(xì)介紹,請(qǐng)參考:Facebook圖片存儲(chǔ)架構(gòu)技術(shù)全解析。
相比于Facebook,人人網(wǎng)并沒有一套完整的圖片存儲(chǔ)架構(gòu)體系。當(dāng)然,作為人人網(wǎng)的用戶,能夠感覺到進(jìn)行上傳圖片等一些操作,還是很流暢的。說明以目前的人人網(wǎng)圖片處理技術(shù),能夠滿足目前用戶的需求,以及后臺(tái)的流暢運(yùn)行。但架構(gòu)總要著眼于未來,開發(fā)一套完整的、高效的架構(gòu)體系,才是最佳的解決方案。
SNS后臺(tái)技術(shù)未來發(fā)展趨勢(shì)
相比于其他類型的站點(diǎn),SNS網(wǎng)站后臺(tái)架構(gòu)更為復(fù)雜。關(guān)于SNS后臺(tái)技術(shù)未來發(fā)展趨勢(shì)問題,黃晶也表示,鑒于SNS網(wǎng)站的一些業(yè)務(wù)特點(diǎn),在后臺(tái)技術(shù)中,人人網(wǎng)最關(guān)注的仍然是高性能,可擴(kuò)展性,高可用性,所以SNS網(wǎng)站架構(gòu)中特別需要一個(gè)能靈活應(yīng)對(duì)業(yè)務(wù)變化的一套健壯的分布式系統(tǒng)。
在對(duì)比過人人網(wǎng)與Facebook的后臺(tái)架構(gòu)之后,我們不難看出,除了整體架構(gòu)的系統(tǒng)性能之外,對(duì)于其中每個(gè)細(xì)節(jié)的把握,更是我們國(guó)內(nèi)架構(gòu)師們需要仔細(xì)思考的,這同時(shí)也需要我們的技術(shù)人員提高自身能力、敢于使用先進(jìn)的技術(shù)及應(yīng)用、更要勇于創(chuàng)新。
【51CTO獨(dú)家特稿,轉(zhuǎn)載請(qǐng)標(biāo)明出處及作者!】
【編輯推薦】