ANDREW/
選單觀點
中文EN
← 回到文章庫

TECHNOLOGY / DNS CACHE

公司成功導入 Cache,然後規定每次都要重新確認

Andrew Yuan · 技術實驗

昨天才確認過的事情,今天再確認一次。
上週已經寫下決定,這週又從背景介紹開始。

重新確認,有時很必要。

但如果條件沒變,也沒有新資訊,我們是不是仍在重跑同一套流程?

卡片收納盒、帶時鐘的卡片與沙漏。圖中文字:答案可以重用,但要有失效規則。

答案可以重用,但要有失效規則

最近我做了一個小專案:

tiny-dns-router

一個用 Python 實作的本地 DNS 轉送服務,依網域後綴,把查詢送到指定的上游 DNS 伺服器。

其中一個研究重點,是 Cache。

假設有人問:

「這個網域的 IP 是什麼?」

系統向上游查詢,得到答案。

幾秒後,又有人問同樣的問題。

如果答案符合快取重用條件,就不必再向上游問一次。

但查過,不代表可以永遠沿用。

DNS 用 TTL(Time to Live)限制快取可重用的時間。這是允許重用的期限,不是資料必然最新或正確的保證。

尤其是資料變動快的時候。

就像有些公司的組織圖,星期五還是最新版本。

星期一就變成歷史文獻了。

重複查詢中的快取收益

這次在原生 macOS loopback 上,我用設定了 6 ms 延遲的受控上游,比較啟用與停用快取的差異。

在重複查詢的 UDP 情境中,每次試驗都從空快取開始,按預定每 3 ms 一筆的排程送出 120 筆查詢。查詢重複使用四種鍵,涵蓋正向與否定回應。

兩種模式各有三次試驗。先計算每次試驗的 p50 延遲,再分別取三次結果的中位數:

停用 Cache:7.33 ms。
啟用 Cache:0.69 ms。

延遲從客戶端實際發起查詢算到回覆驗證完成,不含發送前的排程等待。

上游查詢次數的中位數,則從 120 次降到 4 次。

這組結果顯示:在這個重複查詢情境裡,重用答案能減少上游工作,也降低查詢延遲。

但換成每次都不同的 unique-query workload,收益就很有限。

這個快取沒有讓所有 DNS 問題都變快。

它改善的是符合重用條件、能夠命中的查詢。

不存在,與沒有回答,是兩件事

這次也實作了 Negative Caching,也就是否定快取。

例如收到上游符合規則的「網域不存在」回應,可以依否定快取的條件與期限暫存。

但有兩件事,必須分清楚:

上游回覆「不存在」。
以及上游沒有回答。

不然你打電話給財務部,沒人接。

系統立刻宣布:

「財務部不存在。」

這不是 Negative Caching。

這是組織重整。

逾時、傳輸錯誤與符合規則的否定回應,需要不同的處理。

不能因為沒有取得答案,就製造一個看似肯定的答案。

量測範圍、資源限制與故障處理

除了快取,這個服務也包含 UDP/TCP 轉送、依網域後綴路由、快取容量限制,以及逾時後切換上游等處理。

因為能回答正常查詢,只是系統行為的一部分。

還要確認資料怎麼過期、資源如何受限,以及上游失敗時怎麼處理。

macOS 與 Colima Linux 各通過相同的 40 項測試;兩個平台合計完成 72 次量測,取得 8,640 筆正確回覆。

這仍然是一個工程實驗。

固定負載結果不代表最大吞吐量。
Loopback 不代表真實 Internet。
Colima Linux 的量測與原生 macOS 分開報告。

它不是 Production Resolver,也沒有提供 DNSSEC validation。

快取容量限制針對項目數與儲存回應的位元組數,不是整個程序的 RAM 硬上限。

對我來說,這個專案的價值,是把路由政策、快取、資源限制與故障處理接在一起,讓行為能被測試與量測。

團隊需要答案的重用規則

放回團隊流程,也有一個值得問的問題:

「什麼條件下,既有答案可以直接使用?」

條件改變、答案過期或決策風險升高時,重新確認可能是必要的。

但我們也需要說清楚:

誰負責維護答案?
哪些變化會使它失效?
什麼情況必須重新驗證?
沒有新資訊時,誰有權依既有決定繼續往前走?

建立知識庫,只完成了一部分。

答案保存下來之後,團隊還需要說清楚,什麼時候可以直接沿用。

否則,大家辛苦寫文件、整理 FAQ、留下決策紀錄。

某天有人問:

「這件事以前處理過嗎?」

「有,完整紀錄就在知識庫。」

「很好,那我們安排一個會議,重新確認一下。」

原來公司不是沒有 Cache。

只是每份答案使用前,都得再開一次會。

效果就像 TTL 永遠是零。

原創程式碼與文件採 MIT License;第三方依賴保留各自授權。

#SystemsEngineering #Networking #DNS #Python

實驗證據

分享這篇