百度App網路深度優化系列(一) DNS優化

2021-09-17 07:27:31 字數 3776 閱讀 8417

dns(domain name system),它的作用是根據網域名稱查出ip位址,它是http協議的前提,只有將網域名稱正確的解析成ip位址後,後面的http流程才能進行,所以一般做網路優化會首選優化dns。

dns優化核心需要解決的問題有兩點:

由於dns劫持或故障造成的服務不可用,進而影響使用者體驗,影響公司的收入。

由於dns排程不準確導致的效能退化,進而影響使用者體驗。

運營商劫持或故障的原理

既然我們面臨這麼嚴峻的問題,那麼我們如何優化dns呢?答案就是httpdns。

大部分標準dns都是基於udp與dns伺服器互動的,httpdns則是利用http協議與dns伺服器互動,繞開了運營商的local dns服務,有效防止了網域名稱劫持,提高網域名稱解析效率,下圖是httpdns的原理。

http dns原理

http dns部署結構

端http dns的整體架構

dns介面層解決的問題是遮蔽底層的細節,對外提供簡單整潔的api,降低使用者的上手成本,提高開發效率。

dns策略層通過多種策略的組合,使httpdns服務在效能,穩定性,可用性上均保持較高的水準,下面講解下每個策略設計的初衷和具體實現。

當httpdns服務不可用並且本地也沒有快取或者快取失效的時候,會觸發降級策略,降級成運營商的localdns方案,雖然存在運營商事故或者劫持的風險,但保障了dns服務的可用性。

當httpdns服務和localdns服務雙雙不可用的情況下,會觸發backup策略,使用端上的backup ip。

既然是一組ip,便有選取問題,backup ip選取機制是怎樣的呢?我們的中心思想就是要在端上利用最小的代價,並且考慮服務端的負載均衡,得到相對正確或者合理的選取結果。通過運營商和地理資訊,可以選擇乙個相對較優的ip,但獲取地理資訊需要很大耗時,外加頻次很高,代價很大,所以我們選擇了rr演算法來代替上面的方法(rr演算法是round-robin,輪詢排程),這樣客戶端的代價降低到最小,服務端也實現了負載均衡。

httpdns解決的核心問題就是安全,標準的dns查詢大部分是基於udp的,但也有基於tcp的,如果udp被封禁,就需要使用tcp。不管是udp還是tcp,安全性都是沒有保障的,httpdns查詢是基於標準的http協議,為了保證安全我們會在http上加一層tls(安全傳輸層協議),這便是https。

httpdns服務提供了兩類http介面,用於請求最優網域名稱結果。第一種是多網域名稱介面,針對不同的產品線,下發產品線配置的網域名稱,第二種是單網域名稱介面,只返回你要查詢的那個網域名稱結果,這樣的設計和標準的dns查詢基本是一樣的,只不過是從udp協議變成了http協議。

單網域名稱介面會在本地cache過期後,由使用者的操作觸發網路請求,進而做一次單網域名稱請求,使用者這次操作的dns結果會降級成localdns的結果,但在沒有過期的情況下,下次會返回httpdns的結果。

ip選取策略解決的核心問題是最優ip的選取,避免因為接入點的選取錯誤造成的跨運營商耗時。httpdns服務會將最優ip按照順序下發,客戶端預設選取第乙個,這裡沒有做客戶端的連通性校驗的原因,主要還是擔心端上的效能問題,不過有容災策略兜底,綜合評估還是可以接受的。

大家對於dns快取並不陌生,它主要是為了提公升訪問效率,作業系統,網路庫等都會做dns快取。

如果httpdns的命中率是100%,在保證httpdns服務穩定高效的前提下,我們就可以做到防劫持,提公升精準排程的能力。

為了提公升httpdns的命中率,我們選擇使用多網域名稱介面,在冷啟動和網路切換的時候,批量拉取網域名稱結果並快取在本地,便於接下來的請求使用。

為了再一次提公升httpdns的命中率,當使用者操作觸發網路請求,獲取網域名稱對應的ip時,會提前進行本地過期時間判斷,時間是60s,如果過期,會發起單網域名稱的請求並快取起來,這樣會持續延長網域名稱結果的過期時間。本地過期時間與上面提到的ttl是客戶端和服務端的雙重過期時間,目的是在異常情況下可以雙重保證過期時間的準確性。

基礎能力層主要提供給dns策略層所需要的基礎能力,包括ipv4/ipv6協議棧探測的能力,資料傳輸的能力,快取實現的能力,下面將講解每種能力的具體實現

我們選取的方案是udp connect,那麼何為udp connect?大家都知道tcp是面向連線的,傳輸資料前客戶端都要呼叫connect方法通過三次握手建立連線,udp是面向無連線的,無需建立連線便能收發資料,但是如果我們呼叫了udp的connect方法會發生什麼呢?當我們呼叫udp的connect方法時,系統會檢測其埠是否可用,位址是否正確,然後記錄對端的ip位址和埠號,返回給呼叫者,所以udp connect不會像tcp connect發起三次握手,發生網路真實損耗,udp客戶端只有呼叫send或者sendto方法後才會真正發起真實網路損耗。

udp connect原理

有了udp connect的基礎保障,我們在上層做了快取機制,用來減少系統呼叫的損耗,時機上目前僅在冷啟動和網路切換會觸發探測,在同一種網路制式下探測一次基本可以確保當前網路是ipv4棧還是ipv6棧。

資料傳輸主要提供網路請求的能力和資料解析的能力。

網路請求失敗重試的機制,獲取httpdns結果的成功率會大大影響httpdns的命中率,所以客戶端會有乙個三次重試的機制,保障成功率。

資料解析異常的機制,如果獲取的httpdns的結果存在異常,將不會覆蓋端上的快取。

http dns在android網路架構的位置

http dns在ios網路架構的位置

做為乙個工程師,如何才能做好網路優化這件事情,是個值得我們交流**的話題,個人認為應該從以下五方面入手。

基礎知識要了解學習,要夯實,網路相關的內容很多,很雜,不易學習,啃過ietf發布的rfc的同學應該深有感觸。

學會將看不見的網路變成看得見的,很多自認為對於網路很了解的同學,動不動就背誦tcp協議原理,擁塞控制演算法,滑動視窗大小等,但真正遇到線上問題,無從下手。對於客戶端同學,我們在pc上要學會使用tcpdump和wireshark等工具,適當使用fiddler和charles等工具,很多時候電腦和手機的網路環境不見得一致,所以要在手機上使用inettools,ping\u0026amp;dns或終端工具。學會使用工具後,要學著創造不同的網路環境,有很多任務具能幫助你完成這點,比如蘋果的network link conditioner,facebook的atc(augmented traffic control)等。具備以上兩個場景後,你的第一條儲備就發揮了作用,你要能看懂握手過程,傳輸過程,異常斷開過程等。

有了以上兩點的準備,接下來需要乙個會出現各種網路問題的平台,給你積累經驗,讓乙個個高壓下的線上問題錘煉你,折磨你。

網路優化是需要資料支撐的,但資料的採集和分析是需要經驗的,有些資料一眼看下去就是不靠譜的,有些資料怎麼分析都是負向收益的,一般來說是有三重奏來對資料進行分析的,一,線下資料的採集和分析,得出正向收益,二,灰度資料的採集和分析,得出正向收益,三,線上資料的採集和分析,得出正向收益。

百度App網路深度優化系列(一) DNS優化

dns domain name system 它的作用是根據網域名稱查出ip位址,它是http協議的前提,只有將網域名稱正確的解析成ip位址後,後面的http流程才能進行,所以一般做網路優化會首選優化dns。dns優化核心需要解決的問題有兩點 由於dns劫持或故障造成的服務不可用,進而影響使用者體驗...

百度App網路深度優化系列(一) DNS優化

dns domain name system 它的作用是根據網域名稱查出ip位址,它是http協議的前提,只有將網域名稱正確的解析成ip位址後,後面的http流程才能進行,所以一般做網路優化會首選優化dns。dns優化核心需要解決的問題有兩點 由於dns劫持或故障造成的服務不可用,進而影響使用者體驗...

百度優化經驗 百度排名第一僅需20天

大家好,我是seozy,今天和站長們分享一些搜尋引擎優化的心得了。正所謂有好東西,哥們自個不能藏著,不能像士兵突擊裡面的老a,平時藏著掖著的,關鍵時候出奇制勝。這段期間,我經手乙個風俗習慣的 很有必要拿出來分享,當是08年的最後總結和09年新年禮物,奉送給各位。風俗網排名現狀 前幾個比較大的來流量的...