1. 程式人生 > >聊聊推送的架構及關鍵技術實現

聊聊推送的架構及關鍵技術實現

這是一個比較完整的推送業務架構圖,分為三個部分:業務層、通道層和客戶端常駐服務,一般來說客戶端常駐服務和通道層維持一個長連線通道實現資料的雙向傳遞,而業務層實現的是基於推送業務形態的展示,例如推送的定時任務推送,介面推送,以及訊息型別定義等等,我們這篇文章先聚焦通道層和客戶端常駐服務的一個元件介紹和關鍵技術實現。

通道層

推送後端接入:這一層是業務的接入層,一般來說是對內網開放,通常採取的是RPC的遠端呼叫實現,訊息更高。

儲存:依賴進行訊息資料統計,以及離線訊息資訊儲存,待終端網路開啟之後再實施推送。

訊息分發:依據訊息到達進行就近機房選擇,訊息體封裝等。

推送前端接入:和客戶端進行長連線維持。

客戶端

鑑權及防偽服務:進行訊息體格式校驗,訊息防偽造驗證

狀態適配服務:識別當前終端所處環境和狀態,例如微信所做的狀態適配服務區分為:活躍態、次活躍態、自適應計算態、後臺穩定態以及空閒態等幾種。選擇不同的狀態會傳送給心跳服務採取不同的心跳時間間隔。

心跳服務:為了應對NAT斷連、DHCP租期失效、連線探測,需要有一個心跳服務進行維持,而心跳服務的選擇策略是長連線維持的一個重要優化點。

後端感知:主要是為了應對DNS劫持以及就近流量訪問所出現的一個服務。

對一個推送的基本架構和業務模組有一個初步瞭解之後我們可以接下來談一談關於實現這個系統的幾個關鍵技術難點了

心跳機制優化

前面我們已經討論了長連線裡面一個非常重要的優化點就是心跳機制優化,那位什麼需要心跳機制優化,我們先看下現實場景下有什麼問題會導致一定需要長連線維持及優化。長連線需要維持那麼肯定是有一些原因會導致長連線失效,總結一下有如下幾個場景:

NAT斷連

因為 IP v4 的 IP 量有限,運營商分配給手機終端的 IP 是運營商內網的 IP,手機要連線 Internet,就需要通過運營商的閘道器做一個網路地址轉換(Network Address Translation,NAT)。簡單的說運營商的閘道器需要維護一個外網 IP、埠到內網 IP、埠的對應關係,以確保內網的手機可以跟 Internet 的伺服器通訊。大部分移動無線網路運營商都在鏈路一段時間沒有資料通訊時,會淘汰 NAT 表中的對應項,造成鏈路中斷。下表列出一些已測試過的網路的NAT超時時間(更多資料由於測試條件所限沒有測到):