1、什麼是智能DNS解析 css
如下是百度的解釋:前端
DNS策略解析最基本的功能是能夠智能的判斷訪問您網站的用戶,而後根據不一樣的訪問者把您的域名分別解析成不一樣的IP地址。如訪問者是網通用戶,DNS策略解析服務器會把你的域名對應的網通IP地址解析給這個訪問者。如訪問者是電信用戶,DNS策略解析服務器會把您域名對應的電信IP地址解析給這個訪問者。
舉個例子,咱們有個域名:ab.com,服務器部署在2個機房:中國、美國;當前訪問用戶的IP爲中國,DNS解析會返回一箇中國的IP;換之是海外用戶,DNS會返回海外地址,這樣保證每次用戶均可以就近訪問,加快訪問速度。 nginx
2、爲何要使用智能DNS解析web
智能DNS解析使用條件以下:redis
一、對外統一域名訪問sql
即全部用戶訪問的都是統一域名。後端
二、用戶分散在多地域,而且網絡差別很大 瀏覽器
多是中國南、北,也多是中國、海外。服務器
這樣在使用智能DNS解析後,用戶能夠就近訪問,明顯提升訪問速度。cookie
3、智能DNS解析的範圍
既然是DNS,就得和域名有關,那智能DNS須要將哪些域名作智能解析呢?
一、前端頁面
主要指前端頁面,即用戶直接在瀏覽器裏輸入的地址,但不包括裏面的js/css,圖片內容,由於這些能夠經過CDN的方式處理。
二、後端接口
由於前端頁面作了DNS解析,所以後端接口至少和前端頁面的主域保持一致,由於涉及到登陸狀態的檢測,具體來講就是cookie的傳遞,由於http是無狀態的,因此經過cookie來保存狀態。
4、具體實踐
下面咱們以一個具體的案例來分析智能DNS解析來如何實現。
設想咱們網站用戶主要是中國、美國用戶,所以服務器部署在中國、美國機房,域名爲ab.com。
首先咱們來分析具體有哪些需求:
一、訪問鏈路
A、中國用戶訪問中國服務
B、中國用戶訪問美國服務
由於中國用戶也可能須要訪問海外的站點
C、外國用戶訪問外國服務
D、外國用戶訪問中國服務
同上面的B同樣
二、url規劃
中國和海外的頁面都是同一域名,那最終區別也只能經過域名了,通常是不一樣的地區加不一樣的前綴,像咱們這個案例中,能夠這樣規劃:
ab.com/cn
ab.com/us
若是web服務器使用的是nginx,在中國機房配一個ab.com的server,再配2個location,大概以下:
location /us{ proxy_pass {美國服務器集羣地址} } location /cn{ proxy_pass {中國服務器集羣地址} }
這裏要注意集羣地址配置,如今大多數公司前面有個大的負載均衡器,負載均衡器的IP多是不固定,若是是這種狀況,則須要一種機制可以在負載均衡器更改IP的狀況下能自動更新集羣IP,否則可能出現沒法訪問的狀況,咱們線上就發生過樣的問題。
海外機房也能夠參考中國機房配置。
三、自動跳轉
若是用戶每次都要輸入ab.com/us或ab.com/cn,體驗就差異差,因此咱們須要根據用戶的IP自動跳轉到相應的機房中。
即若是一個美國用戶輸入ab.com,會跳轉到ab.com/us,還包括具體一個頁面的跳轉,即訪問 ab.com/abc,自動跳轉到ab.com/us/abc
若是使用的nginx服務器,可使用GEOIP模塊獲取用戶IP所在國家,而後寫上lua腳本作相應的跳轉。
5、踩過的坑
一、URL不標準化
標準化若是沒有作到,作起來會很麻煩;
具體來講,若是美國的部分頁面在中國沒有,或者中國某個頁面在美國服務器上沒有,則會出現有的URL須要跳,有的不須要,則要在代碼中作大量的特別處理;
另外就是要考慮爬蟲之類的請求,這類請求無論當前用戶來自哪裏,都不該該作跳轉。
二、URL規範很重要
若是僅僅是幾個機房之間跳轉的需求還好,實際狀況是有的公司可能有多商城的需求,二者混在一塊兒,URL的規範就很重要了,建議以機房爲前綴,機房後再加上商城的標識。
如 ab.com/global/us,ab.com/globl/uk
三、不要和現有業務邏輯耦合在一塊兒
這塊的代碼通常是在nginx上用lua實現的,若是在nginx上還有其它相關代碼,建議二者分開,否則調試、維護起來會很麻煩。