人人網做爲國內大型SNS站點的表明,其目前已經擁有真實註冊用戶超過7000萬、PV達到了4億、日登陸2200萬人次。面對如此龐大的訪問量,人人網的後臺架構是怎樣的一番景象呢?關於此,51CTO獨家專訪了現任人人網產品技術高級總監黃晶老師。數據庫
51CTO:做爲國內大型SNS站點的表明,咱們知道人人網後臺主要採用Java語言編寫,同其餘形式的站點相比,SNS站點在網站架構方面有什麼樣的特色?緩存
黃晶老師:SNS網站用戶數據量龐大且關係複雜,對實時性要求很是高,所以要求SNS網站架構要有很強的水平擴展性。服務器
51CTO:在後臺語言的選擇上,有其餘大型SNS站點使用PHP,人人網則選擇了Java,使用Java的優點在體現哪些方面?多線程
黃晶老師:Java的優點體如今當項目日漸複雜的時候,能夠經過Java良好的OO特性,保持很是好的模塊性,在進行網站重構的時候比較方便,在代碼量增大的時候也可保持良好的可管理性。架構
51CTO:如今不少大型網站的後臺都使用了大量的開源軟件,人人網是否也是如此呢?我們的開發團隊是否也在開發本身的框架呢?併發
黃晶老師:人人網也使用了大量開源軟件,好比MySQL、Memcached、ICE、Hadoop等,同時咱們也根據業務須要研發了本身的框架,好比MVC框架,分佈式KV存儲系統。框架
51CTO:一個網站在發展過程當中,後臺都會經歷不斷的重構,從初期的校內網、到如今的人人網,網站架構最大的變化在哪?分佈式
黃晶老師:從初期的校內網到如今人人網,最大的變化是:不少底層服務都從利用已有開源軟件的搭建,變成了根據業務須要,由咱們本身開發專門的服務所代替,這樣可以提升資源利用程度,提升整個系統的可用性。memcached
51CTO:咱們知道人人網的用戶量很是龐大,在數據庫方面,人人網採用了哪一種數據庫?除了高性能、可擴展性外,人人網對數據庫的需求還有哪些?在整個後臺系統架構中,每每數據庫的性能也會出現瓶頸,從早期的校內網到如今,咱們對數據庫性能的優化方面都作了哪些大的改變?oop
黃晶老師:咱們採用的數據庫是MySQL,在需求方面,咱們也很是關注高可用性。早期校內從單數據庫,到主從接口,發展到後來垂直拆分,而後水平拆分,而後在每一個節點上實現主-主提升可用性,到異地備份容災。目前咱們的數據庫已經有很是強的水平擴展能力和很是高的可用性。
關於MySQL,51CTO推薦專題:MySQL數據庫入門與精通教程
51CTO:數據緩存在後臺架構中一樣很是重要,在數據庫服務器、Web服務器以及二者之間,人人網都採用了哪些緩存手段?
黃晶老師:咱們的數據庫用到了部分自身緩存機制,好比儘量利用innodb的pool和MySQL的Query Cache。在中間用到Memcached,以及基於ICE通信框架由咱們本身編寫的包含業務邏輯處理能力的緩存服務,在咱們自行開發的分佈式KV系統中也會充分利用內存Cache加速。
51CTO:目前國內外也有不少大型站點在使用NoSQL,從功能上來將,其很是適合應用在SNS、微博等站點,人人網是否在考慮使用NoSQL呢?
黃晶老師:對於NoSQL,咱們已經考慮並在逐步試用自行開發的Nuclear分佈式KV存儲系統。
關於NoSQL,51CTO推薦專題:NoSQL:關係型數據庫終結者?
51CTO:上傳照片或者圖片是SNS網站用戶很經常使用的一個功能,對於Web服務器來說,圖片是很是消耗資源的,那麼目前人人網天天大概有要處理多少張圖片?相比較其餘數據而言,圖片會佔用大量存儲空間,給服務器帶來不小的壓力,咱們知道Facebook有着一套本身的圖片存儲架構,我們人人網在這方面是怎麼作的呢?
黃晶老師:如今人人網天天要處理千萬張級別的照片數量。咱們使用由C++專門編寫的Web服務來處理照片上傳和壓縮工做。存儲是用一套分佈式文件存儲系統,在小文件不少的狀況下,也會採用把小文件聚合爲大文件的方式提升性能,這樣的作法也便於大量小文件的備份。
51CTO:目前SNS站點都有很強的實時性,用戶可以第一時間看到好友都在作什麼,像人人網以及Facebook等,還有即時聊天功能,咱們是經過什麼樣的手段來最大限度的優化每個頁面,從而儘量的減小服務器的請求時間,提升用戶體驗的呢?
黃晶老師:咱們的作法是儘量把數據放在內存中,提升數據存取速度。另外,複雜的頁面採用併發機制,多線程同時從多個後臺源取數據拼成頁面。
51CTO:最後,還想請黃晶老師談一談SNS網站後臺技術的發展趨勢,以及從事SNS後臺開發的開發者須要關注那幾方面?
黃晶老師:鑑於SNS網站的一些業務特色,在後臺技術中,咱們最關注的仍然是高性能,可擴展性,高可用性。而且SNS所提供的服務也在變化中,對於業務的多變,架構要有靈活適應的能力,不然須要提供新服務的時候重構以前的系統工做量很大。相似Google的GFS/Bigtable/MapReduce一系列通用的分佈式系統很是優秀,能夠支撐不少Google的業務須要。因此在SNS網站架構中也須要一個能靈活應對業務變化的一套健壯的分佈式系統。
【51CTO獨家特稿,轉載請註明原文出處及做者!】