概述緩存
在即時通信領域,要求消息到達必須保證及時性。而在當前的移動互聯網環境下,移動端設備面臨諸多問題,尤爲是因基站隨着設備的移動而不斷切換,會致使信號不穩定,從而形成通訊質量難以保證。因此,在不穩定的網絡情況下,如何實現網絡健康狀態的探測,及時重連來保證鏈路的穩定性,最終作到網絡抖動狀況下用戶無感知,是衆多技術人員面臨的難題。安全
複雜的網絡情況服務器
一、 DNS 問題網絡
1)因爲 DNS 劫持或故障形成的服務不可用;架構
2)因爲 DNS 調度不許確致使的性能退化。性能
DNS 劫持或者故障原理測試
二、弱網問題優化
1)在電梯、山區或者偏遠地區,因爲某些區域基站覆蓋不到,致使的網絡偏弱;加密
2)因爲其餘信號干擾致使的網絡偏弱。spa
解決方法
一、連接策略
連接策略架構
二、HTTPS
HTTPS 即 HTTP 協議添加了一層 SSL 協議加密的處理,SSL 證書則遵照 SSL 協議,由受信任的數字證書頒發機構 CA,在驗證服務器身份後頒發,簽發後的證書做爲公鑰通常放在服務器的根目錄下,便於客戶端請求返回給客戶端,私鑰在服務器的內部中心保存,用於解密公鑰。
HTTPS 架構圖
安全性:
1)使用 HTTPS 協議可認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
2) HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網絡協議,要比HTTP 協議安全,可防止數據在傳輸過程當中被竊取、改變,確保數據的完整性;
3) HTTPS 是現行架構下最安全的解決方案,雖沒法保證絕對安全,但它大幅增長了中間人攻擊的成本,可解決網絡劫持相關問題。
三、HTTPDNS
傳統的 DNS 解析:
DNS 完整的解析流程很長,首先從本地系統緩存中獲取 IP 地址,若沒法獲取需到最近的 DNS 服務器獲取,仍沒法獲取的狀況下則須要到主域名服務器獲取,每一層都有緩存,但爲了域名解析的實時性,每一層緩存都有過時時間,這種 DNS 解析機制有幾個缺點:
1) 緩存時間設置的長,會致使域名更新不及時,若設置的短,大量 DNS 解析請求則會影響請求速度;
2) 域名劫持,容易被中間人攻擊或被運營商劫持。據統計,把域名解析到第三方 IP 地址,劫持率將高達7%;
3) DNS 解析過程不受控制,沒法保證解析到最快的IP;
4) 一次請求只能解析一個域名。
使用了 HTTPDNS 後:
1) 域名解析與請求分離,全部請求都直接用IP地址,無需 DNS 解析,App 定時請求 HTTPDNS 服務器更新IP地址便可;
2)經過簽名等方式,保證 HTTPDNS 請求的安全,避免被劫持;
3)DNS 解析由本身控制,能夠確保返回用戶所在地就近的 IP 地址,或根據客戶端測速結果使用速度最快的 IP;
4)一次請求能夠解析多個域名;
5)安全、精準的解析結果:使用 HTTP 協議訪問服務端,得到域名解析結果,繞過運營商的 Local DNS ,避免域名劫持;HTTPDNS 可以直接獲得客戶端的出口網關 IP,從而更準確地判斷客戶端地區和運營商,獲得更精準的解析結果。
四、複合連接
複合鏈接,即多條鏈接。它解決的是爲了多個 IP 地址的鏈接選取問題,根據當前的地域、網絡情況選取速度最快、最優的 IP 地址。
咱們以域名查詢返回兩個 IP 爲例介紹其過程:
1)這兩個 IP 會按照順序嘗試創建鏈接,若是第一個 IP 返回失敗,將當即開始鏈接第二個 IP;
2)若是第一個 IP 率先成功返回,那麼第二個 IP 將被加入鏈接嘗試列表並中止全部嘗試鏈接;
3)若是第一個 IP 失敗,會馬上開始第二個 IP 的鏈接;
4)若是第一個 IP 處於 pending 狀態,那麼會啓動一個定時器,默認延遲 2s 會發起第二個 IP 的鏈接,若是是多個 IP 將會遞歸鏈接。
五、智能心跳
影響TCP 長鏈接壽命的因素:
1) NAT 超時
大部分移動無線網絡運營商都在鏈路一段時間後無數據通信的狀況下,會淘汰 NAT 表中的對應項,形成鏈路中斷。NAT 超時是影響 TCP 鏈接壽命的一個重要因素(尤爲是國內),因此客戶端自動測算NAT 超時時間,來動態調整心跳間隔,是一個重要的優化點。
2)DHCP 的租期(lease time)
目前測試發現安卓系統對DHCP的處理有Bug,DHCP租期到了不會主動續約而且會繼續使用過時IP,這個問題會形成TCP長鏈接偶然斷連。
3) 網絡狀態變化
手機網絡和WIFI網絡切換、網絡斷開和重連等狀況會形成網絡狀態的變化,從而致使長鏈接變爲無效鏈接,須要監聽響應的網絡狀態變化事件,從新創建長鏈接。
心跳策略:
應根據不一樣的運營商、網絡狀態,選擇不一樣的心跳策略。
1)先後臺區分處理
爲了保證接收消息的及時性體驗,當應用處於前臺活躍狀態時,使用固定心跳。應用進入後臺(或者前臺關屏)時,先用幾回最當心跳維持長連接;而後進入後臺自適應心跳計算。先後臺區分處理目的是儘可能選擇用戶不活躍的時間段,以減小心跳計算可能產生的消息延時收取問題以及應用頻繁心跳致使的耗電問題。
2)自適應不一樣的網絡策略
一般爲了保障安全,各個辦公區域配置的網絡策略不盡相同。爲了適應這種狀況,SDK 可智能探測出心跳的時間區間,保證連接的穩定性。
3)冗餘心跳
當用戶點亮屏幕的時候,作一次心跳;切換到前臺時,作一次心跳;聯網時重建信令TCP,作一次心跳。