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

發表於2013-04-16

來源:oasis feng 的部落格

作為一個橫跨通訊與網際網路兩大行業的從業者,前四年的核心網經驗和後五年的網際網路經驗讓我不得不感慨一個非常遺憾的現實:通訊與網際網路兩大行業本來可以有珠聯璧合的技術協同,為移動網際網路提供近乎零耗電零流量的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分鐘存在偏差)

 

相關文章