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