Course

DNS 是一個資料庫

DNS 是一個資料庫,其中包含了所有的網域名稱及其相關資訊。

舉個例子

當我們開啟一個網站時,我們可以在瀏覽器的網址列中看到一個網址,例如 google.com。實際上瀏覽器並無法直接連接到 google.com 這個網址,而是透過查詢 DNS 將它轉換成一個 IP 位址,如 64.233.189.113。瀏覽器只能透過 IP 位址去連接伺服器。

我們可以使用 CLI 的指令 Dig 來查詢域名所對應的 IP 位址。 如此大的資料表在 1987 年就已經被設計出來。

設計目標

  • 多租戶: 各自為獨立的個體不會互相干擾。
  • 容錯: 它是網路的基礎,不能輕易的崩潰。如果出現錯誤,也只有一小部分受影響。
  • 可擴展: 可以隨著網路的發展而擴展。
  • 高效能: 緩慢的 DNS 會導致應用程式也跟著變慢。

設計模式

  • 多租戶的 聯盟
  • 可容錯的 複製
  • 可擴展的 分散
  • 高效能的 快取

這些就是 DNS 可以運作良好的原因,同時這也是那麼難除錯的原因。因為不是在一個地方就可以看到整個全貌。現在它是一個分散式的系統,困難的部分在於同一份資料存在不同的版本。

拉遠來看,它可以視為是一個 key-value 的資料庫,key 的部分是域名, value 的部分是 IP 位址,所以用資料庫的心智模型來看會是一個很好的開始。

#References