Sven Rautenberg: PHP DNS Cache

Beitrag lesen

Moin!

ich schreibe gerade eine Applikation, die periodisch eine gewisse Anzahl von teilweise immer gleichen URIs aufrufen muss. Den Response-Content bekomme ich dann über die sehr komfortable Funktion PHP file_get_contents(), die als Argument für meinen Fall eine absolute Web-Adresse erwartet.

Nun dachte ich, dass ich mir die stetig wiederkehrende DNS-Auflösung doch eigentlich sparen könnte.

Du machst dir Performancegedanken. Das ist ok.

Hast du dir selbst alle notwendigen Fragen gestellt, um die Performancefrage mit einer akzeptablen Performanceantwort zu versehen?

1. Hast du festgelegt, welcher Faktor im Hinblick auf Performance für dich "besser" bedeutet? Mögliche Faktoren: Ausführungszeit, Speicherverbrauch, CPU-Zyklen, Datentransfermenge, ...

2. Kannst du den festgelegten Faktor, und ggf. noch weitere, davon abhängige Faktoren, messen? Automatisiert messen? Wiederholbar im laufenden Betrieb des Produktivsystems messen? Ohne Messung kannst du nicht wissen, ob eine Veränderung dich deinem gesteckten Performance-Ziel (siehe Frage 1) näher gebracht hat, oder nicht.

3. Und erst jetzt kommt die entscheidende Frage: Welche Faktoren kannst du im Code beeinflussen, um deinen Performance-Zielen näher zu kommen?

Und aus diesen Fragen ergeben sich aus meiner Sicht für deine konkreten Fragen folgende Antworten:

Wie läuft das bei PHP? Gibt es einen DNS-Cache?

Nicht in PHP.

Im Netz konnte ich nichts finden, ich gehe davon aus: Nein. Nutzt PHP den lokalen DNS-Cache des Betriebsystems, wenn vorhanden?

Dieser Cache ist immer vorhanden.

Wenn nein, was haltet ihr von der Entwicklung eines eigenen, eventuell DB-gestützten DNS-Cache hinsichtlich file_get_contents?

Wie willst du file_get_contents php-codeseitig mit DNS-Cacheverhalten ausstatten? Dürfte extrem schwierig werden.

Sollte man gleich selbst mit Sockets und DNS-Cache arbeiten, um Performance-Gewinne zu erzielen?

Lohnt sich nur, wenn durch Messung des gewünschten zu optimierenden Performance-Faktors tatsächlich nennenswerte Ersparnis erzielt werden kann.

PHP's Curl cached ja, soweit ich das sehen kann.

Gibt es noch andere Teile einer HTTP-Transaktion, die man beschleunigen könnte? Response, Request, Connect liegt ja alles nicht in meiner Hand. Ich sehe da nichts mehr.

Die Frage ist: Wohin optimiert?

- Sven Rautenberg