01 引言
DNS技術在互聯網得到了廣泛應用,是一個相當成熟的網絡技術,DNS 緩存爲DNS技術中普遍使用的功能,在提升客戶訪問體驗中發揮了重要作用,在實際配置使用過程中,DNS緩存使用不合理,可能會對客戶體驗及訪問帶來嚴重的影響。本文從DNS技術原理入手,結合應用實踐重點描述了DNS緩存在實際應用中面臨的問題及需要考慮的因素。
02 DNS域名解析過程
DNS域名解析系統把難於記憶的IP地址翻譯爲容易記憶的名字。企業的DNS域名解析系統一般分爲互聯網域名解析系統和企業內網域名解析系統。互聯網域名解析系統主要實現互聯網用戶對企業系統的訪問,如企業官方網站、電子商務平臺、手機銀行等,互聯網域名解析系統需要企業自己的權威域名系統與運營商多級域名解析節點配合使用,以實現域名的解析功能。企業內網域名解析系統一般由企業自行搭建和維護,實現企業內部用戶對企業內部系統的域名解析或企業內部系統間互訪的域名解析功能。
針對具體某一具體域名的訪問,DNS域名解析過程實際上是一個相當複雜的過程,需要經過多級迭代查詢才能成功獲取業務地址,以用戶通過互聯網訪問民生銀行官方網站系統www.cmbc.com.cn爲例,其詳細過程如下圖所示:
- 當用戶訪問民生網站時,在WEB瀏覽器裏輸入www.cmbc.com.cn時,瀏覽器先檢查是否有該網站的緩存(域名與IP的映射關係),有則直接使用訪問,如果沒有DNS請求發送到客戶端解析器
- 假設後續環節都沒有緩存,解析器將DNS請求發送給運營商Local DNS服務器處理,運營商Local DNS依次向cn.、com.cn.、cmbc.com.cn.域名服務器發起迭代查詢,並緩存查詢結果,同時將結果返回給用戶,實現業務訪問。
- 在高速緩存未超時的時間內,客戶瀏覽器再次發送到域名www.cmbc.com.cn的訪問將不再需要經過以上迭代查詢過程,將直接由客戶本地電腦解析器緩存或本地DNS服務器緩存直接返回域名對應的IP地址
企業內網域名解析系統一般設計爲一級(僅權威DNS服務器)或兩級架構(包含本地DNS服務器和權威DNS服務器),不需要經過上述運營商多級域名迭代查詢過程,其它解析過程與上述過程基本一致,客戶端和本地DNS服務器同樣可提供高速緩功能。
03 DNS緩存作用
DNS域名系統給應用訪問帶來了額外的時延,另外由於DNS域名解析採用不可靠的UDP協議通訊,受內外部網絡環境的影響較大,特別是在有丟包的情況下,導致的時延可能達到數秒。爲緩解此問題,DNS解析採用了緩存(Cache)機制。如上節DNS解析過程可知,經過第一次客戶訪問之後,本地DNS服務器和客戶端均會緩存之前解析到的域名和IP地址映射,並基於相關機制設置相應的緩存生存時間(TTL),在TTL超時時間段內,後續DNS域名解析直接通過客戶端本地和本地DNS服務器高速緩存解析,不再需要經過迭代查詢過程。DNS緩存可極大提升DNS域名解析的效率,一定程度上減少了客戶端到用戶之間環境對DNS域名解析的影響。
高速緩存的缺點在於它需要消耗一定的系統資源,並增加了域名系統的複雜性。決定解析結果在高速緩存中保留多長時間是在DNS域名建設和維護時需要重點考慮的問題。如果緩存時間過短,則可能會導致產生多餘的不必要的解析請求,如果緩存時間過長,則可能導致域名變更時客戶訪問恢復時間過長。
04 DNS緩存使用面臨的問題
緩存技術在用戶業務訪問過程中起到了加速訪問、提升用戶體驗的重要作用,若緩存設置使用不當,則可能給用戶訪問體驗帶來負面影響,甚至影響用戶正常業務訪問。緩存被使用在互聯網非受控環境和內網相對可控環境,在不同的環境會面臨不同的使用問題,下面來看看緩存在互聯網和內網環境使用中可能會面臨哪些問題。
互聯網環境緩存應用面臨的問題
在互聯網環境,緩存存在於瀏覽器、操作系統、運營商Local DNS服務器,其中運營商Local DNS是最重要且最不受用戶和網站管理員控制的一個環節,如果緩存值設置不合理,將直接影響用戶訪問,會給企業形象帶來負面影響。對於網站管理員來說,互聯網環境的緩存面臨兩大方面問題:
緩存刷新不受控:一般企業爲實現線路冗餘都會使用多家運營商,因此域名就會被緩存在多家運營商Local DNS服務器,當企業域名發生改變時,涉及Local DNS服務器衆多,在當前環境下,管理員無法刷新運營商Local DNS服務器緩存,在緩存未超時的情況下,客戶無法獲取到正確的域名進行業務訪問,只能等待Local DNS服務器緩存超時後才能解析到正確的域名,正常訪問業務,此種情況可能嚴重影響客戶體驗,導致大量的客戶投訴。
解析權和緩存值被修改:一些小運營商出於規模、節約成本的考慮,將域名轉發到其他運營商進行解析,並把收到的域名緩存值更改爲較長的值,這會帶來兩個方面的問題:
1)權威DNS接收到的請求IP地址不是客戶所在運營商IP地址,客戶的請求可能會被引導至錯誤的線路,導致客戶訪問慢;
2)企業域名發生改變後將等待更長的超時時間才能正常訪問業務;同樣會給客戶帶來較差的體驗。
企業內網緩存應用面臨的問題
企業內網環境相對簡單,通常情況下用戶會直接向權威服務器發起域名解析請求,內網域名解析路徑較互聯網可控且環境穩定,無運營商遞歸查詢環節,因此基本不存在不可控的三方服務器和緩存被修改的問題。
企業內網環境包括兩類用戶,一類爲終端用戶,例如櫃員、業務管理人員、辦公人員,這類用戶使用電腦通過瀏覽器訪問目標業務;另一類爲生產系統,這類用戶爲服務器,通過應用軟件訪問目標業務。兩類用戶涉及的基礎運行環境各不相同,緩存在使用中面臨的問題也會有所不同。
終端用戶面臨的問題:內網終端用戶與互聯網用戶類似,差異是內網無中間運營商,它的緩存存在於瀏覽器、終端操作系統,若緩存值設置過長,當出現業務地址變更的時候,用戶將無法訪問業務,可能會影響辦公或者影響客戶辦理業務,須等待本地緩存超時方可恢復。在終端用戶層面,目標業務域名改變一般爲單個系統,不會出現大面積變更的情況,且對象爲內網用戶,可建立統一的標準規範,因此影響範圍相對較小。
生產系統面臨的問題:爲實現業務快速切換以及運維便利,企業生產系統之間也開始大力推廣通過域名方式訪問,但生產系統使用的操作系統、編程語言等各不相同。
我們針對常用的操作系統和JDK環境的DNS緩存行爲進行了全面測試,具體包括了Suse12、AIX7.1、JDK1.6/1.7等常用版本,經過測試得出以下結論:
1) Suse操作系統默認不開啓緩存,當開啓緩存時,繼承DNS記錄的緩存值
2)AIX操作系統默認不開啓緩存,當開啓緩存時,不繼承DNS記錄的緩存值,繼承操作系統本地配置的緩存超時時間
3)JDK默認開啓緩存,不繼承DNS記錄的緩存值,遵循自身配置的超時時間
從以上實際測試結果可以看出不同的操作系統和JDK環境對DNS緩存的處理機制不一樣。中間件如Weblogic、Tomcat建立鏈接時會調用JDK,業務在實際部署中,會根據需求選擇不同的操作系統和中間件,例如Suse和AIX的操作系統都可以選擇Weblogic或者Tomcat部署應用,不同的組合DNS緩存處理機制會不一樣,從而對應用訪問產生不同的影響。以Suse和AIX兩類操作系統、中間件使用Weblogic爲例,來看看緩存的影響:
假設操作系統和中間件均開啓緩存,場景爲應用訪問數據庫,配置JDK緩存30s,操作系統緩存1分鐘,DNS域名TTL值爲2分鐘,當APP成功訪問一次DB後,JDK緩存域名時間爲30s,Suse操作系統繼承DNS TTL值緩存域名時間爲2分鐘,當域名發生變化時,JDK經歷30s後超時,但是操作系統還未超時,獲取到的域名仍然爲老地址,導致業務訪問不通,影響時間增加1分半鐘。同樣的場景,若操作系統爲AIX,它不認可DNS TTL值,緩存爲配置的1分鐘,影響時間僅增加30s。由此可見,不同操作系統、不同JDK、不同DNS TTL配置,將會產生不一樣的影響,當業務出現故障時由於緩存行爲不一致,會給排障增加困難,運維變得複雜,無法滿足快速恢復業務的需求,而且生產系統通常都不是孤立存在的,當一個系統出現問題時很有可能產生連鎖反應,導致多個業務系統服務不可用,影響面更廣,後果更嚴重。
05 DNS緩存在實際應用中的考慮
DNS緩存在使用中會面臨緩存無法刷新、被修改以及緩存控制複雜等問題,無論在互聯網還是內網,緩存設置不合理都將導致用戶無法訪問業務,影響用戶體驗,那麼緩存設置就顯得尤爲重要,它在實際應用中應該如何考慮?
首先,哪些情況下域名會發生改變,從而出現影響用戶訪問的情況:
主動操作:由於系統新建遷移、災備切換等有計劃的變更操作
被動操作:當出現故障需要緊急更改域名對應的服務地址恢復業務
不同場景產生的影響時間以及緊迫程度有所不同,就有不同的考慮因素,下面針對不同的場景分別進行介紹。
1、主動操作之緩存考慮因素
針對主動操作的情況,有計劃性,會有充足的時間準備,內網和互聯網環境均可提前將域名對應的緩存值更改爲更小的值,操作等待時間大於設置的緩存值即可,以確保遞歸服務器緩存了設置較小的TTL值,待操作完成後再更改回原有TTL值,無需人工干預。
另外,避免緩存帶來影響,還可以規範架構部署,例如通過負載均衡或者虛地址方式對外提供服務,可減少域名變化的情況,負載均衡或者虛地址方式可把操作隱藏在服務端,不會傳達到客戶端,可直接避免緩存時間給用戶帶來的影響。
2、被動操作之互聯網緩存考慮因素
互聯網用戶直接面向運營商,面臨的問題是無法刷新緩存和緩存值被修改,要解決域名更改後無法快速生效的問題,需要從運營商入手:
刷新運營商Local DNS緩存
當我行一條運營商線路故障時,這條線路對應業務DNS記錄被用戶及對應運營商Local DNS服務器緩存,經瞭解,三大運營商正在開發刷新緩存的功能,電信和聯通支持基於單個域名自助刷新全國對應Local DNS緩存,目前正處於測試階段,預計三分鐘可以完成全國Local DNS緩存強制刷新;移動目前支持北京地區Local DNS緩存記錄刷新,其他地區正在計劃開發中。三大運營商都支持刷新緩存的情況下,將很大程度解決緩存生效慢的問題。但是一些小運營商不在合作範圍內,目前仍然沒有辦法更新他們的緩存,可能會有少量地區客戶仍然會有所影響。
避免緩存被修改
互聯網環境最大的問題是Local DNS緩存,緩存時間被修改,有沒有方式可以避開Local DNS?近幾年HTTP DNS技術出現了,它是基於HTTP協議向HTTP DNS服務器發送域名解析請求,替代了基於DNS協議向運營商Local DNS發起解析請求的傳統方式,有效的避開了運營商Local DNS,就避免了緩存值被第三方修改。
HTTP DNS解析流程
1、客戶端通過HTTP/HTTPS協議向HTTP DNS集羣發起查詢請求,攜帶用戶域名和終端 IP
2、服務集羣查詢CDN內部調度系統,將域名最佳訪問節點IP響應給客戶端
3、客戶端收到響應結果向節點發起請求
4、客戶端拿到最優IP後,發起業務訪問
5、若客戶端訪問HTTP DNS集羣失敗,可自動切換爲傳統方式通過運營商Local DNS進行解析查詢
HTTP DNS優點
- 繞過運營商Local DNS,防劫持
- 能直接獲取到客戶端IP地址,更精準的返回結果,避免跨運營商
- 無運營商緩存,域名變更快速生效
- HTTP DNS可以在終端APP DNS緩存超時之前提前進行解析,規避了緩存再解析導致延時的問題
- 與傳統方式互備,當HTTP DNS不可用時可選擇傳統方式備份訪問
HTTP DNS適用場景
HTTP DNS主要是爲APP類或桌面應用提供服務,如遊戲、電商、金融、音視頻、社交類APP。HTTP DNS需要在APP加載相應的SDK對默認的DNS請求方式進行修改,因此HTTP DNS的實現需要開發配合和深度介入,另外一般一個APP的訪問會涉及多個域名,每個域名都使用HTTP DNS還是隻是部分域名訪問使用HTTP DNS需要評估。更細節的實現如緩存規則、更新規則、監控及切換規則也需要進行詳細的考慮和設計。
被動操作之內網緩存考慮因素
內網生產環境的域名訪問在推廣初期,從無到有,看似簡單的域名請求,需要增加到JDK、操作系統等環節的訪問,這些環節緩存開啓情況不同,要實施域名訪問需重點考慮是否要開啓緩存,緩存時間配置爲多少合適。
是否開啓緩存的考慮
生產系統之間的交互有別於終端與系統之間的交互,生產系統交互頻次高、時延要求高,若不開啓緩存會在哪些方面有所影響?
鏈接建立影響:經過測試,Weblogic和Tomcat中間件建立一個鏈接分別會發起2個DNS請求,且要求2個請求都成功後方可建立鏈接,此處行爲一致,但中間件會部署在某個操作系統上,由於Suse和AIX操作系統的超時重傳機制不同,當網絡出現丟包時,兩類中間件行爲結果不一樣,若開啓緩存,有一個DNS請求成功了就會被緩存,就能成功建立鏈接,若不開啓緩存,面對超時時間不同、重傳次數不同的問題,就很難評估何時能正常建立鏈接,出現問題時就很難分析業務影響和業務恢復時間,爲排障增加了難度。
時延影響:大部分系統爲提高利用率以及實現高可靠性,應用採用雙中心雙活部署。在大二層的部署架構下,存在大量跨同城中心的訪問流量,每一次跨中心訪問都會增加一次時延,對於高頻交互系統,在不開啓緩存的情況下每次交互都會發起一次DNS請求,就會額外增加時延,會對系統帶來訪問緩慢的問題,嚴重時可能會影響交易。
生產系統計劃使用域名訪問時,每筆交易對於訪問DNS增加的時延帶來的影響很難進行評估以及精準的測試影響結果,爲避免通過域名訪問增加的時延對生產系統帶來影響,考慮開啓具備緩存功能環節的緩存,但若僅針對時延要求高的系統開啓緩存,那麼生產環境就會存在不同的配置標準,又增加了運維的複雜性,因此,從運維規範、統一的角度考慮開啓緩存。緩存功能開啓了,緩存時間設置多長才能既滿足快速訪問業務又滿足緩存及時失效的需求?
緩存時間考慮
生產系統部署環境涉及的操作系統、中間件、系統程序等環節都存在緩存功能,導致DNS配置的域名緩存值對於業務系統的時間影響不可控,就無法真實瞭解緩存時間對業務的影響,以及更改域名對應的地址後業務恢復時間也無法掌握。要想解決生產系統面臨的類型多和層級多的問題,可以從統一標準入手:
參考唯一TTL值:統一開啓各節點緩存器認可DNS服務器配置的TTL值,參考標準唯一,超時時間明確;對於無法參考DNS TTL值的環節,統一配置爲與DNS TTL相同的超時時間
統一操作系統超時重傳機制:統一不同操作系統超時重傳時間間隔、重傳次數等參數
規範開發:部分用特殊語言編寫的業務系統有自己獨有的緩存規則,需要規範開發規則,可調整遵循DNS規則
如何設置TTL值
緩存超時間(TTL)是緩存技術中的一個重要參數,對緩存效果起着決定性的作用。TTL時間設置較長,域名就能緩存更長時間,用戶就能更快實現訪問,TTL時間設置較短,域名就更快超時,用戶就需要等待域名解析才能正常訪問。因此,TTL時間設置的長短將直接影響用戶的體驗效果。TTL值設置大小需要根據業務特性、業務環境、DNS服務器性能等因素綜合考慮,針對不同應用場景的緩存值設置規則可參考如下建議:
互聯網環境:互聯網環境由於運營商Local DNS緩存服務器的存在,具有不可控性,因此不適宜配置較長的緩存時間,建議參考DNS性能配置較小緩存值,例如設置爲分鐘級。
內網終端環境:內網終端環境相對可控,且大部分業務都是通過標準模式虛服務方式對外提供服務,域名變更概率較小,爲減少終端訪問頻率,緩存值建議配置稍長時間,例如設置爲小時級。
內網生產環境:生產系統變更的概率較大,且若緩存更新不及時可能會帶來重大的業務影響,因此生產系統不適宜配置較長的緩存超時時間,建議參考DNS性能配置爲秒到分鐘級。
06 小結
DNS技術實現了人易於記憶名字與IP地址之間的轉換功能,爲應用遷移、切換提供了便利,由於互聯網環境的複雜性以及企業內部使用的系統及應用組件對DNS緩存處理機制存在差異,若DNS緩存規劃設計不合理,則可能給用戶體及應用訪問帶來嚴重的影響。DNS技術在實際應用過程中,DNS緩存設置的規範性、合理性是需要重點考慮的問題。另外,隨着移動互聯業務的高速發展,HTTP DNS技術相對傳統的DNS解析和緩存技術,在安全性、可靠性、解析效率方面具備明顯的優勢,具備較好的推廣前景。
作者介紹:
陳瑜
網絡運維經理。2012年加入民生銀行,任職於信息科技部網絡管理中心。十年以上銀行數據中心網絡運維經驗,目前重點負責網絡需求分析、DNS平臺規劃建設工作,參與可視化分析平臺建設。
蘭慶白
網絡資深運維經理。2011年加入民生銀行,任職於信息科技部網絡管理中心。負責數據中心網絡規劃、建設及相關運維工作,致力於新產品新技術研究。
本文轉載自公衆號民生運維(ID:CMBCOP)。
原文鏈接: