手機(jī)QQ的移動(dòng)化實(shí)踐之路

2014年12月19日~20日舉行的ArchSummit北京2014大會(huì)上,騰訊即時(shí)通訊平臺(tái)部技術(shù)總監(jiān)范瑞彬做了題為《手機(jī)QQ的移動(dòng)化實(shí)踐之路》(幻燈片下載)的演講,介紹了手機(jī)QQ在服務(wù)海量移動(dòng)用戶(hù)方面經(jīng)歷了的一些經(jīng)驗(yàn)。
范瑞彬(hata fan),騰訊公司即時(shí)通訊平臺(tái)部技術(shù)總監(jiān),T4專(zhuān)家。2004年加入騰訊,長(zhǎng)期負(fù)責(zé)手機(jī)QQ后臺(tái)整體建設(shè),完整地經(jīng)歷了手機(jī)QQ從數(shù)千人在線(xiàn)到億級(jí)在線(xiàn)的整個(gè)過(guò)程,見(jiàn)證了十多年來(lái)移動(dòng)互聯(lián)網(wǎng)服務(wù)的高速發(fā)展。目前主要負(fù)責(zé)QQ整體的接入平臺(tái)建設(shè),在海量分布式后臺(tái)架構(gòu)、IM系統(tǒng)設(shè)計(jì)、移動(dòng)業(yè)務(wù)架構(gòu)設(shè)計(jì)等方面積累了多年實(shí)踐經(jīng)驗(yàn)。
本文系根據(jù)演講內(nèi)容整理而成。
演講主要涉及3個(gè)部分。
第一,移動(dòng)環(huán)境的特點(diǎn)。
第二,針對(duì)移動(dòng)環(huán)境的特點(diǎn),如何做好接入?
第三,架構(gòu)設(shè)計(jì)理念方面的變化。
下圖包含了云、管、端三個(gè)部分,多種終端通過(guò)多種網(wǎng)絡(luò)訪(fǎng)問(wèn)云端的服務(wù)。上面紅色部分是接入層,是首先會(huì)受到影響的。下面是邏輯存儲(chǔ)、運(yùn)營(yíng)支撐和安全體系,這個(gè)系統(tǒng)目前終端同時(shí)在線(xiàn)過(guò)億。終端每秒的請(qǐng)求量差不多千萬(wàn),一天的請(qǐng)求量在數(shù)千億的量級(jí)。
移動(dòng)環(huán)境的特點(diǎn)
可以從三個(gè)方面看移動(dòng)環(huán)境的特點(diǎn)。首先是移動(dòng)網(wǎng)絡(luò),大家首先感覺(jué)是慢,而且流量又挺貴的。它還有很多種制式,差別也很大。還有終端的特點(diǎn),相對(duì)PC來(lái)說(shuō)手機(jī)終端資源(CPU、內(nèi)存、電量等)是受限的,永遠(yuǎn)是不夠用的。而且終端的平臺(tái)很多,機(jī)型多,能力差異也非常大。還有一個(gè)很重要的特點(diǎn)就是移動(dòng)性,可以隨身攜帶,可以隨時(shí)隨地利用碎片化的時(shí)間,環(huán)境多變,使用頻繁。
如何做好接入
面對(duì)這些環(huán)境的變化,接入首先會(huì)受到影響,而接入又是所有服務(wù)的基石。所以在移動(dòng)環(huán)境下面,提供高質(zhì)量的接入服務(wù)非常重要。如果將接入比作開(kāi)車(chē),那首先要選擇一條快速的路線(xiàn),這就相當(dāng)于路由調(diào)度策略。另外還需要有一輛好車(chē),車(chē)要快,類(lèi)似于數(shù)據(jù)傳輸加速。然而選了一條好的路線(xiàn),也有了一輛快車(chē),并不代表就能快速到達(dá)目的地,尤其是非WIFI接入時(shí),新增了基站、大量新增的網(wǎng)源系統(tǒng),非常復(fù)雜。這里面有一些規(guī)則需要了解,如果不了解的話(huà)可能這些就是坑,而遇到了坑可能會(huì)翻車(chē),所以不能把它當(dāng)成黑盒,所以需要熟悉路況。路況很復(fù)雜,車(chē)也很復(fù)雜,跑的過(guò)程當(dāng)中難免會(huì)遇到異常,所以還得會(huì)修車(chē),不能拋錨,這幾點(diǎn)是接入的幾個(gè)主要工作。
1. 路由調(diào)度(選快路)
分布式接入,在南方、北方和中部選擇了三個(gè)地區(qū),各自部署了一個(gè)點(diǎn),每個(gè)點(diǎn)也覆蓋了三大運(yùn)營(yíng)商,這是基礎(chǔ)工作。
這時(shí)還有一個(gè)問(wèn)題,如果中小運(yùn)營(yíng)商用戶(hù)也訪(fǎng)問(wèn)到在三大運(yùn)營(yíng)商部署的服務(wù),會(huì)存在跨網(wǎng)訪(fǎng)問(wèn),質(zhì)量很差。所以又建設(shè)了一個(gè)內(nèi)容加速機(jī)房,它有獨(dú)立IP,而且是TCP互聯(lián),路由直達(dá),這樣中小運(yùn)營(yíng)商的質(zhì)量可以得到明顯改善。針對(duì)海外用戶(hù),最初在香港部署了一個(gè)點(diǎn),后來(lái)又在全球各大洲,每個(gè)洲選擇了一個(gè)點(diǎn),海外用戶(hù)就近訪(fǎng)問(wèn)加速點(diǎn),通過(guò)加速點(diǎn)再訪(fǎng)問(wèn)國(guó)內(nèi)的服務(wù)器。
部署是在不斷優(yōu)化的,調(diào)度也需要更精準(zhǔn)的體現(xiàn)。所謂調(diào)度,無(wú)非就是說(shuō)什么時(shí)候,哪些用戶(hù)該連到哪些server。所以這里可以分用戶(hù)、server、時(shí)間三個(gè)維度。比如說(shuō)用戶(hù),細(xì)化到每個(gè)網(wǎng)關(guān);server,把用戶(hù)調(diào)度到質(zhì)量較高的server上面去;時(shí)間比較好理解,因?yàn)橐苿?dòng)網(wǎng)絡(luò)經(jīng)常有波動(dòng),需要快速地發(fā)現(xiàn)波動(dòng),并及時(shí)自動(dòng)干預(yù),把它調(diào)度走。
還有一個(gè)很常見(jiàn)的問(wèn)題,就是頻繁切換網(wǎng)絡(luò)。用戶(hù)可能每天都在不同運(yùn)營(yíng)商,不同的網(wǎng)絡(luò)之間來(lái)回切換。連接的時(shí)候不用域名,直接用IP,那如何保證用戶(hù)不管怎么樣切換網(wǎng)絡(luò),都能連接到連到他應(yīng)該連接的server上面呢?假如說(shuō)用戶(hù)第一次連某個(gè)網(wǎng)絡(luò)時(shí),他會(huì)使用本地默認(rèn)列表,連到server時(shí),如果server發(fā)現(xiàn)不是最優(yōu)的,會(huì)及時(shí)糾正,下發(fā)一份新的server列表。開(kāi)發(fā)團(tuán)隊(duì)干脆把用戶(hù)最近使用的50個(gè)接入點(diǎn)統(tǒng)統(tǒng)緩存下來(lái)。
2. 數(shù)據(jù)傳輸加速(造快車(chē))
做完了調(diào)度相當(dāng)于選擇了一條快速路線(xiàn),這是不夠的,還要想辦法造一輛快的車(chē)。
首先是不用域名,直接用IP。這樣可以減少域名解析的開(kāi)銷(xiāo),更重要的是,可以避免域名解析帶來(lái)的各種故障,還可以減少一些被屏蔽和封掉的可能。
第二點(diǎn)是重用連接、預(yù)連接。比如說(shuō)QQ里面發(fā)圖的時(shí)候,其實(shí)用戶(hù)還在選擇圖片的時(shí)候,會(huì)先把連接建立起來(lái),而且用戶(hù)傳完圖以后連接不會(huì)立即斷掉,會(huì)維持一段時(shí)間,后面有批量圖的時(shí)候可以繼續(xù)使用,減少一次連接的時(shí)間可以減少幾百毫秒。
第三點(diǎn)是精簡(jiǎn)協(xié)議和邏輯。
第四點(diǎn)是參數(shù)調(diào)優(yōu)。比如說(shuō)“擁塞窗口”(congestion window,CWND),server的操作系統(tǒng)默認(rèn)是4,建議調(diào)大一點(diǎn),可以調(diào)到10,這樣可以減輕慢啟動(dòng)對(duì)傳輸帶來(lái)的影響。還有最大傳輸單元(Maximum Transmission Unit,MTU),之前跟運(yùn)營(yíng)商的朋友交流,他們給的建議是不要大于1400,現(xiàn)在基本上都是按照這個(gè)策略來(lái)做的。還有重新傳輸超時(shí)(Retransmission Timeout, RTO),一般設(shè)3秒左右,系統(tǒng)默認(rèn)值設(shè)的是1。
還有一點(diǎn)叫高帶寬時(shí)延積環(huán)境,在這種環(huán)境下面會(huì)遇到帶寬吃不滿(mǎn),存在浪費(fèi)的問(wèn)題。以前網(wǎng)絡(luò)都是2G網(wǎng)絡(luò)的功能機(jī)時(shí)代。當(dāng)時(shí)傳圖片大部分用的都是單連接。最近幾年,網(wǎng)絡(luò)越來(lái)越多,種類(lèi)也越來(lái)越多,而且網(wǎng)絡(luò)也越來(lái)越好。所以系統(tǒng)也進(jìn)行了改進(jìn),可以根據(jù)網(wǎng)絡(luò)狀況動(dòng)態(tài)地選擇合適的連接數(shù)。比如說(shuō)經(jīng)過(guò)理論分析以及實(shí)驗(yàn)驗(yàn)證,開(kāi)發(fā)團(tuán)隊(duì)發(fā)現(xiàn)其實(shí)在WIFI、3G、4G比較好的網(wǎng)絡(luò)下面?zhèn)鬏敶髷?shù)據(jù)時(shí),用雙連接比單連接提升至少10%,而且越好的網(wǎng)絡(luò)提升效果越明顯。
3.移動(dòng)網(wǎng)絡(luò)環(huán)境不是黑盒(熟路況)
不能簡(jiǎn)單地把移動(dòng)網(wǎng)絡(luò)環(huán)境當(dāng)成黑核來(lái)處理,有些細(xì)節(jié)知識(shí)是需要了解的。
第一,要了解國(guó)內(nèi)移動(dòng)網(wǎng)關(guān)的一些設(shè)置,比如說(shuō)它會(huì)限制某個(gè)包傳輸?shù)拇笮?,如果超過(guò)的話(huà)直接失敗。之前跟設(shè)備廠(chǎng)商了解,華為很多網(wǎng)關(guān)設(shè)置的是10M,但是各家都不一樣,也沒(méi)有什么標(biāo)準(zhǔn)。還有網(wǎng)關(guān)很多時(shí)候?qū)鬏敃r(shí)間有限制,這個(gè)也是各家不一樣的。了解了這些細(xì)節(jié),肯定要很好地支持分片和斷點(diǎn)續(xù)傳,否則在某些地區(qū)可能會(huì)出問(wèn)題。
第二,網(wǎng)關(guān)對(duì)很多標(biāo)準(zhǔn)的理解和實(shí)現(xiàn),各家也是不一樣的,尤其像影響比較大的,比如說(shuō)對(duì)HTTP協(xié)議的理解和實(shí)現(xiàn)。比如說(shuō)在HTTP的標(biāo)準(zhǔn)文檔里面,提了一個(gè)range,但是沒(méi)有強(qiáng)制去做,有的廠(chǎng)商支持的就不是太好。曾經(jīng)遇到過(guò)一種情況,頭部用到了range,在分片傳輸圖片時(shí),運(yùn)營(yíng)商網(wǎng)關(guān)把它過(guò)濾掉了,客戶(hù)端就不知道下一次該從哪里發(fā),所以可能又從第一片開(kāi)始發(fā),這種情況下,如果客戶(hù)端沒(méi)有做好相關(guān)保護(hù),就非常危險(xiǎn),會(huì)大量的重傳,用戶(hù)流量會(huì)被大量消耗。這就是需要注意的地方,盡量不要在HTTP頭部加一些字段,需要傳一些信息的話(huà),可以放在包體里面,自己解析和理解。
第三,tcp_tw_recycle。用戶(hù)說(shuō)網(wǎng)絡(luò)是好的,但是連不上server。抓包分析發(fā)現(xiàn),客戶(hù)端三次握手的包已經(jīng)發(fā)過(guò)來(lái)了,但是server沒(méi)有回。這是什么問(wèn)題呢?經(jīng)過(guò)深入分析,研究了一下協(xié)議棧,以及一些參數(shù)設(shè)置,后來(lái)發(fā)現(xiàn),假如tcp_tw_recycle是開(kāi)啟的,server會(huì)檢查對(duì)端同一個(gè)網(wǎng)關(guān)IP發(fā)過(guò)來(lái)的包,時(shí)間是不是遞增的,如果不是遞增的可能會(huì)丟掉。但是移動(dòng)網(wǎng)絡(luò)環(huán)境下,這是很難保證的。關(guān)閉tcp_tw_recycle,問(wèn)題就解決了。后來(lái)這成了外網(wǎng)接入層的標(biāo)準(zhǔn)配置。
第四,端口受限。有人反映某些地區(qū)的用戶(hù)連server的某些端口連不上,或者是連接質(zhì)量比較差。比如曾經(jīng)發(fā)現(xiàn)香港數(shù)碼通的用戶(hù)連8080端口的質(zhì)量非常差,很慢;還發(fā)現(xiàn)有些機(jī)場(chǎng)WIFI,比如說(shuō)深圳機(jī)場(chǎng)WIFI,除了8080和43之外的斷口都封掉了,用其他的端口用戶(hù)也連不上。開(kāi)發(fā)團(tuán)隊(duì)意識(shí)到,不應(yīng)該被動(dòng)地靠用戶(hù)的反饋來(lái)發(fā)現(xiàn)問(wèn)題和解決問(wèn)題,所以建設(shè)了一套自動(dòng)的系統(tǒng),根據(jù)海量的數(shù)據(jù)去分析,根據(jù)分析結(jié)果,server在給客戶(hù)端返回合適接入列表時(shí),優(yōu)先選擇質(zhì)量高的端口,而且也盡量注意端口搭配的多樣性,這樣可以提升接入質(zhì)量。
最后看一下信令風(fēng)暴。其實(shí)從09年開(kāi)始,手機(jī)QQ這邊每年會(huì)被運(yùn)營(yíng)商朋友拉過(guò)去一起探討這個(gè)問(wèn)題,雙方本著互相理解、合作共贏(yíng)的態(tài)度來(lái)對(duì)待這個(gè)問(wèn)題。除了建立一些雙方認(rèn)可的虛擬消耗運(yùn)算模型之外,雙方還就移動(dòng)業(yè)務(wù)達(dá)成了技術(shù)共識(shí)。比如說(shuō)減少定時(shí)包,減少不必要的及時(shí)包,因?yàn)橛行┌娴牟灰欢ㄒ浅<皶r(shí)??梢赃m當(dāng)做一些緩存和合并。還有一點(diǎn)就是要有流控,萬(wàn)一客戶(hù)端有BUG,大量的發(fā)包,這時(shí)候有壓跨移動(dòng)網(wǎng)絡(luò)的可能,并不僅僅是數(shù)據(jù)網(wǎng),它對(duì)電信網(wǎng)也有影響,所以server這時(shí)要有能力控制客戶(hù)端發(fā)包的策略和頻率,這樣HTTP服務(wù)才能讓人放心一點(diǎn)。
4.異常處理(會(huì)修車(chē))
比如說(shuō)業(yè)務(wù)用的是TCP長(zhǎng)連接,但是請(qǐng)求有可能被劫持,可能會(huì)返回到奇怪的HTML頁(yè)面,最常見(jiàn)的是WIFI的認(rèn)證注冊(cè),這時(shí)需要及時(shí)準(zhǔn)確地發(fā)現(xiàn)這些問(wèn)題,展現(xiàn)出來(lái)提示用戶(hù)。
有一種網(wǎng)絡(luò)抖動(dòng)叫先發(fā)后到,需要做一些保護(hù)。比如說(shuō)要求客戶(hù)端發(fā)包的時(shí)候一定要遞增,而且即使進(jìn)程被殺掉重新再起來(lái),也要保證這次發(fā)包比上次大。借助這個(gè)大小能知道真實(shí)發(fā)包時(shí)間的先后順序。
終端休眠,終端是為了省電,肯定有一些休眠策略,App為了應(yīng)對(duì)這些策略,有一些自動(dòng)喚醒機(jī)制,做一些自己想做的事。如果用Wakelock,拿到這個(gè)鎖之后,系統(tǒng)再也進(jìn)入不了休眠了,這個(gè)鎖一般用兩三秒就足夠了,一定要慎重。
最后是App健康和智能檢測(cè)??蛻?hù)端不能保證百分之百不出問(wèn)題,有時(shí)候確實(shí)有可能在一些小概率的情況下,存在異常的點(diǎn),它有可能會(huì)觸發(fā)一些頻繁大量的發(fā)包策略。大量的發(fā)包會(huì)把用戶(hù)的流量大量消耗掉,而且這還算輕的,更嚴(yán)重的是如果有較多用戶(hù)都出現(xiàn)這樣的問(wèn)題,可能不是流量消耗的問(wèn)題,而存在把移動(dòng)網(wǎng)絡(luò)壓跨的可能,移動(dòng)網(wǎng)絡(luò)真的很脆弱。
《刑法》中有一條罪叫破壞通信罪,可以判三到七年,所以這種工作很危險(xiǎn),也是有責(zé)任的。壓垮移動(dòng)網(wǎng)絡(luò)后果很?chē)?yán)重,要想辦法極早發(fā)現(xiàn)和干預(yù)。怎么辦呢?server可以做一些準(zhǔn)實(shí)時(shí)的流量消耗分析,如果發(fā)現(xiàn)在單位時(shí)間內(nèi)用戶(hù)流量超過(guò)某個(gè)異常值,就及時(shí)干預(yù),而不是事后檢查。比如可以把用戶(hù)直接踢下線(xiàn),或者更嚴(yán)重一點(diǎn),直接讓客戶(hù)端的App自動(dòng)自殺。
除了流量的問(wèn)題,還有一些問(wèn)題也是很隱蔽的,比如說(shuō)用戶(hù)的流量看起來(lái)沒(méi)有太大變化。但是可能客戶(hù)端有bug或者是設(shè)計(jì)不當(dāng),調(diào)用了幾次后臺(tái)操作,這個(gè)版本發(fā)出去的話(huà),調(diào)用可能會(huì)增加好幾倍甚至更多,后臺(tái)的壓力就非常大,于是又是過(guò)載保護(hù),又是緊急擴(kuò)容,這個(gè)也不是開(kāi)發(fā)團(tuán)隊(duì)希望看到的,需要有更好的辦法來(lái)解決它。比如可以分析這個(gè)版本,每個(gè)用戶(hù)的使用頻率。如果發(fā)現(xiàn)這個(gè)版本與上個(gè)版本相比,使用頻率變化很大,多了很多,而且又沒(méi)有提前報(bào)備,這里肯定有問(wèn)題,就把這個(gè)問(wèn)題抓出來(lái),這些事情靠測(cè)試同學(xué)是不現(xiàn)實(shí)的,他很難測(cè)試到這些問(wèn)題,這些問(wèn)題需要技術(shù)同學(xué)自己想辦法通過(guò)做智能數(shù)據(jù)分析來(lái)發(fā)現(xiàn)。
架構(gòu)設(shè)計(jì)的理念
根據(jù)大量的實(shí)踐,開(kāi)發(fā)團(tuán)隊(duì)提煉出兩個(gè)關(guān)鍵詞:輕量交互和差異服務(wù)。
1. 輕量交互
輕量交互,其實(shí)核心思想就是節(jié)省,主要思想是從協(xié)議層面以及邏輯層面做一些精簡(jiǎn)、合并、壓縮、消峰、異步等等。
減少交互步驟??蛻?hù)端一次請(qǐng)求,盡量把信息都拿下去,后臺(tái)也盡量把相關(guān)的信息都加進(jìn)去,完整地帶下去,減少交互步驟。這里要求后臺(tái)要多主動(dòng)地做一些聚合工作,一些協(xié)議要重新設(shè)計(jì)。
精簡(jiǎn)交互信息,盡量減少每一次傳輸過(guò)程中的信息。有個(gè)原則,就是不用的信息盡量不要拉,這里要求開(kāi)發(fā)團(tuán)隊(duì)在協(xié)議設(shè)計(jì)的時(shí)候要非常靈活和細(xì)致,要支持增量更新和同步邏輯。
復(fù)用包頭。一般做協(xié)議設(shè)計(jì)的時(shí)候有包頭和包體,包頭里面放一些賬號(hào)信息、身份憑證,還有版本信息。尤其隨著現(xiàn)在安全壓力越來(lái)越大,形勢(shì)越來(lái)越嚴(yán)峻,身份憑證可能會(huì)越來(lái)越長(zhǎng)。其實(shí)這些信息沒(méi)必要每次都帶,可以在接入server時(shí)做一些緩存,后面的包就不需要這些信息了,這樣的話(huà)每個(gè)包可以減少幾十個(gè)字節(jié),甚至更可觀(guān)。這樣算起來(lái)收益是很大的,不光能幫用戶(hù)省流量,因?yàn)閭鞯膬?nèi)容燒,也能加快速度,對(duì)體驗(yàn)也有改善,勿以善小而不為。
智能合并壓縮。這里需要對(duì)業(yè)務(wù)邏輯有深入的了解。不是所有的包一定要最快響應(yīng),可以請(qǐng)求分一下優(yōu)先級(jí),哪些是需要及時(shí)響應(yīng)的,一定要及時(shí)保證。哪些是可以降級(jí)的,不需要很及時(shí)??梢园汛罅康牟恍枰皶r(shí)響應(yīng)的包做一些延遲,這個(gè)延遲不僅是為了解決運(yùn)營(yíng)商的消耗問(wèn)題,延遲以后可以做壓縮。當(dāng)然具體延遲多久,可能要根據(jù)具體業(yè)務(wù)的場(chǎng)景來(lái)看。
客戶(hù)端異步削峰。還是細(xì)分問(wèn)題,把一些不重要的包或者是當(dāng)前這個(gè)不是立即需要的可以往后放,先讓用戶(hù)快點(diǎn)接入進(jìn)來(lái)。同樣,客戶(hù)端也需要注意不要把UI繪制跟存儲(chǔ)放在一個(gè)線(xiàn)程里面做,避免卡頓。
2.差異服務(wù)
可以把差異服務(wù)理解成個(gè)性化服務(wù),針對(duì)網(wǎng)絡(luò)情況和終端優(yōu)化應(yīng)用。下面具體看看。
怎么做好預(yù)拉取。比如說(shuō)QQ會(huì)拉消息,拉過(guò)來(lái)的一堆消息里面可能有一些是圖片消息,一開(kāi)始看到這些圖片消息只是縮略圖。那何時(shí)去下載這些縮略圖的原圖呢?如果說(shuō)等用戶(hù)點(diǎn)了之后再去下載,自然大家會(huì)覺(jué)得這個(gè)很慢,體驗(yàn)不好。那提前下載該怎么做呢?這里要細(xì)致和全面一點(diǎn)。比如說(shuō)可能要細(xì)分網(wǎng)絡(luò)狀況,在非WIFI網(wǎng)絡(luò)下面流量是很貴的。如果把原圖下載了下來(lái),用戶(hù)也不看,這樣流量就浪費(fèi)了,這浪費(fèi)的就是錢(qián),肯定不合適。那怎么辦呢?可以設(shè)計(jì)一個(gè)算法,類(lèi)似于銀行家算法,給每個(gè)用戶(hù)分配一個(gè)配額。比如說(shuō)有500K的配額,預(yù)拉取一張?jiān)瓐D,比如100K,如果用戶(hù)看了原圖,配額不變;如果用戶(hù)后來(lái)并沒(méi)有看,則把配額減去100K,凡是預(yù)拉取了而不看的配額都減掉,配額減到零就不會(huì)再做預(yù)拉取了,避免盲目下載造成大量的流量消耗。
在WIFI情況下,是不是可以簡(jiǎn)單地全下載下來(lái)呢?這樣也不好。雖然用戶(hù)的流量在WIFI下基本不收費(fèi),但是騰訊后臺(tái)的出口帶寬很貴。尤其是圖片下載消耗非常大,這個(gè)錢(qián)是很多的。怎么辦呢?可以根據(jù)業(yè)務(wù)場(chǎng)景做細(xì)分。比如把圖片分為群圖和C2C圖,就是好友之間點(diǎn)對(duì)點(diǎn)的圖。分析發(fā)現(xiàn),C2C圖相對(duì)是比較重要的,用戶(hù)點(diǎn)看原圖的概率非常大。同時(shí)C2C圖占比相對(duì)來(lái)說(shuō)又是非常小的,因?yàn)榇蟛糠质侨簣D。所以C2C圖可以預(yù)拉取。群圖還是采用類(lèi)似于銀行家算法的方式進(jìn)行管控。
預(yù)拉取思路很簡(jiǎn)單,但是要做好,可能還需要很細(xì)致地結(jié)合網(wǎng)絡(luò)狀況,結(jié)合用戶(hù)狀況和業(yè)務(wù)場(chǎng)景做細(xì)致全面的細(xì)分,這樣才能在用戶(hù)體驗(yàn),以及服務(wù)成本和用戶(hù)成本之間找到一個(gè)恰當(dāng)?shù)钠胶狻?/p>
信息繁簡(jiǎn)不一。很多信息應(yīng)該分類(lèi)歸檔,針對(duì)一些好終端、好網(wǎng)絡(luò),盡量返回一次很好的信息,反之只給它簡(jiǎn)化版。
多種套圖規(guī)格。需要根據(jù)多種屏幕來(lái)抽象和簡(jiǎn)化出幾種通用的圖片規(guī)格,而且可以根據(jù)不同網(wǎng)絡(luò)狀況來(lái)定每種規(guī)格的壓縮率。
終端是該輕還是重。到了手機(jī)時(shí)代,因?yàn)槭謾C(jī)本身能力比較弱,而且產(chǎn)品還經(jīng)常要求做一些跨終端的一致體驗(yàn),很多東西必須放在云端統(tǒng)一處理才可以。大部分場(chǎng)景下是輕終端重后臺(tái),具體要看業(yè)務(wù)場(chǎng)景。比如說(shuō)有些游戲,以前PC時(shí)代為了防止PC客戶(hù)端作弊,很多信息都是客戶(hù)端直接給server,一律由server統(tǒng)一去算。但是在手機(jī)游戲上面,為了減少信息傳遞以及減少交互次數(shù),很可能會(huì)在終端也做適當(dāng)?shù)挠?jì)算,把計(jì)算結(jié)果再發(fā)給server,在這種特殊的場(chǎng)景下面,在這些邏輯方面可能終端做的更重一些。所以這個(gè)問(wèn)題有普遍性,也有特殊性,要具體分析、具體看,深入理解業(yè)務(wù)場(chǎng)景和邏輯。
能不差異的地方就不差異,考慮全面些。設(shè)計(jì)的時(shí)候要考慮全面,要把各種平臺(tái)、各種網(wǎng)絡(luò)都考慮到。在選擇壓縮算法、加密算法、圖片格式和文件格式時(shí),這些東西能通用的還是盡量通用,不要給自己找麻煩。如果有些地方?jīng)]法統(tǒng)一,必須要差異,這里要抽象簡(jiǎn)化,簡(jiǎn)化為幾大類(lèi),而且這個(gè)差異點(diǎn)盡量使后臺(tái)可調(diào)可控。
終端版本信息管理,終端運(yùn)營(yíng)配置管理。需要把終端版本的各種信息記錄下來(lái),然后才可以根據(jù)這些信息,再加上用戶(hù)的信息靈活調(diào)整配置給不同用戶(hù)更好的體驗(yàn)??梢愿鶕?jù)不同地區(qū)、不同網(wǎng)絡(luò)、不同版本、不同運(yùn)營(yíng)商和不同號(hào)碼,以及根據(jù)不同的CPU、不同的攝象頭、不同的內(nèi)存,給用戶(hù)下發(fā)不同的閃屏和不同的插件,這是基礎(chǔ)能力的建設(shè)。
范瑞彬最后還用一句話(huà)做了總結(jié):“從實(shí)踐中來(lái),到實(shí)踐中去”。
本文演講者 范瑞彬
- 目前還沒(méi)評(píng)論,等你發(fā)揮!