基於DNS的負載平衡
在了解了負載平衡系統的大致組成及使用方式之後,我們就來看看各種負載解決方案。
當前業界中所最常使用的負載平衡解決方案主要分為三種:
1、基於DNS的負載平衡
2、L3/4負載平衡,也即是基於網絡層的負載平衡
3、L7負載平衡,即基於應用層的負載平衡。
在這些解決方案中,基於DNS的負載平衡是最簡單的,也是最早出現的一種負載平衡解決方案。
當我們通過在浏覽器的地址欄中鍵入域名來訪問某個網站時,浏覽器將首先查找本地的DNS緩存是否擁有該域名所對應的IP地址。如果有,那麼浏覽器將嘗試直 接使用該IP地址訪問該網站的內容。如果本地DNS緩存中沒有該域名所對應的IP地址,那麼它將向DNS發送一個請求,以獲得該域名所對應的IP並添加到 本地DNS緩存中。
而在DNS中,一個域名可能和多個IP地址綁定。在這種情況下,DNS響應將會按照Round Robin方式返回這些IP地址的列表。例如在多次通過nslookup或host等命令來查看特定域名所對應的IP時,其可能的返回如下(因國內網絡原 因,您需要FQ再進行試驗):
可以看到,不同的DNS請求所返回的結果會按照Round Robin進行輪換,進而使得不同的用戶訪問不同的IP地址,平衡各個服務器的負載。
雖然這種負載平衡解決方案非常容易實現,但是它有一個致命的缺點:為了減少DNS請求的次數以提高訪問效率,浏覽器常常緩存了DNS查詢的結果。如果一個 IP處的服務失效,那麼浏覽器可能仍會根據DNS緩存中所記錄的信息向該不可用的服務發送請求(不同的浏覽器可能有不同的行為)。雖然說整個服務只有一處 IP所對應的服務失效了,但是從用戶的角度看來該網站已經不可訪問。因此基於DNS的負載平衡方案並不能作為一個獨立的負載平衡解決方案來提供高可用性的 保障,而是作為其它負載平衡解決方案的補充方案來使用。