人人網移動開發架構(上)
作者簡介
閆志東,人人網3G事業部高級技術經理,資深工程師,人人網技術委員會委員,目前負責人人網3G部門服務器架構方面的工作,他在基于C++、Java的服務器技術和架構方面擁有多年經驗。個人非常喜歡閱讀計算機技術、科幻、歷史類書籍。
聞華強,人人網3G事業部高級技術經理,資深工程師,是人人網3G部門客戶端技術負責人,他有長達七年的移動終端開發和管理經驗。陽光男孩,熱愛體育運動,對《明朝那些事兒》愛不釋手,是忠實的明礬。
馬小東,人人網3G事業部產品經理,在移動互聯網業界浸淫七年,對很多產品大趨勢的把握和細節設計有非常獨到的看法。愛手機、愛生活、愛人人。
前言
說起手機操作平臺的發展先要說移動終端的發展,因為平臺的發展離不開移動終端,近十年移動終端發展和未來移動終端趨勢大體可分為以下四個個階段:
第一個階段:功能終端。滿足用戶基本通信需求,如發短信、打電話,附加些貪食蛇、推箱子小游戲。
第二個階段:智能化的終端。可擴展第三方應用,實現上網瀏覽等互聯網基礎功能,以諾基亞S60手機為代表的。
第三個階段:互聯網和平臺化的終端。手機和互聯網更加緊密,瀏覽器、流媒體更加強大,互聯網應用和手機系統特性結合的 更加緊密;手機成為了一個平臺,用戶可以通過下載第三方應用來DIY這款終端,如偏好音樂,可以下載音樂類型的應用。代表為iPhone、Android 和Windows Phone 7。
第四個階段(未來趨勢):物聯網化的智能終端。此階段的特點是現實生活和網絡通過傳感設備結合的更加緊密。
目前我們處于第三個階段,對用戶而言,由于收入不同、興趣愛好不同、需求偏好的不同以及手機私人屬性和隨身性的特點,產生了不同的用戶體驗;對各個廠商而 言,由于目標市場的定位不同、商業利益的不同、技術背景不同,造就了不同的手機操作系統。最終形成了手機操作平臺多元化的局面。
目前主流手機操作平臺可分為:Symbian、Android、iPhone OS 、MTK、Windows mobile、Wp7六種。下面分別簡述下這六個平臺的情況。
Symbian:昔日王者,雖然眼下受到了android和iPhone的強勢狙擊,被其瓜分了部分市場,但是價格低,易用性強,應用程序多,加上諾基亞的品牌、渠道等優勢,在短期內智能機霸主地位很難撼動。中期來看市場中心下移走中低端智能機路線,長期來看,有可能被WP7取代。如果它不革自己的命,那么很可能被別人革命。
Android:勢如破竹,據國外媒體報道Android在去年第四季度已超過Symbian成為全球最大智能手機平臺,結束了在 Symbian在智能機領域長達10年的統治地位。作為后來者,Android借鑒了iPhone的操作體驗,但是由于Android完全開源,對于手機 廠商和運營商來講,很容易定制成自己特色和服務的手機,加上Android強大的互聯網功能,因而獲得二者的青睞。完全開源是把雙刃劍,由于各廠商分別定 義了各自的產品,這種不標準和不統一會給第三方軟件適配帶來門檻,會導致在單個某型號的移動終端Android應用偏少,所以Android有可能成為智 能手機中的山寨機。
iPhone OS:神話締造者,從熱銷的程度我們可以看出iPhone 4創造的奇跡。超炫的UI設計,良好的交互操作,海量的應用,牢牢占領高端市場。從短期來看,iPhone 4突出的優勢會讓它再火一段時間。但是由于是自有系統,市場占有量取決于蘋果手機終端用戶認可情況,所以長期看,主要取決于蘋果手機發展和競爭對手的變 化。
Windows mobile:廉頗老矣,尚能飯否?無論從UI視覺效果,還是從易用性,還是第三方應用,Windows mobile 都完敗Iphone和Android。壯士暮年,該退隱江湖了。
MTK:山寨大王, MTK是一個封閉的環境,不支持可擴展的應用,同時原功能也不完善,總之是個半成品。需要中間廠商來完善。相比較來講,第三方程序少,易用性一般。山寨機的價格和功能形成的性價比優勢,占據低端市場。
WP7:救世主,作為微軟和諾基亞的救命稻草是值得期待的,筆者曾經體驗過WP7,采用卷軸式UI設計風格,使UI體驗別具一格。系統 和互聯網應用的緊密結合,加上諾基亞和微軟的強力支持。這個操作系統是值得期待的,有望在智能機領域形成WP7、Android、iPhone三足鼎立的 局面。
上述六大平臺分別對應不同的體驗和功能實現。對產品設計人員和開發人員而言,它們通常會參照移動終端的UI設計規范。因為移動終端系統本身定義了一些常用 的控件和響應方式。產品保持與終端系統的一致,不但可以降低開發成本,而且易于用戶學習和使用。面對諸多平臺,尤其是各個平臺功能特點不盡相同,操作方式 不同,屏幕大小不同,而每個主流平臺又有相當規模的用戶群,擁有眾多不同的UI規范,這對于全平臺的產品而言,無疑是具有災難性的。
本文就人人網移動開發中不同終端平臺的差異和架構統一問題,以及相關服務器架構進行探討。
移動終端之江山一統歷史歷歷在目
人人網(原名:校內網),從08年下半年開始手機軟件的研發,當時國內一二線的互聯網公司也已經開始了移動互聯網的布局,但已發布并可供參考的產品并不多,尤其是 SNS本身也還是一個新的互聯業務,讓我們的用戶可以在手機上方便地訪問SNS,這可一下把我們難住了。為了可以快速推出第一個版本試水,我們先是選擇 JavaME平臺來開發第一個人人的手機客戶端。
人人網的主要業務包括新鮮事,個人主頁(狀態,日志,相冊,留言),好友,站內信,聊天,游戲等等,這些業務都互相關聯與襯托,并圍繞好友關系 (Social Graph),如果要把這些業務都搬到手機,短時間內根本無法完成,因為客戶端類的軟件與瀏覽器的網頁在展現與交互上有非常大的差異,手機的屏幕大小限制 也給設計帶來了很大的困難,無疑是雪上加霜。當時我們挑選了用戶常用的幾個業務,新鮮事,個人主頁(狀態,日志,相冊,留言),好友,站內信,按主站頂部 導航的排版方式,設計了一多標簽的導航界面,每個標簽一個業務,頁面跳轉同主站,如下圖:

圖1
看上去這個設計非常簡約明到幾乎完美,代碼也非常好實現,大家激情澎湃,斗志昂揚準備迎接移動互聯網的又一個奇跡,也許你和我以及我們的產品經理一樣, 低估了這一切,人人網的業務可不像聊天軟件那樣單純,當我們的工程師各自完成自己的分配到的業務,并開始處理不同業務之間界面的跳轉時,不詳的預感籠罩了 整個團隊,當時的輕率導致了嚴重危機,大家知道,在我們通過瀏覽器訪問網頁,頁面中超鏈接可以讓你隨意跳轉到任何一個頁面,且這些頁面并不一定是同一個業 務的相關頁面,如我從個人主頁也可以直接跳轉到好友(跨標簽),而且通過瀏覽器的后退按鈕可以返回前面的頁面,客戶端類軟件可不能做成這樣的自由,我們應 該怎么處理不同業務界面的跳轉呢?當時大家理解的跳轉,根本沒有考慮到不同業務之間后退的問題,而且瀏覽器的頁面跳轉,瀏覽器本身是不用知道下個界面是哪 個業務,而客戶端必須知道,否則根本無法處理事件交互。技術慌了,產品經理也慌了,眼看承諾的交付時間一天天臨近,大家還是沒有想出一個非常好的辦法,多 次嘗試失敗,有的方案,頁面的跳轉連我們自己都暈過去了,最后我們的第一個版本的JavaME 客戶端1.0以失敗告終。
首戰不利,大家心里都不是滋味,雖然通過后幾個月的努力,最后我們決定將1.2版本的客戶端以beta 版本的形式發布,并公開提供了下載,除了拍照上傳這個功能讓我們值得高興一下之外,其它功能也許只是讓我們感覺能用而已。JavaME的失利讓我們從自負 中清醒,驕兵必敗。經過一段時間的討論與分析,大家一致認為,我們需要一個手機瀏覽器,人人的業務不論在PC端還是手機端,最理想的展現方式還是瀏覽器, 于是我們開始手機瀏覽器研發道路,我們花了3-4個月的時間,開發出了我們第一個基于JavaME的瀏覽器引擎,代號:Across(為什么起這個名,后 面說)。瀏覽器引擎架構參考Webkit,如下圖:

圖2 Across瀏覽器結構圖
上圖中藍色部分是我們引擎的實現部分,紅色的JS,CSS及Plug-in是未來的計劃,從技術角度看來,這個架構看上去非常的美,模塊功能劃分清晰且 擴展性強,我們只要重寫Render Engine可以把一個普通的頁面渲染成我們想要的任何效果,遺憾的是最終我們還是沒有把瀏覽器這個解決方案應用到正式發布的人人客戶端版本,原因很簡 單,它還不是很完善。我們預先做了大量的測試用例,在完成開發以后,我們按測試用例逐條進行了測試,最終結論雖然在性能和xhtml標簽支持上達到了我們 的預期,但穩定性和包體積卻并沒有達到理想的狀態:運行時內存消耗在xhtml頁面大小的8-10倍左右,如一個30K的xhtml頁面完成解析,渲染必 須保證有300K左右的空閑內存,如果渲染多個頁面或頻繁渲染新的頁面,就很容易出現崩潰(后來我們發現代碼中還有存在一些內存泄漏的地方);另外,打包 以后200k的體積對于JavaME手機來說已經大了。09年上半年,Android發布了1.5的SDK,iPhone入華的消息也是傳得到處都是,顯 然,在這樣的行業形勢下,公司管理層已經對我們在JavaME上做瀏覽器引擎的計劃失去興趣,我們的工程師被重新安排了新的任務,Across沒有見到用 戶就成了歷史,瀏覽器沒有救得了我們。
痛苦中反思
09年上半年是我們最痛苦的一段時間,折騰了大半個年頭,結果我們沒有發布一個值得驕傲的產品,市場卻快速變化著,iPhone,Android帶著閃 耀的光芒進入了大家的視野,我們也不得不做出調整,開始分兵投入iPhone及Android的陣營。我們開始反省前面的失敗,我們似乎走了兩個極端,第 一次在考慮產品及技術的架構時過于的簡單草率,以致后期面臨強大的心理壓力,第二次卻是一個典型的過度設計案例,雖然從技術角度看這是一個非常有挑戰且非 常有意思的項目,當時我們的設想是先完成JavaME平臺的瀏覽器,然后移植Symbian等其它平臺,統一架構。但是移動互聯網市場近幾年的急速變化, 不論從人力和時間上都不允許我們再把瀏覽器項目繼續下去。
為什么我們要統一架構?
人人網的業務種類非常多,而且PC端都基于瀏覽器網頁的模式,不論內容還是排版都經常需要優化變更,如果我們通過純客戶端的形式把全部現有業務遷移到到手 機端,那么,當我們完成第5個業務的遷移時,可以前兩個業務主站已經發生了變更,或者客戶端剛剛上線之前的某個業務已經需要兼容運行了,在這種情況下,要 么我們能快速迭代客戶端版本,趕上主站的業務的迭代速度,要么我們使用瀏覽器或類似瀏覽器的模式,所有業務放在服務器做,這就是我們為什么考慮開發 Across,名字意在橫跨所有手機終端平臺。
相關文章:人人網移動開發架構(下)



















