iOS網(wǎng)絡(luò)請(qǐng)求優(yōu)化之DNS映射無(wú)標(biāo)題文章

絕大多數(shù)網(wǎng)絡(luò)請(qǐng)求的第一步都是DNS解析,解析請(qǐng)求根據(jù)當(dāng)時(shí)網(wǎng)絡(luò)情況不同掩浙,各平臺(tái)的DNS緩存策略差異等因素赖临,對(duì)移動(dòng)端app整體網(wǎng)絡(luò)性能會(huì)產(chǎn)生或大或小的影響。移動(dòng)端app網(wǎng)絡(luò)性能優(yōu)化涉及到很多方面爽茴,DNS映射只是其中一環(huán)葬凳,也是十分重要的一環(huán),因?yàn)樗鼛?lái)的好處不僅僅是降低網(wǎng)絡(luò)請(qǐng)求的延遲室奏。
降低DNS請(qǐng)求帶來(lái)的延遲
客戶端app的請(qǐng)求第一步都是DNS解析火焰,但由于cache的存在使得大部分的解析請(qǐng)求并不會(huì)產(chǎn)生任何延遲。各品臺(tái)都有自己的cache過(guò)期策略胧沫。像iOS系統(tǒng)一般是24小時(shí)之后會(huì)過(guò)期昌简,還有進(jìn)入飛行模式再切回來(lái),開(kāi)關(guān)機(jī)琳袄,重置網(wǎng)絡(luò)設(shè)置等也會(huì)導(dǎo)致DNS cache的清除江场。所以一般情況下用戶在第二天打開(kāi)你的app都會(huì)經(jīng)歷一次完整的DNS解析請(qǐng)求,網(wǎng)絡(luò)情況差的時(shí)候會(huì)明顯增加應(yīng)用請(qǐng)求的總耗時(shí)窖逗。如果能直接跳過(guò)DNS解析這一步址否,當(dāng)然能提升網(wǎng)絡(luò)性能了。
預(yù)防DNS劫持
DNS劫持指的是改變DNS請(qǐng)求的返回結(jié)果,將目的ip指向另一個(gè)地址佑附。一般有兩種方式樊诺,一是通過(guò)病毒的方式改變本機(jī)配置的DNS服務(wù)器地址,而是通過(guò)攻擊正常DNS服務(wù)器而改變其行為音同。不管是哪種方式词爬,都會(huì)影響app本身的業(yè)務(wù)請(qǐng)求。如果遇到惡意的攻擊還會(huì)衍生出各種安全問(wèn)題权均《倥颍客戶端自己做DNS與ip地址的映射就跨過(guò)了解析,讓劫持者無(wú)從下手叽赊。
服務(wù)器動(dòng)態(tài)部署
DNS映射實(shí)際是模擬了DNS請(qǐng)求的解析行為恋沃。如果客戶端將自己的位置信息諸如ip地址,國(guó)家碼等加入映射文件的請(qǐng)求參數(shù)當(dāng)中必指,服務(wù)器就可以根據(jù)客戶端所處的位置不同囊咏,下發(fā)距離其物理位置最近的server ip地址,從而減小整體網(wǎng)絡(luò)請(qǐng)求的延遲塔橡,實(shí)現(xiàn)一定程度的服務(wù)器動(dòng)態(tài)部署梅割。
如何設(shè)計(jì)自己的DNS映射機(jī)制?
DNS解析請(qǐng)求簡(jiǎn)單來(lái)說(shuō)葛家,無(wú)非是輸入一個(gè)域名户辞,輸出一個(gè)ip地址。做自己的映射機(jī)制也就是客戶端本地維護(hù)這樣一個(gè)映射文件惦银,只不過(guò)這個(gè)映射文件需要能從服務(wù)器更新咆课,還要做一些容錯(cuò)處理。我們先從這幾個(gè)基本要求出發(fā)制定下面幾個(gè)必須滿足的需求扯俱。
一個(gè)打包到app包里面的默認(rèn)映射文件书蚪,這樣可以避免第一次去服務(wù)器取配置文件帶來(lái)的延遲。
有一個(gè)定時(shí)器能每隔一段時(shí)間從服務(wù)器獲取最新的映射迅栅,并覆蓋本地殊校。
每次取到最新的映射文件之后,同時(shí)把上一次的映射文件保存起來(lái)作為替補(bǔ)读存,一旦出現(xiàn)線上配置失誤不至于導(dǎo)致請(qǐng)求無(wú)法處理为流。
如果映射文件不能處理域名,要能回滾使用默認(rèn)的DNS解析服務(wù)让簿。
如果一個(gè)映射過(guò)后的ip持續(xù)導(dǎo)致請(qǐng)求失敗敬察,應(yīng)該能從機(jī)制上保證這個(gè)ip地址不再使用。也就是需要一個(gè)無(wú)效映射淘汰機(jī)制尔当。
無(wú)效的ip地址能及時(shí)上報(bào)到服務(wù)器莲祸,及時(shí)發(fā)現(xiàn)問(wèn)題更新映射文件。

基于這些基本需求,可以做出如下簡(jiǎn)單的設(shè)計(jì):


大致有3個(gè)角色锐帜,mapper田盈,validator,reporter缴阎。各自職責(zé)如下:
mapper
mapper是和外部交互的部分允瞧,主要負(fù)責(zé)在輸入domain的情況下輸出ip,同時(shí)還要檢測(cè)來(lái)自應(yīng)用層請(qǐng)求成功和失敗的信息蛮拔。失敗的情況下要將失敗的ip進(jìn)行進(jìn)一步的檢測(cè)述暂,以確定是否真的是ip地址無(wú)效,如果無(wú)效則進(jìn)行上報(bào)建炫。mapper還要負(fù)責(zé)從mapper文件的更新機(jī)制贸典。
validator
validator在接受到請(qǐng)求失敗的ip時(shí),要負(fù)責(zé)對(duì)這個(gè)ip做進(jìn)一步的有效性檢測(cè)踱卵。檢測(cè)規(guī)則的強(qiáng)弱可自己定制尿瞭。但一般來(lái)說(shuō)流程在后臺(tái)線程使用這個(gè)地址做多次連接嘗試浩峡。如果失敗則告訴mapper這個(gè)地址確實(shí)無(wú)效穷当。如果成功則表明這個(gè)地址有效持偏,很有可能只是當(dāng)時(shí)的網(wǎng)絡(luò)環(huán)境導(dǎo)致了請(qǐng)求的失敗劝堪。
reporter
reporter主要負(fù)責(zé)告訴server整個(gè)mapping機(jī)制的健康狀況捶索。在出現(xiàn)某個(gè)ip經(jīng)過(guò)validator檢測(cè)依然失敗的情況下蜈膨,要及時(shí)的告訴server出問(wèn)題的ip躺翻。很有可能出現(xiàn)了某個(gè)服務(wù)器故障或者映射文件的配置失誤等等鳞芙。
在上面這些基礎(chǔ)需求之外眷柔,還可以根據(jù)自身的業(yè)務(wù)特點(diǎn)及技術(shù)條件做一些深度定制。比如從服務(wù)器定期更新映射文件原朝,可以改成socket長(zhǎng)鏈接通道在需要更新時(shí)push驯嘱,或者利用http2.0的server push機(jī)制。還有上報(bào)機(jī)制喳坠,除了上報(bào)錯(cuò)誤的ip地址映射之外鞠评,還可以對(duì)請(qǐng)求的總量,成功率壕鹉,映射成功率等數(shù)據(jù)進(jìn)行偵測(cè)剃幌。
PPDNSMapping
PPDNSMapping是根據(jù)以上設(shè)計(jì)原則所做的iOS平臺(tái)例子,附有測(cè)試demo代碼晾浴。
PPDNSMappingManager對(duì)應(yīng)圖一當(dāng)中的mapper负乡,PPIPValidator對(duì)應(yīng)validator,PPDNSReporter對(duì)應(yīng)reporter脊凰。
github地址

貌似因?yàn)樘O(píng)果在6月份之前要求所有上架的APP要兼容IPv6抖棘,所以IP直連貌似不可行了..

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钉答,更是在濱河造成了極大的恐慌础芍,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件数尿,死亡現(xiàn)場(chǎng)離奇詭異仑性,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)右蹦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)诊杆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人何陆,你說(shuō)我怎么就攤上這事晨汹。” “怎么了贷盲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵淘这,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我巩剖,道長(zhǎng)铝穷,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任佳魔,我火速辦了婚禮曙聂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鞠鲜。我一直安慰自己宁脊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布贤姆。 她就那樣靜靜地躺著榆苞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪霞捡。 梳的紋絲不亂的頭發(fā)上语稠,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音弄砍,去河邊找鬼仙畦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛音婶,可吹牛的內(nèi)容都是我干的慨畸。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼衣式,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寸士!你這毒婦竟也來(lái)了檐什?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弱卡,失蹤者是張志新(化名)和其女友劉穎乃正,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體婶博,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓮具,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凡人。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片名党。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖挠轴,靈堂內(nèi)的尸體忽然破棺而出传睹,到底是詐尸還是另有隱情,我是刑警寧澤岸晦,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布欧啤,位于F島的核電站,受9級(jí)特大地震影響启上,放射性物質(zhì)發(fā)生泄漏堂油。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一碧绞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吱窝,春花似錦讥邻、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至照激,卻和暖如春发魄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俩垃。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工励幼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人口柳。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓苹粟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親跃闹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嵌削,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理毛好,服務(wù)發(fā)現(xiàn),斷路器苛秕,智...
    卡卡羅2017閱讀 134,600評(píng)論 18 139
  • 1. 概述 在網(wǎng)絡(luò)環(huán)境中一般用戶只需要在瀏覽器中輸入url如www.sunny.com就可以到對(duì)應(yīng)服務(wù)器獲取相應(yīng)的...
    ghbsunny閱讀 2,869評(píng)論 0 7
  • DNS(Domain Name System肌访,域名系統(tǒng)),因特網(wǎng)上作為域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù)艇劫,能...
    一直在努力hard閱讀 4,607評(píng)論 3 19
  • 最近吼驶,終于要把《WEB請(qǐng)求處理系列》提上日程了,一直答應(yīng)小伙伴們給分享一套完整的WEB請(qǐng)求處理流程:從瀏覽器港准、Ng...
    七寸知架構(gòu)閱讀 31,119評(píng)論 27 253
  • 1. 基礎(chǔ)知識(shí) 1.1 3種常見(jiàn)的計(jì)算機(jī)體系結(jié)構(gòu)劃分 OSI分層(7層):物理層旨剥、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層浅缸、傳輸層轨帜、會(huì)話...
    Mr希靈閱讀 19,847評(píng)論 6 120