LLでのDNSルックアップはどこかにキャッシュされるのか。
rubyとpythonとphpとperlで試してみた。
それぞれの言語ごとに下記のコードを動かしながら、
tcpdump dst port 53
でチェックしてみた。結果としてはすべての言語においてDNSレコードはキャッシュされることなく毎回DNSルックアップしてた。JavaだとVM上にDNSレコードがキャッシュされるらしい。
LLだと毎回DNSルックアップされるということがわかったので、通信処理のオーバーヘッドが気になる時、もしくは気にしなきゃいけないくらいの頻度で通信するようなアプリケーションを使うならhostsに書くなどがよさげ。
逆にDNSを使った負荷分散の時は、このへん特にケアしなくて良い感じですね。
- php
<?php require("HTTP/Request.php"); $args = $_SERVER["argv"]; $url = $args[1]; $http = new HTTP_Request($url); $count = 0; for(;;){ $response = $http->sendRequest(); print $count++ . "\n"; sleep(5); }
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; my $ua = LWP::UserAgent->new(); my $count = 0; while(1){ $ua->get($ARGV[0]); print $count++ . "\n"; sleep(5); }
from urllib import urlopen import sys import time argvs = sys.argv count = 0 while True: urlopen(argvs[1]) count += 1 print count time.sleep(5)
require 'net/http' require 'uri' url = URI.parse(ARGV[0]) count = 0 while 1 > 0 Net::HTTP.start(url.host, url.port){|http| http.get('/') } sleep 5 end