[文章作者:孫立 連結:http://www.cnblogs.com/sunli/ 更新時間:2010-12-20]
非常榮幸能在這次velocity china 2010大會上分享《移動互連網內容平台的架構和效能最佳化 》,點擊可進行ppt的pdf版本下載。由於有大量的朋友沒有去現場,在PPT中也不能完全表達我的意思,所以我特別寫了這篇部落格進行一些文字說明。有問題可以在文後留言或者跟我在微博討論。
這就是我了,哈哈。
我相信一個好的系統架構是需要從產品需求出發的,同時我也相信一個系統的效能最佳化也要站在產品需求之上,所以我花了很多時間從產品設計的角度來分析為什麼要設計內容平台,以及如何去設計這樣一個系統,這就是系統架構,最後才在這個系統架構基礎之上提出怎麼進行效能最佳化,滿足非功能性需求。
作為開發人員,我經曆了固定互連網的一個高速發展時期。曾經,我們會頻繁的開發出不同的網站,比片展示的系統,新聞網站等等以內容為主的系統,為了提高開發效率,摒棄開發網站的複雜性,出現了CMS系統。比如中小型網站比較通用的CMS系統(php168,phpcms等)和門戶型CMS(定製化的大型CMS系統),CMS系統簡化了網站的開發的難度,而且不需要特別的技術,就能構建出高效能,穩定的網站
今年開始,移動GPRS資費的下調,3G網路的發展,智能手機的鋪天蓋地的流行,我們手機鳳凰網的流量出現了非常大的增長,據我瞭解,很多公司都出現了大量的流量增長(見PPT第三頁)。
移動互連網的發展給程式員提出了更高的挑戰:
- 多電訊廠商(電信,移動,聯通,wifi使用者),互訪速度跟固定互連網的網通電信南北互連一樣
- 多終端(超級多的手機類型,螢幕,系統,瀏覽器),出現更多的適配問題(不像固定互連網只是IE6,IE7和firefox,chrome的相容)
- 需求多變(要求快),由於快速的開發,導致開發的系統過一段就效能低下,經常宕機,程式員的壓力很大,很大,很大。(ps:某某公司的無線技術人員已經死了兩個了)
- 訪問量節節飆升 ,需要系統具有更高的效能和可擴充性。
- 頁面幾乎不能靜態化(適配,按用戶端等客戶資訊輸出不同的內容),固定互連網可以產生靜態html,使用cdn,來提高效能,由於不能靜態化,移動互連網對效能的要求就更高。
手機鳳凰網的上一版本(WAPCMS)系統的架構使用了普通的JSP+Mysql+Linuxi架構。(PPT的第5,6頁)。通過Mysql的主從複製進行擴充,前端通過一個自行開發的反向 Proxy進行cache(融入了商務邏輯代碼)。由於頻繁的代碼更新,增加很多新的合作網站(jsp),代碼非常的難於維護,效能也非常低下。當時10多台機器才應付1000多萬pv/日,還會出現宕機。你可能會說,這個系統效能還可以最佳化,是的,還可以最佳化,效能非常低,但是由於要疲於應付提出的新的需求,就算最佳化了,沒過多久,就又會出現效能下降。所以我們需要一個系統,像facebook在會上提出的那樣,“如何讓網站一直都很快”,是的,要讓網站一直都很快,效能高,穩定,不管開發人員怎麼折騰,系統總是很快的,效能很高的,所以,我們開發了IMCP系統。 IMCP(Ifeng Mobile Content Platform)不只是我們的wap網站的系統,還提供了鳳凰移動台,視頻用戶端,鳳凰新聞用戶端,支援活動直播,線上代碼開發,平均單機效能最高達到1800+萬pv/日。開發人員在我們的平台上,無需考慮效能問題,只需要簡單的調用系統提供的sdk的方法就能開發出高效能的網站。 到ppt第9頁。為了儘可能設計出一個通用的系統平台,我們對網頁進行了拆分。我們認為,網頁都是由可拆分的塊組成的。這些塊包含可編輯的靜態html塊(手工編輯的),自動產生的列表(文章列表)塊,推薦位(由編輯手工選擇的列表),內容文檔塊。一般固定互連網的新聞網站都可以由這些塊組成,我們移動互連網由於是基於動態網頁面,所以我們還加入了邏輯塊,來控制所有的塊的邏輯。 由於要開發人員要經常為一些合作網站,比如要為諾基亞開發一個跟主站類似的網站,只是某些內容不一樣的網站,一般都要拷貝一份代碼。所以我們又計劃把代碼進行拆分成邏輯塊進行重用,頁面也儘可能的重用,可以線上的建立網站,不需要營運部門的參與。所以就計劃把我們的代碼是儲存在nosql程式碼程式庫中,由NOSQL管理所有的代碼儲存,通過後台進行線上編輯。前台訪問的時候再去nosql取代碼進行運行。通過NOSQL的主從複製實現跨機器,跨機房的代碼自動部署。 在這樣的模式下面,開發人員只需要在後台進行線上開發,不需要關心代碼運行在什麼IP的伺服器上,需要去串連什麼IP的儲存,資料庫,一切都是透明的,要取某個文章的內容,就直接getDoc(id)就可以了。 ppt13-22頁進行了一些後台介面的示範 ppt後面的內容都基本能看明白了,其中非常有意義的就是我們的
前端完全基於nosql資料,這也算是nosql 的一個成功利用的案例吧,由於ppt比較清楚,我就不詳細闡述了。最後一頁的代碼運行效能監控我相信對很多朋友也有參考意義,通過對代碼運行狀態監控,可以即時的看到系統的相信運行效能狀態。 這次velocity china 2010給我最大的感受就是
,各個公司都有底層團隊在致力於協助開發人員簡化開發的複雜度,自動化的提高系統的效能,穩定性(讓開發人員不再關心這些問題)。我們的IMCP系統也是這樣,開發人員無需關心cache,無需關心效能,只要利用我們SDK提供的功能搭建系統,網站總是非常高效,而且開發速度還非常快。下面是PPT的線上版本:
移動互連網內容平台的架構和效能最佳化
View more presentations from 孫立.