DNS緩存是一個很好的主意,但我建議在應用程序之外進行;我已經使用PowerDNS recursor多年來的優異成績,它是很好的固體代碼。 (PDNS通過從Dan Bernstein的DNS recursor軟件中學習,避免了一些標題製作安全缺陷)
通過在應用程序之外進行緩存,可以避免完全擔心嘗試將IP與正確的IP進行匹配Host:
您的請求中的標題,和您可以完全訪問DNS內置的緩存智能。 (PDNS將尊重結果的生存時間,這將需要您的團隊努力重新正確地實施。)
但我認爲問題的很大一部分是,DNS請求可能是在您的申請,後前一個已經返回。如果你一整天會碰到相同的100個名字,那麼使用PDNS-recursor可能就足夠了。
如果每個請求的100個名稱沒有太多重疊,那麼您可能需要並行化您的應用程序所做的DNS請求,以便您可以同時有100個未完成的DNS請求,而不僅僅是一個同時出色的要求。一種'便宜'的方法是將所有請求交給一個外部程序,該程序可以啓動幾十個線程並請求所有名稱。 (並將它們放在地板上,依靠PDNS-recursor緩存它們)。更多的工作是直接在PHP程序中創建幾十個線程或進程來執行所有查找。這可以讓您直接使用答案,或者在舊的順序代碼執行查找之前預填充您的PDNS-recursor緩存。
而且大部分工作都將完全轉移到異步DNS請求,例如libadns
庫提供。如果存在沒有在100個名稱查找的不同突發之間重疊,則這將提供最大的益處。
打開所有連接時,php的系統資源負載是多少?你的服務器環境是什麼樣的? – 65Fbef05 2011-04-19 11:22:05
負載很小,它是一個16核心服務器,運行CentOS – freediver 2011-04-20 19:13:07