在Windows Azure中使用自己的域名
?????? 請參考:http://blog.smarx.com/posts/custom-domain-names-in-windows-azure
?????? 本文是對這篇文章部分解釋和補充。
?????? 并請記住,此博客總是能給你在Windows Azure的開發中帶來幫助。
?
域名解析機制淺析
?????? 域名解析,本是個很簡單的事情:我們如若想將我們的域名指向某個網站提供的二級域名,只要設置cname記錄;如果我們知道服務器的ip,直接設置A記錄即可。在Azure的使用中,卻總是有些人有點疑惑。
?
?????? 這里我們首先要弄清楚DNS解析域名的過程,記住,只要是通過域名解析設置的(不是通過頁面重定向技術實現的),不管中間經歷多少域名的轉換,從用戶在瀏覽其中輸入域名地址,DNS返回給瀏覽器的一定是最終服務器的IP地址,中間所有域名解析對于瀏覽器來說不可見。
?????? 事實上,請求者不需要知道這些細節,DNS的作用在于你給我一個域名,我盡其所能找到這臺服務器的IP地址。因為,互聯網本是基于IP的,但是為了好記憶才添加了一個DNS應用層,在用戶看來,一個域名始終指向一個IP,一個IP可能被多個域名指向。
?????? 并且對于開發者而言,除了重定向外,通過DNS發過來的請求,其HTTP請求的Host部分,一定是最初用戶輸入的地址,不管中間經歷什么其他的域名。
?????? 所以,這樣提示我們開發者,應該根據Host來區分用戶輸入的域名地址,以及做相關的導航控制,不應該依賴于某個絕對路徑。
?
幾種均衡負載方式
?????? Azure的域名解析問題可能主要來自多個Instance,每個instance是一個虛擬服務器,那這樣IP地址怎么確定?
?????? 這里我們首先來分析,均衡負載有幾種方式,可以參閱《構建高性能網站》,最簡單的莫過于重定向,但是這樣會改變瀏覽器中用戶輸入的域名,可能給里面的內容導航帶來混亂;其次可以通過DNS來設置,可以為一個域名配置幾個IP,這樣DNS可以根據一定的算法分配到不同的IP地址;第三種方法是通過硬件來實現,市場上也有許多相關的產品,其實思路很簡單,由交換機內部實現將處理分配至不同的內部服務器或者應用程序,這樣每個內部服務器不需要分配固定IP,這樣的方式,服務對外而言,始終擁有固定的IP。
?
Hosted Service的IP實驗
?????? 注意,本部分是根據筆者實驗推斷,有部分可能不是真實情況,僅僅作為參考!
?????? Windows Azure的均衡負載通過硬件來實現,所有請求和虛擬服務器都由Fabric集中管理,所以每一個Hosted Service,不管里面真正的應用程序或者數據存儲在那個虛擬服務器或者有多少個instance來均衡負載,每一個Role對外都只有一個IP,并且Azure為每一個處于Production狀態的Role提供一個二級域名,如:http://egyee.cloudapp.net。
?????? 但是注意這里的IP,不是固定IP,因為一個Role重新部署之后會分配不同的IP,所以應該綁定其提供的二級域名,而不應該對其IP有任何打算。很簡答,Azure不認識任何Role,每一次部署都會分配IP,不可能幫你記住某個Role上一次分配的IP,看下面截圖:
?????? 由上圖可知,我在同一個Hosted Service中兩次部署同一Role,得到的IP分別是:111.221.92.83和111.221.92.89。雖然兩者都對應二級域名http://egy.cloudapp.net,但是兩次部署卻分配兩個不同的IP。
?????? Windows Azure保留IP的分配權,及同一Hosted Service會分配不同的IP地址,所以,其在上提供了一個二級域名,使用戶在使用的時候,針對同一個Hosted Service有相同的訪問路徑,因此,在Windows Azure中,我們只能相信二級域名,而不能依賴IP地址。
?????? Windows Azure保留動態的域名還使得應用程序存放和執行位置的更改變得容易,比如,你指定應用程序只在亞洲的數據中心執行,那么IP地址是分配到亞洲某個數據中心的某個交換機,如果你改為在北美洲,那么IP地址則會分配到北美數據中心的IP地址之一。通過這樣來使得應用程序執行場所以及數據存放地點離用戶最近,以減少網絡傳輸延遲。
?????? 值得注意的是,減少網絡傳輸延遲有幾種方式,如緩存,CDN,以及將服務器處理靠近用戶,這些都是云計算帶給開發者的好處,我們自己架設服務器不可能得到這些好處。
?????? 同時另外值得注意的是,在一個Role部署之后,如果不做任何修改,比如地點等,IP地址理論上不會發生改變,不過未經驗證,總之我們不應該關注IP。
?????? 域名解析的配置方法也很簡單,只需要在域名管理里增加一個CNAME記錄即可。
?
在多服務器負載情況下的開發注意事項
?????? 如果,應用程序可能被不同的域名指向,那么我們的應用程序不應該依賴于任何絕對路徑,包括導航。如果你想要在某個導航寫上全路徑,則Host部分應該取自HTTP請求的Host,而不是自己假設的某個域名,事實上,我們應該始終這樣做,不管應用程序被什么域名解析,始終保證不會出現問題。
?????? 相反,利用頁面重定向的方式實現的均衡負載,前面已經分析,實際上應用程序接收到的Host并不代表用戶輸入的域名,所以這種情況下,可能會導致某些混亂的情況。
?????? 事實上,重定向是服務器向瀏覽器返回一個3XX的響應代碼,根據HTTP協議規則,瀏覽器應該向新的URI地址發送請求,本來這不會打亂我們上面的原則,但問題是,頁面重定向針對Uri設置,所以不能保證一個域名下的所有Uri都被正確重定向,結果導致一個域名下的各個資源路徑可能不在同一個域中。而域名的解析式針對一個域名,它能保證所以Uri都處于同一個域。
?????? 總之,要小心使用重定向,重定向的頁面中可能包含一些相對路徑,從而使得這些路徑對于原來的請求路徑處于不同的域中。
?????? 云計算中的數據一般不會存儲在本地服務器內,都是通過比如REST的方式讀取和修改數據,因此是不依賴于任何服務器的。
?????? 在架設分布式服務或者網站或者存儲的時候,這些情況都是必須考慮的,一定要準備好相關的方案!
?
總結:
?????? 像我之前的一些文章一樣,我不對文章內容負責,因為我寫的東西一般都是基于自己思考,不會隨便去抄一個MSDN或者什么之類。這樣由于筆者水平有限,可能導致某些思想錯誤,因此,這里的東西都是只能作為理解過程中的參考,千萬不能當真!
轉載于:https://www.cnblogs.com/hielvis/archive/2010/11/22/1884699.html
總結
以上是生活随笔為你收集整理的在Windows Azure中使用自己的域名的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员---我的读书列表
- 下一篇: 【转】系统缓存全解析二:动态缓存(2)-