基于DNS的負載平衡
OK,在了解了負載平衡系統的大緻組成及使用方式之後。我們就來看看各種負載解決方式。
目前業界中所最常使用的負載平衡解決方式主要分為三種:基于DNS的負載平衡,L3/4負載平衡,也即是基于網絡層的負載平衡,以及L7負載平衡,即基于應用層的負載平衡。在這些解決方式中,基于DNS的負載平衡是最簡單的,也是最早出現的一種負載平衡解決方式。
當我們通過在浏覽器的位址欄中鍵入域名來訪問某個站點時,浏覽器将首先查找本地的DNS緩存是否擁有該域名所相應的IP位址。
假設有,那麼浏覽器将嘗試直接使用該IP位址訪問該站點的内容。假設本地DNS緩存中沒有該域名所相應的IP位址。那麼它将向DNS發送一個請求,以獲得該域名所相應的IP并加入到本地DNS緩存中。
而在DNS中,一個域名可能和多個IP位址綁定。在這樣的情況下,DNS響應将會依照Round Robin方式傳回這些IP位址的清單。
比如在多次通過nslookup或host等指令來檢視特定域名所相應的IP時。其可能的傳回例如以下(因國内網絡原因,您須要FQ再進行試驗):
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SNkhTYldzYmZ2N3IDZkJDOlVDOwImNzAzMlNDZhJGMx8CXxAzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
能夠看到。不同的DNS請求所傳回的結果會依照Round Robin進行輪換。進而使得不同的使用者訪問不同的IP位址。平衡各個server的負載。
盡管這樣的負載平衡解決方式很easy實作,可是它有一個緻命的缺點:為了降低DNS請求的次數以提高訪問效率。浏覽器經常緩存了DNS查詢的結果。假設一個IP處的服務失效。那麼浏覽器可能仍會依據DNS緩存中所記錄的資訊向該不可用的服務發送請求(不同的浏覽器可能有不同的行為)。盡管說整個服務僅僅有一處IP所相應的服務失效了,可是從使用者的角度看來該站點已經不可訪問。是以基于DNS的負載平衡方案并不能作為一個獨立的負載平衡解決方式來提供高可用性的保障,而是作為其他負載平衡解決方式的補充方案來使用。