06.14 Java高級編程——DNS負載均衡總結

筆者曾供職於華為,三星,騰訊,是一個資深碼農,歡迎大家

關注我,歡迎評論轉發

DNS是什麼?

在瞭解DNS負載均衡之前,我們首先需要了解DNS域名解析的過程。

我們知道,數據包採用IP地址在網絡中傳播,而為了方便用戶記憶,我們使用域名來訪問網站。那麼,我們通過域名訪問網站之前,首先需要將域名解析成IP地址,這個工作是由DNS完成的。也就是域名服務器。

我們提交的請求不會直接發送給想要訪問的網站,而是首先發給域名服務器,它會幫我們把域名解析成IP地址並返回給我們。我們收到IP之後才會向該IP發起請求。

那麼,DNS服務器有一個天然的優勢,如果一個域名指向了多個IP地址,那麼每次進行域名解析時,DNS只要選一個IP返回給用戶,就能夠實現服務器集群的負載均衡。

Java高級編程——DNS負載均衡總結

具體做法

首先需要將我們的域名指向多個後端服務器(將一個域名解析到多個IP上),再設置一下調度策略,那麼我們的準備工作就完成了,接下來的負載均衡就完全由DNS服務器來實現。

當用戶向我們的域名發起請求時,DNS服務器會自動地根據我們事先設定好的調度策略選一個合適的IP返回給用戶,用戶再向該IP發起請求。

調度策略

一般DNS提供商會提供一些調度策略供我們選擇,如隨機分配、輪詢、根據請求者的地域分配離他最近的服務器。

優缺點分析

DNS負載均衡最大的優點就是配置簡單。服務器集群的調度工作完全由DNS服務器承擔,那麼我們就可以把精力放在後端服務器上,保證他們的穩定性與吞吐量。而且完全不用擔心DNS服務器的性能,即便是使用了輪詢策略,它的吞吐率依然卓越。

此外,DNS負載均衡具有較強了擴展性,你完全可以為一個域名解析較多的IP,而且不用擔心性能問題。

但是,由於把集群調度權交給了DNS服務器,從而我們沒辦法隨心所欲地控制調度者,沒辦法定製調度策略。

DNS服務器也沒辦法瞭解每臺服務器的負載情況,因此沒辦法實現真正意義上的負載均衡。它和HTTP重定向一樣,只不過把所有請求平均分配給後端服務器罷了。

此外,當我們發現某一臺後端服務器發生故障時,即使我們立即將該服務器從域名解析中去除,但由於DNS服務器會有緩存,該IP仍然會在DNS中保留一段時間,那麼就會導致一部分用戶無法正常訪問網站。這是一個致命的問題!好在這個問題可以用動態DNS來解決。

Java高級編程——DNS負載均衡總結

動態DNS

動態DNS能夠讓我們通過程序動態修改DNS服務器中的域名解析。從而當我們的監控程序發現某臺服務器掛了之後,能立即通知DNS將其刪掉。

綜上所述

DNS負載均衡是一種粗獷的負載均衡方法,這裡只做介紹,不推薦使用。


分享到:


相關文章: