【得物技術】網絡優化——域名解析原理&實踐

{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"域名劫持,解析失敗,調度不精準,沒有異地容災,域名解析變更生效不實時,這些問題是否一直困擾着你?作爲網絡請求最前置的環節,域名解析的穩定與精準程度直接決定了 App 的訪問體驗效果。跟隨本文來一起了解域名解析,探索移動互聯網場景下域名解析的最佳實踐方案。","attrs":{}}]}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/4c/4c10c463b5419f9eb9fc04ded6c82f30.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"域名(英語:Domain Name),又稱網域,是由一串用點分隔的名字組成的 Internet 上某一臺計算機或計算機組的名稱,用於在數據傳輸時對計算機的定位標識(有時也指地理位置)。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"由於 IP 地址具有不方便記憶並且不能顯示地址組織的名稱和性質等缺點,人們設計出了域名,並通過網域名稱系統(DNS,Domain Name System)來將域名和 IP 地址相互映射,使人更方便地訪問互聯網,而不用去記住能夠被機器直接讀取的 IP 地址數串。—— 來源自百度百科“域名”詞條","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"作爲一次網絡通信最前置的環節,域名解析的重要性不言而喻。在傳統的基於瀏覽器的網站訪問場景下,域名解析環節由瀏覽器內核實現,網站開發者無需關心域名解析的細節。But there are always two sides to every coin,一旦域名解析環節發生異常,開發者面對這樣的黑盒架構就會顯得束手無策,一個很典型的例子即域名劫持問題,關於這一點我們在後文會有更詳細的介紹。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"傳統域名解析流程","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們來看一看一次傳統的域名解析流程具體是如何發生的:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/48/48a6c9cb020633e58fe5b44f74b275bb.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如上圖所示,以訪問 www.taobao.com 爲例,一次完整的域名解析流程包括:","attrs":{}}]},{"type":"numberedlist","attrs":{"start":"1","normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","text":"客戶端向 Local DNS 發起域名解析請求;","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","text":"Local DNS 在獲取到域名解析請求後首先從 Root hints 獲取根域名服務器的地址;","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"text","text":"獲取了根域名服務器地址後,Local DNS 向根域名服務器發起 DNS 解析請求,根域名服務器返回com 頂級域名服務器地址;","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":4,"align":null,"origin":null},"content":[{"type":"text","text":"隨後 Local DNS 向 com 域名服務器發起解析請求,並得到 taobao.com 二級域名服務器的地址;","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":5,"align":null,"origin":null},"content":[{"type":"text","text":"Local DNS向 taobao.com 二級域名服務器發起解析請求,並最終獲得了 www.taobao.com 的 IP 地址信息;","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":6,"align":null,"origin":null},"content":[{"type":"text","text":"Local DNS將遞歸查詢獲得的IP地址信息緩存並返回給客戶端;","attrs":{}}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"注意:Local DNS 服務器包含緩存模塊,在實際域名解析過程中 Local DNS 服務器會首先查詢緩存,緩存命中且解析結果 TTL 未過期的情況下直接返回,否則才啓動遞歸查詢的流程。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"傳統的域名解析面臨的問題","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"域名劫持","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"域名劫持一直是困擾許多開發者的問題之一,其表現即域名 A 應該返回的 DNS 解析結果 IP1 被惡意替換爲了 IP2,導致 A 訪問失敗或訪問了一個不安全的站點。下面我們是幾種常見的域名劫持的場景。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一種可能的域名劫持方式即黑客侵入了寬帶路由器並對終端用戶的 Local DNS 進行篡改,指向黑客自己僞造的 Local DNS,進而通過控制 Local DNS 的邏輯返回錯誤的 IP 信息進行域名劫持。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/35/35196ae8d6471eec737530de25144496.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一種我們最常碰到的域名劫持現象是緩存污染。我們知道在接收到域名解析請求時,Local DNS 首先會查找緩存,如果緩存命中就會直接返回緩存結果,不再進行遞歸 DNS 查詢。這時候如果 Local DNS 針對部分域名的緩存進行更改,比如將緩存結果指向第三方的廣告頁,就會導致用戶的訪問請求被引導到這些廣告頁地址上。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/27/27e9a38dc7a73ff3c59f8041911ba349.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"解析生效滯後","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"部分業務場景下開發者對域名解析結果變更的生效時間非常敏感(這部分變更操作是開發者在權威 DNS上完成的),比如當業務服務器受到攻擊時,我們需要最快速地將業務 IP 切換到另一組集羣上,這樣的訴求在傳統域名解析體系下是無法完成的。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Local DNS 的部署是由各個地區的各個運營商獨立部署的,因此各個 Local DNS 的服務質量參差不齊。在對域名解析緩存的處理上,各個獨立節點的實現策略也有區別,比如部分節點爲了節省開支忽略了域名解析結果的 TTL 時間限制,導致用戶在權威 DNS 變更的解析結果全網生效的週期非常漫長(我們已知的最長生效時間甚至高達 48 小時)。這類延遲生效可能直接導致用戶業務訪問的異常。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"延遲大","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"DNS 首次查詢或緩存過期後的查詢,需要遞歸遍歷多個 DNS 服務器以獲取最終的解析結果,這增加了網絡請求的前置延時時間。特別是在移動互聯網場景下,移動網絡質量參差不齊,弱網環境的 RTT 時間可能高達數百毫秒,對於一次普通的業務請求而言,上述延時是非常沉重的負擔。另一方面,弱網環境下的解析超時、解析失敗等現象屢見不鮮,如何合理優化 DNS 解析對於整體網絡訪問質量的提升至關重要。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"HTTPDNS","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"傳統域名解析面臨的諸多問題與挑戰本質根源在於 Local DNS 的服務質量不可控,如果有一個更安全、穩定、高效的遞歸 DNS 服務幫助我們代理了域名解析的過程,這些問題就可以徹底地得到解決。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"HTTPDNS 在這樣的背景下應運而生。我們一起來看看 HTTPDNS 的基本概念以及它是如何解決傳統 DNS 解析面臨的問題的。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"防域名劫持","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"HTTPDNS 使用 HTTP 協議進行域名解析,代替現有基於 UDP 的 DNS 協議,域名解析請求直接發送到 HTTPDNS 服務端,從而繞過運營商的 Local DNS。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/1b/1b1f6d47da5cfc1489e9e29bcaad913e.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"HTTPDNS 代替了傳統的 LocalDNS 完成遞歸解析的功能,基於 HTTP 協議的設計可以適用於幾乎所有的網絡環境,同時保留了鑑權、HTTPS 等更高安全性的擴展能力,避免惡意攻擊劫持行爲。另一方面,商業化的 HTTPDNS 服務(比如阿里雲 HTTPDNS、騰訊雲 HTTPDNS)緩存管理有嚴格的 SLA 保障,避免了類似 Local DNS 的緩存污染的問題。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"實時生效","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在域名解析生效週期方面,HTTPDNS 也有着傳統域名解析體系所無法具備的能力。前面我們提到由於各個地區的 Local DNS 是獨立維護的,服務質量參差不齊,緩存實現不一,因此導致的解析變更全網生效滯後的問題,在商業化的 HTTPDNS 服務上就不會存在(HTTPDNS 嚴格遵循 DNS TTL 限制進行緩存更新)。另一方面,即便我們假設 Local DNS 嚴格遵循域名 TTL 時間進行緩存管理(這裏我們假設運維配置的域名 TTL 時間爲 5min),當我們的業務受到攻擊並需要快速進行切換時,Local DNS 也會遵循域名 TTL,在持續 5min 的時間段內返回舊 IP 信息,這 5min 的業務影響對於中大型企業而言是一個不小的損失(對於電商類的大型企業,5min 的訪問異常可能意味着幾百萬的交易額下跌)。以阿里雲 HTTPDNS 服務,HTTPDNS 在快速生效方面有專有的方案,配合阿里雲的權威 DNS 服務雲解析(我們的域名都是部署在阿里雲的權威 DNS 服務雲解析上面),用戶在權威 DNS 變更的解析結果將快速同步給 HTTPDNS,覆蓋原有的緩存記錄,幫助用戶實現毫秒級的域名解析切換。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/37/376ca7b1ed4729d7ff444bf10187301e.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"異地災備","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"商業化的 HTTPDNS 服務,都具備 99.99% 的高可用性, 確保域名解析服務穩定可靠。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"HTTPDNS 客戶端直接通過 IP 來進行域名解析請求的,HTTPDNS  SDK 內部維護一個 IP 輪詢池,當某個 IP 不可用時,會自動切換其他的 IP,並且 IP 輪詢池也會更新。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"HTTPDNS 服務端方面,拿阿里雲的 HTTPDNS 來說,在全球有數十個服務集羣,各個服務集羣互相備份,具備異地容災備份功能,當某個服務集羣不可用時,會自動切換到其他的服務集羣,可以確保解析和緩存正常。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"域名解析最佳實踐","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"預解析","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"絕大多數的 APP 在應用初始化階段都有一個啓動期,我們可以在這個啓動期做一些 preflight 工作,即在初始化階段我們可以針對業務的熱點域名在後臺發起異步的 HTTPDNS 解析請求。這部分預解析結果在後續的業務請求中可以直接使用,進而消除首次業務請求的 DNS 解析開銷,提升 APP 首頁的加載速度。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"懶加載","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"懶加載策略的實施可以讓我們真正實現 DNS 的零延遲解析。所謂懶加載策略,核心的實現思路如下:","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"業務層的域名解析請求只和緩存進行交互,不實際發生網絡解析請求。如果緩存中存在記錄,不論過期與否,直接返回業務層緩存中的記錄;","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果緩存中的記錄已過期,後臺發起異步網絡請求進行 HTTPDNS 解析;","attrs":{}}]}]}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"下圖描繪了預解析+懶加載的實現框架:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/d2/d2d010b685e81398b98aa2a39a99d8b4.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"HTTPDNS 方案","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"一期","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"HTTPDNS 方案一共分爲兩期,一期方案爲模擬統計方案,暫不接入 HTTPDNS SDK,主要目的是進行數據統計。統計出我們需要解析的域名列表,以配置在 HTTPDNS 後臺。此外,還需要統計出我們的域名佔比,方便後續的進行預加載。最後,也是最重要的一點,預估我們的費用,通常商業化 HTTPDNS 服務都是按解析次數計費的。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"總體設計","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"服務端控制灰度下發,命中灰度的情況下走 HTTPDNS 模擬器邏輯,沒有命中灰度的情況下走老邏輯。灰度爲 0 的時候全量走老邏輯,灰度爲 100 的時候全量切 HTTPDNS 模擬器邏輯。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/0e/0ef3ff420246748e9c0df4bf54a25f89.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"HTTPDNS 模擬器","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們需要一個 HTTPDNS 模擬器,用來模擬 HTTPDNS SDK 的行爲、數據統計、埋點上報。模擬器流程如下:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/92/92721672db6e932e55913e1116592c51.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"分流版本","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"模擬 HTTPDNS SDK 中域名解析結果的緩存時間,version 用於埋點區分,ttl 由各自的版本決定:","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/fd/fd939875e1a49e035fdc3a90be20757a.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"版本查詢流程:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/69/69a997b23c16a640e351132e88adbce1.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"埋點數據","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"每一次進入 HTTPDNS 模擬器,最後都需要進行埋點上報,上報的字段有:","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/20/20b2a13cf150687c22042f782192ae4b.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"埋點統計","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/86/86eb4cd7fa72879b1b494b7a05f94a82.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"二期","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"二期會正式接入阿里雲 HTTPDNS SDK,支持 HTTPDNS 域名解析。同時,支持預解析、灰度控制、白名單等功能。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"總體設計","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"配置中心控制 HTTPDNS 功能灰度下發,以及 HTTPDNS 可配置的白名單。灰度控制走 HTTPDNS 域名解析流程的用戶佔比,爲 0 時全量走標準 DNS 解析,爲 100 時 全量走白名單判斷。命中灰度的情況下,在降級過濾器裏面,白名單內的走 HTTPDNS 流程,白名單外的走標準 DNS 解析流程。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/5d/5d226adf34be23d1ec3f8a25fc13bbc1.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"埋點","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"埋點時機:命中標準 DNS 的時候進行埋點,對解析異常情況進行監控。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/81/81bddde445f288ff44c3e95c5423a3c6.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"結語","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"綜上可以看到,當我們需要實現零延遲解析的效果時,在客戶端還是有比較多的工作需要做的。當然對於複雜的生產環境,埋點和監控也是必不可少的環節。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"文|走歌人","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"關注得物技術,攜手走向技術的雲端","attrs":{}}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章