人人網(wǎng)移動(dòng)開發(fā)架構(gòu)(上)
作者簡(jiǎn)介
閆志東,人人網(wǎng)3G事業(yè)部高級(jí)技術(shù)經(jīng)理,資深工程師,人人網(wǎng)技術(shù)委員會(huì)委員,目前負(fù)責(zé)人人網(wǎng)3G部門服務(wù)器架構(gòu)方面的工作,他在基于C++、Java的服務(wù)器技術(shù)和架構(gòu)方面擁有多年經(jīng)驗(yàn)。個(gè)人非常喜歡閱讀計(jì)算機(jī)技術(shù)、科幻、歷史類書籍。
聞華強(qiáng),人人網(wǎng)3G事業(yè)部高級(jí)技術(shù)經(jīng)理,資深工程師,是人人網(wǎng)3G部門客戶端技術(shù)負(fù)責(zé)人,他有長(zhǎng)達(dá)七年的移動(dòng)終端開發(fā)和管理經(jīng)驗(yàn)。陽(yáng)光男孩,熱愛體育運(yùn)動(dòng),對(duì)《明朝那些事兒》愛不釋手,是忠實(shí)的明礬。
馬小東,人人網(wǎng)3G事業(yè)部產(chǎn)品經(jīng)理,在移動(dòng)互聯(lián)網(wǎng)業(yè)界浸淫七年,對(duì)很多產(chǎn)品大趨勢(shì)的把握和細(xì)節(jié)設(shè)計(jì)有非常獨(dú)到的看法。愛手機(jī)、愛生活、愛人人。
前言
說(shuō)起手機(jī)操作平臺(tái)的發(fā)展先要說(shuō)移動(dòng)終端的發(fā)展,因?yàn)槠脚_(tái)的發(fā)展離不開移動(dòng)終端,近十年移動(dòng)終端發(fā)展和未來(lái)移動(dòng)終端趨勢(shì)大體可分為以下四個(gè)個(gè)階段:
第一個(gè)階段:功能終端。滿足用戶基本通信需求,如發(fā)短信、打電話,附加些貪食蛇、推箱子小游戲。
第二個(gè)階段:智能化的終端。可擴(kuò)展第三方應(yīng)用,實(shí)現(xiàn)上網(wǎng)瀏覽等互聯(lián)網(wǎng)基礎(chǔ)功能,以諾基亞S60手機(jī)為代表的。
第三個(gè)階段:互聯(lián)網(wǎng)和平臺(tái)化的終端。手機(jī)和互聯(lián)網(wǎng)更加緊密,瀏覽器、流媒體更加強(qiáng)大,互聯(lián)網(wǎng)應(yīng)用和手機(jī)系統(tǒng)特性結(jié)合的 更加緊密;手機(jī)成為了一個(gè)平臺(tái),用戶可以通過(guò)下載第三方應(yīng)用來(lái)DIY這款終端,如偏好音樂(lè),可以下載音樂(lè)類型的應(yīng)用。代表為iPhone、Android 和Windows Phone 7。
第四個(gè)階段(未來(lái)趨勢(shì)):物聯(lián)網(wǎng)化的智能終端。此階段的特點(diǎn)是現(xiàn)實(shí)生活和網(wǎng)絡(luò)通過(guò)傳感設(shè)備結(jié)合的更加緊密。
目前我們處于第三個(gè)階段,對(duì)用戶而言,由于收入不同、興趣愛好不同、需求偏好的不同以及手機(jī)私人屬性和隨身性的特點(diǎn),產(chǎn)生了不同的用戶體驗(yàn);對(duì)各個(gè)廠商而 言,由于目標(biāo)市場(chǎng)的定位不同、商業(yè)利益的不同、技術(shù)背景不同,造就了不同的手機(jī)操作系統(tǒng)。最終形成了手機(jī)操作平臺(tái)多元化的局面。
目前主流手機(jī)操作平臺(tái)可分為:Symbian、Android、iPhone OS 、MTK、Windows mobile、Wp7六種。下面分別簡(jiǎn)述下這六個(gè)平臺(tái)的情況。
Symbian:昔日王者,雖然眼下受到了android和iPhone的強(qiáng)勢(shì)狙擊,被其瓜分了部分市場(chǎng),但是價(jià)格低,易用性強(qiáng),應(yīng)用程序多,加上諾基亞的品牌、渠道等優(yōu)勢(shì),在短期內(nèi)智能機(jī)霸主地位很難撼動(dòng)。中期來(lái)看市場(chǎng)中心下移走中低端智能機(jī)路線,長(zhǎng)期來(lái)看,有可能被WP7取代。如果它不革自己的命,那么很可能被別人革命。
Android:勢(shì)如破竹,據(jù)國(guó)外媒體報(bào)道Android在去年第四季度已超過(guò)Symbian成為全球最大智能手機(jī)平臺(tái),結(jié)束了在 Symbian在智能機(jī)領(lǐng)域長(zhǎng)達(dá)10年的統(tǒng)治地位。作為后來(lái)者,Android借鑒了iPhone的操作體驗(yàn),但是由于Android完全開源,對(duì)于手機(jī) 廠商和運(yùn)營(yíng)商來(lái)講,很容易定制成自己特色和服務(wù)的手機(jī),加上Android強(qiáng)大的互聯(lián)網(wǎng)功能,因而獲得二者的青睞。完全開源是把雙刃劍,由于各廠商分別定 義了各自的產(chǎn)品,這種不標(biāo)準(zhǔn)和不統(tǒng)一會(huì)給第三方軟件適配帶來(lái)門檻,會(huì)導(dǎo)致在單個(gè)某型號(hào)的移動(dòng)終端Android應(yīng)用偏少,所以Android有可能成為智 能手機(jī)中的山寨機(jī)。
iPhone OS:神話締造者,從熱銷的程度我們可以看出iPhone 4創(chuàng)造的奇跡。超炫的UI設(shè)計(jì),良好的交互操作,海量的應(yīng)用,牢牢占領(lǐng)高端市場(chǎng)。從短期來(lái)看,iPhone 4突出的優(yōu)勢(shì)會(huì)讓它再火一段時(shí)間。但是由于是自有系統(tǒng),市場(chǎng)占有量取決于蘋果手機(jī)終端用戶認(rèn)可情況,所以長(zhǎng)期看,主要取決于蘋果手機(jī)發(fā)展和競(jìng)爭(zhēng)對(duì)手的變 化。
Windows mobile:廉頗老矣,尚能飯否?無(wú)論從UI視覺效果,還是從易用性,還是第三方應(yīng)用,Windows mobile 都完敗Iphone和Android。壯士暮年,該退隱江湖了。
MTK:山寨大王, MTK是一個(gè)封閉的環(huán)境,不支持可擴(kuò)展的應(yīng)用,同時(shí)原功能也不完善,總之是個(gè)半成品。需要中間廠商來(lái)完善。相比較來(lái)講,第三方程序少,易用性一般。山寨機(jī)的價(jià)格和功能形成的性價(jià)比優(yōu)勢(shì),占據(jù)低端市場(chǎng)。
WP7:救世主,作為微軟和諾基亞的救命稻草是值得期待的,筆者曾經(jīng)體驗(yàn)過(guò)WP7,采用卷軸式UI設(shè)計(jì)風(fēng)格,使UI體驗(yàn)別具一格。系統(tǒng) 和互聯(lián)網(wǎng)應(yīng)用的緊密結(jié)合,加上諾基亞和微軟的強(qiáng)力支持。這個(gè)操作系統(tǒng)是值得期待的,有望在智能機(jī)領(lǐng)域形成WP7、Android、iPhone三足鼎立的 局面。
上述六大平臺(tái)分別對(duì)應(yīng)不同的體驗(yàn)和功能實(shí)現(xiàn)。對(duì)產(chǎn)品設(shè)計(jì)人員和開發(fā)人員而言,它們通常會(huì)參照移動(dòng)終端的UI設(shè)計(jì)規(guī)范。因?yàn)橐苿?dòng)終端系統(tǒng)本身定義了一些常用 的控件和響應(yīng)方式。產(chǎn)品保持與終端系統(tǒng)的一致,不但可以降低開發(fā)成本,而且易于用戶學(xué)習(xí)和使用。面對(duì)諸多平臺(tái),尤其是各個(gè)平臺(tái)功能特點(diǎn)不盡相同,操作方式 不同,屏幕大小不同,而每個(gè)主流平臺(tái)又有相當(dāng)規(guī)模的用戶群,擁有眾多不同的UI規(guī)范,這對(duì)于全平臺(tái)的產(chǎn)品而言,無(wú)疑是具有災(zāi)難性的。
本文就人人網(wǎng)移動(dòng)開發(fā)中不同終端平臺(tái)的差異和架構(gòu)統(tǒng)一問(wèn)題,以及相關(guān)服務(wù)器架構(gòu)進(jìn)行探討。
移動(dòng)終端之江山一統(tǒng)歷史歷歷在目
人人網(wǎng)(原名:校內(nèi)網(wǎng)),從08年下半年開始手機(jī)軟件的研發(fā),當(dāng)時(shí)國(guó)內(nèi)一二線的互聯(lián)網(wǎng)公司也已經(jīng)開始了移動(dòng)互聯(lián)網(wǎng)的布局,但已發(fā)布并可供參考的產(chǎn)品并不多,尤其是 SNS本身也還是一個(gè)新的互聯(lián)業(yè)務(wù),讓我們的用戶可以在手機(jī)上方便地訪問(wèn)SNS,這可一下把我們難住了。為了可以快速推出第一個(gè)版本試水,我們先是選擇 JavaME平臺(tái)來(lái)開發(fā)第一個(gè)人人的手機(jī)客戶端。
人人網(wǎng)的主要業(yè)務(wù)包括新鮮事,個(gè)人主頁(yè)(狀態(tài),日志,相冊(cè),留言),好友,站內(nèi)信,聊天,游戲等等,這些業(yè)務(wù)都互相關(guān)聯(lián)與襯托,并圍繞好友關(guān)系 (Social Graph),如果要把這些業(yè)務(wù)都搬到手機(jī),短時(shí)間內(nèi)根本無(wú)法完成,因?yàn)榭蛻舳祟惖能浖c瀏覽器的網(wǎng)頁(yè)在展現(xiàn)與交互上有非常大的差異,手機(jī)的屏幕大小限制 也給設(shè)計(jì)帶來(lái)了很大的困難,無(wú)疑是雪上加霜。當(dāng)時(shí)我們挑選了用戶常用的幾個(gè)業(yè)務(wù),新鮮事,個(gè)人主頁(yè)(狀態(tài),日志,相冊(cè),留言),好友,站內(nèi)信,按主站頂部 導(dǎo)航的排版方式,設(shè)計(jì)了一多標(biāo)簽的導(dǎo)航界面,每個(gè)標(biāo)簽一個(gè)業(yè)務(wù),頁(yè)面跳轉(zhuǎn)同主站,如下圖:
圖1
看上去這個(gè)設(shè)計(jì)非常簡(jiǎn)約明到幾乎完美,代碼也非常好實(shí)現(xiàn),大家激情澎湃,斗志昂揚(yáng)準(zhǔn)備迎接移動(dòng)互聯(lián)網(wǎng)的又一個(gè)奇跡,也許你和我以及我們的產(chǎn)品經(jīng)理一樣, 低估了這一切,人人網(wǎng)的業(yè)務(wù)可不像聊天軟件那樣單純,當(dāng)我們的工程師各自完成自己的分配到的業(yè)務(wù),并開始處理不同業(yè)務(wù)之間界面的跳轉(zhuǎn)時(shí),不詳?shù)念A(yù)感籠罩了 整個(gè)團(tuán)隊(duì),當(dāng)時(shí)的輕率導(dǎo)致了嚴(yán)重危機(jī),大家知道,在我們通過(guò)瀏覽器訪問(wèn)網(wǎng)頁(yè),頁(yè)面中超鏈接可以讓你隨意跳轉(zhuǎn)到任何一個(gè)頁(yè)面,且這些頁(yè)面并不一定是同一個(gè)業(yè) 務(wù)的相關(guān)頁(yè)面,如我從個(gè)人主頁(yè)也可以直接跳轉(zhuǎn)到好友(跨標(biāo)簽),而且通過(guò)瀏覽器的后退按鈕可以返回前面的頁(yè)面,客戶端類軟件可不能做成這樣的自由,我們應(yīng) 該怎么處理不同業(yè)務(wù)界面的跳轉(zhuǎn)呢?當(dāng)時(shí)大家理解的跳轉(zhuǎn),根本沒(méi)有考慮到不同業(yè)務(wù)之間后退的問(wèn)題,而且瀏覽器的頁(yè)面跳轉(zhuǎn),瀏覽器本身是不用知道下個(gè)界面是哪 個(gè)業(yè)務(wù),而客戶端必須知道,否則根本無(wú)法處理事件交互。技術(shù)慌了,產(chǎn)品經(jīng)理也慌了,眼看承諾的交付時(shí)間一天天臨近,大家還是沒(méi)有想出一個(gè)非常好的辦法,多 次嘗試失敗,有的方案,頁(yè)面的跳轉(zhuǎn)連我們自己都暈過(guò)去了,最后我們的第一個(gè)版本的JavaME 客戶端1.0以失敗告終。
首戰(zhàn)不利,大家心里都不是滋味,雖然通過(guò)后幾個(gè)月的努力,最后我們決定將1.2版本的客戶端以beta 版本的形式發(fā)布,并公開提供了下載,除了拍照上傳這個(gè)功能讓我們值得高興一下之外,其它功能也許只是讓我們感覺能用而已。JavaME的失利讓我們從自負(fù) 中清醒,驕兵必?cái) =?jīng)過(guò)一段時(shí)間的討論與分析,大家一致認(rèn)為,我們需要一個(gè)手機(jī)瀏覽器,人人的業(yè)務(wù)不論在PC端還是手機(jī)端,最理想的展現(xiàn)方式還是瀏覽器, 于是我們開始手機(jī)瀏覽器研發(fā)道路,我們花了3-4個(gè)月的時(shí)間,開發(fā)出了我們第一個(gè)基于JavaME的瀏覽器引擎,代號(hào):Across(為什么起這個(gè)名,后 面說(shuō))。瀏覽器引擎架構(gòu)參考Webkit,如下圖:
圖2 Across瀏覽器結(jié)構(gòu)圖
上圖中藍(lán)色部分是我們引擎的實(shí)現(xiàn)部分,紅色的JS,CSS及Plug-in是未來(lái)的計(jì)劃,從技術(shù)角度看來(lái),這個(gè)架構(gòu)看上去非常的美,模塊功能劃分清晰且 擴(kuò)展性強(qiáng),我們只要重寫Render Engine可以把一個(gè)普通的頁(yè)面渲染成我們想要的任何效果,遺憾的是最終我們還是沒(méi)有把瀏覽器這個(gè)解決方案應(yīng)用到正式發(fā)布的人人客戶端版本,原因很簡(jiǎn) 單,它還不是很完善。我們預(yù)先做了大量的測(cè)試用例,在完成開發(fā)以后,我們按測(cè)試用例逐條進(jìn)行了測(cè)試,最終結(jié)論雖然在性能和xhtml標(biāo)簽支持上達(dá)到了我們 的預(yù)期,但穩(wěn)定性和包體積卻并沒(méi)有達(dá)到理想的狀態(tài):運(yùn)行時(shí)內(nèi)存消耗在xhtml頁(yè)面大小的8-10倍左右,如一個(gè)30K的xhtml頁(yè)面完成解析,渲染必 須保證有300K左右的空閑內(nèi)存,如果渲染多個(gè)頁(yè)面或頻繁渲染新的頁(yè)面,就很容易出現(xiàn)崩潰(后來(lái)我們發(fā)現(xiàn)代碼中還有存在一些內(nèi)存泄漏的地方);另外,打包 以后200k的體積對(duì)于JavaME手機(jī)來(lái)說(shuō)已經(jīng)大了。09年上半年,Android發(fā)布了1.5的SDK,iPhone入華的消息也是傳得到處都是,顯 然,在這樣的行業(yè)形勢(shì)下,公司管理層已經(jīng)對(duì)我們?cè)贘avaME上做瀏覽器引擎的計(jì)劃失去興趣,我們的工程師被重新安排了新的任務(wù),Across沒(méi)有見到用 戶就成了歷史,瀏覽器沒(méi)有救得了我們。
痛苦中反思
09年上半年是我們最痛苦的一段時(shí)間,折騰了大半個(gè)年頭,結(jié)果我們沒(méi)有發(fā)布一個(gè)值得驕傲的產(chǎn)品,市場(chǎng)卻快速變化著,iPhone,Android帶著閃 耀的光芒進(jìn)入了大家的視野,我們也不得不做出調(diào)整,開始分兵投入iPhone及Android的陣營(yíng)。我們開始反省前面的失敗,我們似乎走了兩個(gè)極端,第 一次在考慮產(chǎn)品及技術(shù)的架構(gòu)時(shí)過(guò)于的簡(jiǎn)單草率,以致后期面臨強(qiáng)大的心理壓力,第二次卻是一個(gè)典型的過(guò)度設(shè)計(jì)案例,雖然從技術(shù)角度看這是一個(gè)非常有挑戰(zhàn)且非 常有意思的項(xiàng)目,當(dāng)時(shí)我們的設(shè)想是先完成JavaME平臺(tái)的瀏覽器,然后移植Symbian等其它平臺(tái),統(tǒng)一架構(gòu)。但是移動(dòng)互聯(lián)網(wǎng)市場(chǎng)近幾年的急速變化, 不論從人力和時(shí)間上都不允許我們?cè)侔褳g覽器項(xiàng)目繼續(xù)下去。
為什么我們要統(tǒng)一架構(gòu)?
人人網(wǎng)的業(yè)務(wù)種類非常多,而且PC端都基于瀏覽器網(wǎng)頁(yè)的模式,不論內(nèi)容還是排版都經(jīng)常需要優(yōu)化變更,如果我們通過(guò)純客戶端的形式把全部現(xiàn)有業(yè)務(wù)遷移到到手 機(jī)端,那么,當(dāng)我們完成第5個(gè)業(yè)務(wù)的遷移時(shí),可以前兩個(gè)業(yè)務(wù)主站已經(jīng)發(fā)生了變更,或者客戶端剛剛上線之前的某個(gè)業(yè)務(wù)已經(jīng)需要兼容運(yùn)行了,在這種情況下,要 么我們能快速迭代客戶端版本,趕上主站的業(yè)務(wù)的迭代速度,要么我們使用瀏覽器或類似瀏覽器的模式,所有業(yè)務(wù)放在服務(wù)器做,這就是我們?yōu)槭裁纯紤]開發(fā) Across,名字意在橫跨所有手機(jī)終端平臺(tái)。
相關(guān)文章:人人網(wǎng)移動(dòng)開發(fā)架構(gòu)(下)