Welche Leistungsprobleme treten bei der Verwendung von Symlinks für Ihre Apache-Docroot auf?

7

Ich habe bereits versucht, eine vorhandene Frage zu finden, konnte aber keine gute Übereinstimmung finden.

Im Rahmen meines Bereitstellungsprozesses für meine öffentlich zugänglichen Websites verwende ich Symlinks, um zwischen Versionen der Webanwendung zu wechseln.

Zum Beispiel habe ich ein vhost abc.com, das hier eine Docroot hat: /var/www/abc.com

Die Docroot selbst (/var/www/abc.com)ist ein Symlink zum webzugänglichen Verzeichnis der Anwendung(/var/www/package/buildX/web)

Wenn ich einen neuen Build bereitstelle, tausche ich einfach den Symlink aus und ersetze ihn durch einen anderen Symlink zum neuen Build.

Die Frage, die ich habe, ist, wie hoch der Leistungsaufwand (oder die Bedenken, die ich haben sollte) bei der Verwendung von Symlinks für eineApache docroot

chadl
quelle
1
Hatten Sie jemals Probleme mit einer Race-Bedingung, bei der frühere vorhandene Apache-Prozesse über den Symlink mit dem Dateipfad von buildX verbunden waren und dann, als Sie Symlinks ausgetauscht und das alte Verzeichnis an einen anderen Ort verschoben haben, immer wieder schwerwiegende PHP-Fehler wie "Unbekannt" angezeigt wurden: Der Stream konnte nicht geöffnet werden : Keine solche Datei oder kein solches Verzeichnis in Unbekannt in Zeile 0?
Benno
UPDATE: Nevermind, ich denke, es liegt daran, dass PHP echte Dateipfade in realpath_cache_get () zwischenspeichert. Das Ausführen von clearstatcache (true) scheint das Problem zu beheben.
Benno

Antworten:

6

Das erste Problem ist, ob sich alle diese Dateien im selben Dateisystem oder auf demselben physischen Speichergerät befinden. In diesem Fall ist der Unterschied zwischen einer direkten Referenz und einem Symlink kaum zu erkennen.

Sie müssen hier in Größenordnungen denken. Ihre Anwendung wird wahrscheinlich von einer Skriptsprache und einer Datenbank unterstützt. Diese Elemente der Anwendung sind der begrenzende Faktor und keine geringfügige Funktion des Dateisystems. Jeff Atwood erklärt dies am besten in diesem Blog-Beitrag .

Joel E Salas
quelle
2

Machen Sie sich keine Sorgen über den Leistungsverlust von Symlink. Praktisch alles andere wird ein Engpass vor diesem sein. Das Auflösen eines Symlinks dauert nicht zu viele CPU-Zyklen. Wenn Sie Ihr PHP-Skript ausführen, die Datenbankabfragen und Ergebnismengen bearbeiten und möglicherweise Module wie mod_security von Apache verwenden, ist dies der eigentliche Flaschenhals.

Theoretisch könnten Sie etwas optimieren, wenn alles, was Ihr Server bedient, statischer Inhalt ist. Selbst dann ist es das Richtige, die Webserver- und / oder Kernel-Parameter zu optimieren und die Hardware zu skalieren, und keine dumme Mikrooptimierung wie den Umgang mit Symlinks. Symbolische Links bieten Ihnen eine saubere und bequeme Möglichkeit, zwischen der Website-Version usw. zu wechseln. benutze sie glücklich.

Janne Pikkarainen
quelle
Danke für die tolle Antwort Janne! Ihre Antwort ist (IMO) genauso gut wie Joels Antwort. Joels Antwort war jedoch beide früher und bezog sich auf einen großartigen Blog-Beitrag. Ich werde seine Antwort als Ergebnis akzeptieren. Vielen Dank!
Chadl