據GitHub高級架構工程師Joe Williams撰文介紹,過去數年中,GitHub一直使用的是一個簡單的DNS架構。雖然它也能適合工作需求,但現在GitHub已遷移到一個能更好地支持自身規模的新架構。
Williams提及,很多應用對DNS的解析性能或可用性十分敏感,這是GitHub采用新的DNS處理模型的一個原因。DNS會導致用戶性能降級,甚至無法提供服務。當使用原有的DNS架構進行配置和代碼更改時,這個問題亟待解決。此外,工程師也難以識別一些故障的導致根源,他們唯一能使用的工具是tcpdump。除了對上述問題的改進,GitHub工程師還瞄準于:
增加內部域(Zone)和外部域配置的靈活性。除非做特殊的配置,否則內部域對外是不可見的。同時,從內網的內部就可以訪問外部域。改進緩存節點(Cache)和授權節點(Authority)間的角色隔離。支持基于部署和基于API的工作流,實現更改的自動化。避免任何外部依賴,改進可靠性。在GitHub設計的架構中,有三種類型的節點:
緩存節點。它部署于各數據中心內,負責向應用提供實時數據,使應用無需跨數據中心。邊緣節點(Edge)。它是各數據中心本地的授權節點,行使網關職責,處理來自緩存節點的請求,并負責域傳送(Zone Transfer)。授權節點。它是DNS主服務器,管理來自邊緣節點的域交換,并提供創建、修改或刪除記錄的HTTP API。日志功能是GitHub新DNS架構的另一個改進。GitHub工程師根據自身需求,選擇了對緩存節點使用Unbound,邊緣節點使用NSD,授權節點使用PowerDNS。
前面提到,外部域(github.com)可從內部域(github.net)訪問,不需要與外部DNS提供商通信。這是使用Unbound實現的。此外,Unbound還支持在內部DNS失敗時對外部網絡的訪問。
在Williams的帖子中,還給出了更多的技術細節,值得全面一讀。
查看英文原文: How GitHub Revamped its DNS Infrastructure