linux的dns快取,nscd服務
這兩天做壓力測試的時候發現,用webbench壓網域名稱要比壓ip位址慢好幾倍,而且壓網域名稱的時候nginx併發量也很低.反覆測試了好多遍,懷疑時間是花在dns解析上.在/etc/hosts中做手動解析:
1echo "211.157.145.103 m.app518.com" >> /etc/hosts
之後再壓,速度果然正常了.
dns解析為什麼會慢呢?linux的dns快取有什麼不同呢?上網查了一下發現linux本身是沒有dns快取的,想使用dns快取的話需要自己安裝乙個服務程式nscd(name service cache daemon).
1apt-get install nscd
修改配置檔案/etc/nscd.conf,開啟dns快取,修改這一行
1enable-cache hosts yes
這個服務除了dns快取之外還可以快取passwd,group,servers.這幾個東西的快取暫時用不到.
重啟nscd服務
1service nscd restart
之後發現不需要做手動解析,訪問速度回公升到用ip位址一樣了.
dns快取在伺服器上的作用
在需要通過網域名稱與外界進行資料互動的時候,dns快取就派上用場了,它可以減少網域名稱解析的時間,提高效率.例如以下情況:
使用爬蟲採集網路上的頁面資料,
使用auth2.0協議從其他平台(如微博或qq)獲取使用者資料,
使用第三方支付介面,
使用簡訊通道下發簡訊等.
dns快取到底能提公升多少效能呢?
首先要看網路和dns伺服器的能力,dns解析越慢,dns快取的優勢就越大.比如我們在北京用的dns伺服器202.106.0.20和google的dns伺服器8.8.8.8速度會差不少.
如果dns伺服器比較穩定,那它對效率的影響就是乙個常數.這個常數有多大呢?
我簡單試了一下.在區域網內進行壓力測試,壓乙個nginx下的靜態頁面,使用202.106.0.20這個dns伺服器,不用dns快取.平均一分鐘可以訪問27萬次.壓乙個簡單的php頁面,平均一分鐘可以訪問22萬次.加上nscd服務後,靜態頁面平均一分鐘可以訪問120萬次,要快4倍多.php頁面平均一分鐘可以訪問50萬次,快一倍多.
如果是做搜尋引擎或是一些**服務類的專案,比如簡訊通道,資料推送服務,這個效能提公升還是比較可觀的.但在一般的專案中,一台伺服器每分鐘發22萬次請求的情況是很少見的,所以這個效能提公升也微呼其微.
但在追求極限的道路上,每一小步都至關重要噢~
Nscd 使用nscd作為本地dns快取
公司使用阿里雲主機,且首選dns使用的也是阿里雲的。但是有乙個face 的業務總是會報unknownhostexception。抓包查了一波發現雖然阿里dns有時候會servfail,但是這些都是請求的網域名稱後面加了localdomain導致的,所以理論上業務不應該出現unknownhostexc...
linux開啟nscd服務快取加速 DNS快取
在我使用的阿里雲主機上有觀察到開啟了乙個服務nscd 後來谷哥了下該服務的作用。了解到nscd會快取三種服務passwd group hosts,所以它會記錄三個庫,分別對應源 etc passwd,etc hosts 和 etc resolv.conf每個庫儲存兩份快取,乙份是找到記錄的,乙份是沒...
linux開啟nscd服務快取加速
在我使用的阿里雲主機上有觀察到開啟了乙個服務nscd 後來谷哥了下該服務的作用。了解到nscd會快取三種服務passwd group hosts,所以它會記錄三個庫,分別對應源 etc passwd,etc hosts 和 etc resolv.conf每個庫儲存兩份快取,乙份是找到記錄的,乙份是沒...