高性能爬蟲爲何使用定製DNS客戶端?

DNS 解析是高性能網絡爬蟲的瓶頸,主要是由於:緩存

1. 因爲域名服務的分佈式的特性,DNS解析可能須要屢次的請求轉發,有時須要幾秒甚至更長的時間來解析出相應的IP 地址。服務器

2. 現有的標準庫對DNS解析的實現是同步的。網絡

JAVA中InetAddress.getByName是線程阻塞的。而且JAVA中實現的DNS緩存在沒有設置security manager的狀況下TTL的時間僅有30s。多線程

Unix/LINUX中gethostbyname函數問題更大,在多線程的狀況下,只要有一個線程的gethostbyname函數阻塞,其餘的線程都會在該函數阻塞,嚴重的影響系統性能。異步

使用定製的DNS客戶端能夠緩解甚至消除DNS解析帶來的瓶頸問題:分佈式

1. 在定製的客戶端中實現DNS Resolver,支持遞歸查詢,並緩存DNS響應。在進行DNS解析時可先到緩存中進行查詢,若是命中則直接返回IP地址,若是查詢到NS記錄,則直接發送消息給受權域名服務器進行查詢,減小DNS請求次數。函數

如上圖所示,傳統的DNS客戶端把全部的DNS請求都發到配置的DNS服務器,而定製的DNS客戶端則直接到closer DNS server進行解析。相比之下,定製的性能

DNS客戶端不只實現了負載的均衡並且還減小了請求的次數。spa

2. 在定製的客戶端中可採用異步解析的方法來提升解析效率。.net

 

參考:

http://blog.csdn.net/shijun_zhang/article/details/6577426

相關文章
相關標籤/搜索