1. 程式人生 > >微信收費事件背後被廣泛忽略的技術細節

微信收費事件背後被廣泛忽略的技術細節

需要 googl 互聯網技術 根據 占用 應用 被人 轉變 發送

作為一個橫跨通信與互聯網兩大行業的從業者,前四年的核心網經驗和後五年的互聯網經驗讓我不得不感慨一個非常遺憾的現實:通信與互聯網兩大行業本來可以有珠聯璧合的技術協同,為移動互聯網提供近乎零耗電零流量的PUSH機制,但由於兩個行業之間長期以來的價值觀隔閡和互防心態,導致如今的手機PUSH技術不僅為用戶增加了顯著的電量消耗,還對移動運營商的基礎設施造成了完全不必要的信令壓力。微信與運營商的紛爭正是這種沖突集中爆發的結果。

看到不少來自兩個行業的專業分析,通信行業的專家譴責微信過於頻繁的心跳和短包導致“信令風暴”,而互聯網人士則往往站在用戶與道德的制高點上對移動運營商挖苦譏諷,雙方都很少探究這個問題的深層次技術和利益矛盾。這裏我不妨提一提有些大家沒有真正重視的技術細節。

為什麽使用同樣PUSH技術的Apple和Google等巨頭,沒有被運營商卯上,唯獨單單拿微信下手?大家也許會認為這是運營商欺軟怕硬,拿Apple和Google沒辦法。其實從實際數據上來看(下面將提到),微信確確實實產生了遠超Apple和Google的信令需求。難道是因為騰訊技不如人,被逮著了尾巴?其實不然,我們曾經也在PUSH技術上投入了較多的分析研究,其中一項發現或許可以解釋各種原委。根據分析,一般當基帶空閑超過一定時間後,運營商的IP網關會自動釋放(關閉)連接。目前各家所使用PUSH通道的實現原理雖然同為『長連接慢心跳』,但這個『慢』字卻有很大的文章。Google在Android系統中使用蜂窩(2G/3G)網絡連接GCM的PUSH通道時,默認采用的心跳周期是28分鐘

,這才是所謂“慢”的含義 —— 盡可能降低心跳的頻度,從而達到盡量省電的目的。但這個放諸全球絕大部分地區借行得通的規則,到了中國大陸,就出現了問題。以中移動的2.5G網絡為例,經過粗略測試,大約5分鐘左右的基帶空閑,連接就會被釋放,這就是為什麽微信Android版本選擇以『5分鐘』為周期發送連接心跳。可能有人會有疑問了,『那Google以28分鐘發送心跳,豈不是在中移動的2.5G網絡下無法保持PUSH長連接?』事實上,確實如此,這也是為什麽Google的PUSH通道經常『遲到』。當我們活躍使用手機時,由於基帶往往並不會閑置,所以部分掩蓋了問題的本質。另外,當連接到Wi-Fi時,寬帶的網關一般沒有空閑釋放機制,所以長連接會得到保持,這也進一步減少了我們平時遭遇的PUSH遲到。

『5分鐘』的心跳周期到底是什麽概念?可以理解為,每部安裝了微信的Android設備每天發送近300條短信(其實占用的信令資源還遠超這個數量);還意味著每天你的手機將被從待機省電狀態喚醒近300次,每次相當於打一個幾秒鐘的電話。粗略測算,一般的Android手機每天有超過15-20%的電量被消耗在發送過度頻繁的心跳上。其實,這都還遠不是最糟糕的事情。由於眾所周知的原因,大陸行貨渠道發售的Android手機都無法使用Google的PUSH通道,原本每個手機中只需要建立的唯一共享的PUSH通道,被人為分裂,以至於每一個聲稱為用戶提供實時通知的國內App,基本都在重復上面微信所做的行為。當你的手機中同時安裝了多個這類App時,無論手機的耗電,還是運營商的信令負擔,都要數倍於上述情形。

雖然我向來不憚以最壞的惡意揣測國內的壟斷巨頭,但在這個事情上,中移動或許確有它的苦衷。正如很多技術文章中所言,2G網絡的基礎結構和協議並未針對IP傳輸優化,其服務IP鏈路的信令承載能力相對較弱,而TD-SCDMA又長期得不到真正的發展,導致中移動的2.5G網絡承受了超齡超載的負荷。刻意縮短空閑連接的釋放超時,可能原本是期望能起到節省信道資源的目的,沒想到聰明反被聰明誤,這一限制性的舉措讓互聯網應用不得不以遠高於正常的頻率發送心跳以維持PUSH長連接,結果大大加重的信令負擔,給本就脆弱的2.5G網絡雪上加霜,而且更給用戶的手機造成了遠超常規PUSH技術的電量消耗,造成了如今這一『三輸』的格局。

其實,不光是微信,整個移動互聯網行業都在努力解決PUSH機制目前所面對的各方面問題。包括Google、Apple這樣在整個行業舉足輕重的巨頭,都僅僅在OSI通信協議的4層以上作各種努力,目前幾乎所有的PUSH機制都基於『TCP長連接慢心跳』方式實現。雖然『慢心跳』如果得以正常工作,可以在一定程度上降低手機基帶模塊的工作頻度,但無論互聯網行業在技術上再如何標榜“PUSH”相比“PULL”的流量優勢,但在OSI的下三層來看,基帶模塊所承受的負擔和“PULL”仍然沒有本質差別。這就決定了耗電問題不可能從互聯網技術層面徹底解決。事實上,在移動通信網絡中,信令是一種天然的最佳PUSH載體,它不需要任何IP層的收發包(也就不需要TCP連接)就能實現秒級的實時性,最重要的是它沒有任何額外的電量負擔,手機完全只需處於正常的待機狀態。可惜移動運營商只會將其運用在一本萬利的SMS(及WAP PUSH)服務,壓根不可能無償提供給互聯網產業使用。結果,互聯網行業選擇了雖然不用付費,但卻代價高昂的『TCP長連接』,只為讓用戶享受到免費的通知服務。這種兩大行業置用戶體驗於不顧的分庭抗禮,已經相持近10年,而當互聯網終究開始以免費服務反噬移動運營商的SMS甚至語音業務時,運營商再也坐不住了…… 但與其飽受信令風暴的折磨,不如主動免費開放信令通道作為更高效的PUSH通道給互聯網產業使用,再以『免費增值』的思路構建有QoS保障的VIP PUSH服務。不僅可以大幅度節約信令資源,更能以用戶體驗的提升打造核心競爭優勢和增值空間。能否走出這樣一條轉折的道路,就看運營商是否願意轉變思維了。

註:由於iOS系統的相對封閉性,暫時未能測定Apple的Push通道APNS在2.5G網絡下的長連接心跳周期。歡迎了解的朋友補充測試數據。

UPDATE:更正微信Android版在中移動2.5G網絡下的心跳周期為5分鐘(此前測定的2.5分鐘存在偏差)

微信收費事件背後被廣泛忽略的技術細節