標籤:架構設計 分布式
轉載請說明出處:http://blog.csdn.net/cywosp/article/details/38017027
在上一篇文章(http://blog.csdn.net/cywosp/article/details/38014581)中講到了使用HTTP重新導向來實現伺服器的負載平衡,本文則講解另一種實現伺服器叢集的負載平衡方案——DNS網域名稱解析。 DNS(Domain Name System)是網際網路的一項服務,它作為網域名稱和IP地址相互映射的一個分散式資料庫,能夠使人更方便的訪問互連網。人們在通過瀏覽器訪問網站時只需要記住網站的網域名稱即可,而不需要記住那些不太容易理解的IP地址。在DNS系統中有一個比較重要的的資源類型叫做主機記錄也稱為A記錄,A記錄是用於名稱解析的重要記錄,它將特定的主機名稱映射到對應主機的IP地址上。如果你有一個自己的網域名稱,那麼要想別人能訪問到你的網站,你需要到特定的DNS解析服務商的伺服器上填寫A記錄,過一段時間後,別人就能通過你的網域名稱訪問你的網站了。DNS除了能解析網域名稱之外還具有負載平衡的功能,下面是利用DNS工作原理處理負載平衡的工作原理圖: 由可以看出,在DNS伺服器中應該配置了多個A記錄,如: www.apusapp.com IN A 114.100.20.201; www.apusapp.com IN A 114.100.20.202; www.apusapp.com IN A 114.100.20.203;因此,每次網域名稱解析請求都會根據對應的負載平衡演算法計算出一個不同的IP地址並返回,這樣A記錄中配置多個伺服器就可以構成一個叢集,並可以實現負載平衡。中,使用者請求www.apusapp.com,DNS根據A記錄和負載平衡演算法計算得到一個IP地址114.100.20.203,並返回給瀏覽器,瀏覽器根據該IP地址,訪問真實的物理伺服器114.100.20.203。所有這些操作對使用者來說都是透明的,使用者可能只知道www.apusapp.com這個網域名稱。
DNS網域名稱解析負載平衡有如下優點:
1. 將負載平衡的工作交給DNS,省去了網站管理維護負載平衡伺服器的麻煩。2. 技術實現比較靈活、方便,簡單易行,成本低,使用於大多數TCP/IP應用。3. 對於部署在伺服器上的應用來說不需要進行任何的代碼修改即可實現不同機器上的應用訪問。3. 伺服器可以位於互連網的任意位置。4. 同時許多DNS還支援基於地理位置的網域名稱解析,即會將網域名稱解析成距離使用者地理最近的一個伺服器位址,這樣就可以加速使用者訪問,改善效能。
同時,DNS網域名稱解析也存在如下缺點:
1. 目前的DNS是多級解析的,每一級DNS都可能緩衝A記錄,當某台伺服器下線之後,即使修改了A記錄,要使其生效也需要較長的時間,這段時間,DNS任然會將網域名稱解析到已下線的伺服器上,最終導致使用者訪問失敗。2. 不能夠按伺服器的處理能力來分配負載。DNS負載平衡採用的是簡單的輪詢演算法,不能區分伺服器之間的差異,不能反映伺服器當前運行狀態,所以其的負載平衡效果並不是太好。3. 可能會造成額外的網路問題。為了使本DNS伺服器和其他DNS伺服器及時互動,保證DNS資料及時更新,使地址能隨機分配,一般都要將DNS的重新整理時間設定的較小,但太小將會使DNS流量大增造成額外的網路問題。
事實上,大型網站總是部分使用DNS網域名稱解析,利用網域名稱解析作為第一級負載平衡手段,即網域名稱解析得到的一組伺服器並不是實際提供服務的物理伺服器,而是同樣提供負載平衡伺服器的內部伺服器,這組內部負載平衡伺服器再進行負載平衡,請請求發到真實的伺服器上,最終完成請求。
參考:[1] http://zh.wikipedia.org/zh/%E5%9F%9F%E5%90%8D%E7%B3%BB%E7%BB%9F[2] http://blog.csdn.net/flynetcn/article/details/3733574[3] 《大型網站技術架構——核心原理與案例分析》
每天進步一點點——負載平衡之DNS網域名稱解析