iOS網絡請求優化之DNS映射無標題文章

絕大多數網絡請求的第一步都是DNS解析,解析請求根據當時網絡情況不同,各平臺的DNS緩存策略差異等因素,對移動端app整體網絡性能會產生或大或小的影響。移動端app網絡性能優化涉及到很多方面,DNS映射只是其中一環,也是十分重要的一環,因為它帶來的好處不僅僅是降低網絡請求的延遲。
降低DNS請求帶來的延遲
客戶端app的請求第一步都是DNS解析,但由于cache的存在使得大部分的解析請求并不會產生任何延遲。各品臺都有自己的cache過期策略。像iOS系統一般是24小時之后會過期,還有進入飛行模式再切回來,開關機,重置網絡設置等也會導致DNS cache的清除。所以一般情況下用戶在第二天打開你的app都會經歷一次完整的DNS解析請求,網絡情況差的時候會明顯增加應用請求的總耗時。如果能直接跳過DNS解析這一步,當然能提升網絡性能了。
預防DNS劫持
DNS劫持指的是改變DNS請求的返回結果,將目的ip指向另一個地址。一般有兩種方式,一是通過病毒的方式改變本機配置的DNS服務器地址,而是通過攻擊正常DNS服務器而改變其行為。不管是哪種方式,都會影響app本身的業務請求。如果遇到惡意的攻擊還會衍生出各種安全問題??蛻舳俗约鹤鯠NS與ip地址的映射就跨過了解析,讓劫持者無從下手。
服務器動態部署
DNS映射實際是模擬了DNS請求的解析行為。如果客戶端將自己的位置信息諸如ip地址,國家碼等加入映射文件的請求參數當中,服務器就可以根據客戶端所處的位置不同,下發距離其物理位置最近的server ip地址,從而減小整體網絡請求的延遲,實現一定程度的服務器動態部署。
如何設計自己的DNS映射機制?
DNS解析請求簡單來說,無非是輸入一個域名,輸出一個ip地址。做自己的映射機制也就是客戶端本地維護這樣一個映射文件,只不過這個映射文件需要能從服務器更新,還要做一些容錯處理。我們先從這幾個基本要求出發制定下面幾個必須滿足的需求。
一個打包到app包里面的默認映射文件,這樣可以避免第一次去服務器取配置文件帶來的延遲。
有一個定時器能每隔一段時間從服務器獲取最新的映射,并覆蓋本地。
每次取到最新的映射文件之后,同時把上一次的映射文件保存起來作為替補,一旦出現線上配置失誤不至于導致請求無法處理。
如果映射文件不能處理域名,要能回滾使用默認的DNS解析服務。
如果一個映射過后的ip持續導致請求失敗,應該能從機制上保證這個ip地址不再使用。也就是需要一個無效映射淘汰機制。
無效的ip地址能及時上報到服務器,及時發現問題更新映射文件。

基于這些基本需求,可以做出如下簡單的設計:


大致有3個角色,mapper,validator,reporter。各自職責如下:
mapper
mapper是和外部交互的部分,主要負責在輸入domain的情況下輸出ip,同時還要檢測來自應用層請求成功和失敗的信息。失敗的情況下要將失敗的ip進行進一步的檢測,以確定是否真的是ip地址無效,如果無效則進行上報。mapper還要負責從mapper文件的更新機制。
validator
validator在接受到請求失敗的ip時,要負責對這個ip做進一步的有效性檢測。檢測規則的強弱可自己定制。但一般來說流程在后臺線程使用這個地址做多次連接嘗試。如果失敗則告訴mapper這個地址確實無效。如果成功則表明這個地址有效,很有可能只是當時的網絡環境導致了請求的失敗。
reporter
reporter主要負責告訴server整個mapping機制的健康狀況。在出現某個ip經過validator檢測依然失敗的情況下,要及時的告訴server出問題的ip。很有可能出現了某個服務器故障或者映射文件的配置失誤等等。
在上面這些基礎需求之外,還可以根據自身的業務特點及技術條件做一些深度定制。比如從服務器定期更新映射文件,可以改成socket長鏈接通道在需要更新時push,或者利用http2.0的server push機制。還有上報機制,除了上報錯誤的ip地址映射之外,還可以對請求的總量,成功率,映射成功率等數據進行偵測。
PPDNSMapping
PPDNSMapping是根據以上設計原則所做的iOS平臺例子,附有測試demo代碼。
PPDNSMappingManager對應圖一當中的mapper,PPIPValidator對應validator,PPDNSReporter對應reporter。
github地址

貌似因為蘋果在6月份之前要求所有上架的APP要兼容IPv6,所以IP直連貌似不可行了..

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,816評論 18 139
  • 1. 概述 在網絡環境中一般用戶只需要在瀏覽器中輸入url如www.sunny.com就可以到對應服務器獲取相應的...
    ghbsunny閱讀 2,934評論 0 7
  • DNS(Domain Name System,域名系統),因特網上作為域名和IP地址相互映射的一個分布式數據庫,能...
    一直在努力hard閱讀 4,668評論 3 19
  • 最近,終于要把《WEB請求處理系列》提上日程了,一直答應小伙伴們給分享一套完整的WEB請求處理流程:從瀏覽器、Ng...
    七寸知架構閱讀 31,619評論 27 253
  • 1. 基礎知識 1.1 3種常見的計算機體系結構劃分 OSI分層(7層):物理層、數據鏈路層、網絡層、傳輸層、會話...
    Mr希靈閱讀 19,929評論 6 120