看了极光推送技术原理的几点思考
看了極光推送技術原理的幾點思考
分類:?android2012-11-26 20:50?16586人閱讀?評論(18)?收藏?舉報目錄(?)[+]
移動互聯(lián)網(wǎng)應用現(xiàn)狀
因為手機平臺本身、電量、網(wǎng)絡流量的限制,移動互聯(lián)網(wǎng)應用在設計上跟傳統(tǒng) PC 上的應用很大不一樣,需要根據(jù)手機本身的特點,盡量的節(jié)省電量和流量,同時又要盡可能的保證數(shù)據(jù)能及時到達客戶端。
為了解決數(shù)據(jù)同步的問題,在手機平臺上,常用的方法有2種。一種是定時去服務器上查詢數(shù)據(jù),也叫Polling,還有一種手機跟服務器之間維護一個 TCP 長連接,當服務器有數(shù)據(jù)時,實時推送到客戶端,也就是我們說的 Push。
從耗費的電量、流量和數(shù)據(jù)送達的及時性來說,Push 都會有明顯的優(yōu)勢,但 Push 的實現(xiàn)和維護成本相對較高。在移動無線網(wǎng)絡下維護長連接,相對也有一些技術上的難度。本文試圖給大家介紹一下我們極光推送在 Android 平臺上是如何維護長連接。
移動無線網(wǎng)絡的特點
因為 IP v4 的 IP 量有限,運營商分配給手機終端的 IP 是運營商內(nèi)網(wǎng)的 IP,手機要連接 Internet,就需要通過運營商的網(wǎng)關做一個網(wǎng)絡地址轉(zhuǎn)換(Network Address Translation,NAT)。簡單的說運營商的網(wǎng)關需要維護一個外網(wǎng) IP、端口到內(nèi)網(wǎng) IP、端口的對應關系,以確保內(nèi)網(wǎng)的手機可以跟 Internet 的服務器通訊。
圖片源自 cisco.com.?
NAT 功能由圖中的 GGSN 模塊實現(xiàn)。
大部分移動無線網(wǎng)絡運營商都在鏈路一段時間沒有數(shù)據(jù)通訊時,會淘汰 NAT 表中的對應項,造成鏈路中斷。
Android 平臺上長連接的實現(xiàn)
為了不讓 NAT 表失效,我們需要定時的發(fā)心跳,以刷新 NAT 表項,避免被淘汰。
Android 上定時運行任務常用的方法有2種,一種方法用 Timer,另一種是AlarmManager。
Timer
Android 的 Timer 類可以用來計劃需要循環(huán)執(zhí)行的任務,Timer 的問題是它需要用 WakeLock 讓 CPU 保持喚醒狀態(tài),這樣會大量消耗手機電量,大大減短手機待機時間。這種方式不能滿足我們的需求。
AlarmManager
AlarmManager 是 Android 系統(tǒng)封裝的用于管理 RTC 的模塊,RTC (Real Time Clock) 是一個獨立的硬件時鐘,可以在 CPU 休眠時正常運行,在預設的時間到達時,通過中斷喚醒 CPU。
這意味著,如果我們用 AlarmManager 來定時執(zhí)行任務,CPU 可以正常的休眠,只有在需要運行任務時醒來一段很短的時間。極光推送的 Android SDK 就是基于這種技術實現(xiàn)的。
服務器設計
當有大量的手機終端需要與服務器維持長連接時,對服務器的設計會是一個很大的挑戰(zhàn)。
假設一臺服務器維護10萬個長連接,當有1000萬用戶量時,需要有多達100臺的服務器來維護這些用戶的長連接,這里還不算用于做備份的服務器,這將會是一個巨大的成本問題。那就需要我們盡可能提高單臺服務器接入用戶的量,也就是業(yè)界已經(jīng)討論很久了的 C10K 問題。
C2000K
針對這個問題,我們專門成立了一個項目,命名為C2000K,顧名思義,我們的目標是單機維持200萬個長連接。最終我們采用了多消息循環(huán)、異步非阻塞的模型,在一臺雙核、24G內(nèi)存的服務器上,實現(xiàn)峰值維持超過300萬個長連接。
后記
穩(wěn)定維護長連接是推送平臺的一個基礎,極光推送團隊將會在這方面長期投入,以保證用戶能有效的節(jié)省電量、流量,同時數(shù)據(jù)能實時送達。
以上是極光推送官方的文章,但是看了之后不免有幾個疑問。
?
1)他們號稱最高峰值可以達到300W的長連接,但是活躍鏈接的處理最高是多少呢?
2)消息的平均長度和限制各是多少?
3)消息的及時性怎么樣,延時是多少?
4)不知道現(xiàn)在,極光推送的用戶大概有多少,所以這個峰值是在生產(chǎn)環(huán)境,還是測試環(huán)境的數(shù)值?
5)我想不通的是為什么,客戶端要用AlarmManager來做推送消息的獲取?這個消息獲取還及時嗎?鄙人結(jié)識android也有N載。
6)我感興趣的是,不是極光方案一個月推送了幾百萬條數(shù)據(jù),而是幾秒鐘或者一分鐘可以處理多少。
?
轉(zhuǎn)載于:https://www.cnblogs.com/u0mo5/p/4413437.html
總結(jié)
以上是生活随笔為你收集整理的看了极光推送技术原理的几点思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猫咪打疫苗大概需要多少钱
- 下一篇: 经典贪心法:时间序列问题及其全局最优性证