架構設計之——域名設計

域名的使用規劃, 看似不重要,但是在大型的軟件架構中實際非常關鍵。域名是用戶的請求入口,設計不恰當, 使用不規範,非常容易造成系統的不穩定。在系統架構過程中,我總結了以下經驗, 供君參考:

資源域名與動態域名分開

網站打開時,頁面上的圖片、js、 css 等文件是無狀態的,不需要改動的,通常需要經過CDN或者其他代理緩存。而動態的請求, 通常是有狀態的, 例如開啓了SESSION 會話,通常不能做CDN緩存,這兩種請求如果使用了同一個域名, 會導致使用CDN 時難以配置的尷尬, 有時可能需要在CDN 上做一些強制配置才能使CDN 生效,達到理想效果。

上傳域名與訪問域名分開

有些情況, 我們需要上傳資源,例如視頻, 而上傳視頻的域名跟播放視頻使用了同一個域名, 同樣的情況, 播放視頻時我們希望視頻使用CDN 或其他緩存代理,而上傳時請求一定不會允許請求被緩存, 同樣的尷尬會再次發生。

資源域名應有多個備用域名

我們設計資源域名例如

 s0.xxx.com

通常會預留

s1.xxx.com
s2.xxx.com
....
s9.xxx.com

並確保通過這些域名通過同樣的路徑能訪問到同樣的資源。

例如:

http://s0.xxx.com/img/1.jpg

能夠訪問到圖片 1.jpg
那麼通過:

http://s1.xxx.com/img/1.jpg
http://s2.xxx.com/img/1.jpg
...

同樣能夠訪問到 1.jpg。

這樣做的目的主要是爲了方便緩存刷新,有時候網頁製作好後,圖片地址就固定了, 被訪問後, 圖片容易被 CDN 其他代理緩存, 我們更新了圖片,地址不變, 用戶不能立即看到更新, 通過使用備用域名,編輯或者前端人員就能方便的通過修改域名來刷新緩存。

對內域名與對外域名分開

對內域名是指內部子服務模塊之間互相調用的域名,外部域名是指需要域名解析指向對外提供服務的服務模塊。

對內域名, 可以自己定義, 因爲不需要做公網解析, 可以通過設置 內網DNS或者 HOSTS 實現轉發。

而對外域名則必須是在域名註冊商購買註冊的域名。

很多情況下, 本應自行設計的對內請求域名, 因考慮不周,使用了對外域名, 雖然也可以運行,但容易出現如下問題:

  1. 內部請求通信只需要發生在內網, 但是因爲沒有配置內網DNS或者HOSTS, 請求會走到外網。
  2. 運維人員難以區分對內域名、對外域名, 配置容易出錯
  3. 對外DNS解析容易出錯,多配或者少配域名

看一個實例,如圖:

correct-domain
正確的方式下, 對外域名爲 xxx.com, 對內域名用 internal-xxx.com做區分, 這樣運維人員可以直觀的看到,這個域名屬於內部使用,無需外網解析, 只需要在內部 DNS 或者HOSTS解析即可。

wrong-domain
在錯誤的配置方法下, 對外域名與對內域名沒有做區分, 都使用 xxx.com, 運維在實施過程可能因爲部署文檔描述不清,將所有域名都對公網解析,這樣導致內部回調請求轉發到公網,可能會發生請求被緩存等異常問題, 而且此類問題也非常難以排查。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章