2009-09-28 5 views
7

Es gibt viele Artikel im Internet, die erklären, warum Sie nicht Apache-Standard Inode-Mtime-Format für ETags verwenden möchten.Was ist der Zweck von (Apache) Inode in ein ETag zu setzen?

Aber ich habe noch nichts darüber gelesen, was die Aufnahme von Inode für Apache in erster Linie motiviert haben könnte. Auf den ersten Blick scheint es nur nützlich zu sein, wenn man in der Lage sein muss, zwischen Oktett-Oktett-Faksimiles der gleichen Ressource zu unterscheiden, was jedoch dem Zweck von ETags sicher entgegensteht.

Die Autoren von Apache sind nicht für ihre schlampige Verbreitung von Internetstandards bekannt, daher muss ich etwas verpassen. Kann jemand etwas ausarbeiten?

EDIT: Ich frage dies hier anstatt auf ServerFault.com, weil ich einen Webserver implementieren, anstatt einen zu verwalten. Um mehr darüber zu erfahren, warum es eine schlechte Idee ist, siehe z.B. here oder here. Alle diese Artikel empfehlen das gleiche: Entfernen Sie Inodes aus Ihren Etags. Die Frage ist, gibt es überhaupt einen Vorteil für sie da zu sein?

+0

Gute Frage, aber wahrscheinlich gehört auf ServerFault.com – Avi

+1

Ich denke, es gehört hier - es ist mehr über die Wahl des Algorithmus – Greg

+1

Ich denke, Sie müssen näher darauf eingehen, warum Sie denken, es ist eine schlechte Idee. –

Antwort

4

Es scheint die Art von Sache zu sein, die man leicht durch eine falsche Vermutung für das, was der allgemeine Fall ist, oder durch die Bevorzugung der Korrektheit gegenüber der Leistung, standardmäßig, wenn es ein paar Zweifel gibt.

Gestatten Sie mir eine Geschichte darüber, wie es machen könnte gegangen sind:

Sie entscheiden früh, dass eine Hash/Prüfsumme über den Inhalt ist eine schlechte Idee aus Performance-Gründen

. "Wer weiß, wie groß die Datei sein könnte? Wir können diese nicht ständig neu berechnen ..." Also entscheiden sie sich für Größe und Datum und kommen einem ziemlich nahe.

"Aber warten Sie", sagt Person A, "nichts garantiert, dass Sie keine Dateigröße Kollision haben. In der Tat gibt es Fälle, wie Firmware-Binärdateien, wenn die Dateigröße immer gleich ist, und es ist vollständig möglich, dass mehrere gleichzeitig von einer Dev-Maschine hochgeladen werden, so dass diese nicht ausreichen, um zwischen verschiedenen Inhalten zu unterscheiden. "

Person B: "Hmm, guter Punkt. Wir brauchen etwas, das untrennbar mit dem Inhalt der Datei verbunden ist. Etwas, das zusammen mit der modifizierten Zeit Ihnen sagen kann, ob es sich um denselben Inhalt handelt."

Person A: "Was ist mit der Inode? Jetzt, auch wenn sie die Dateien umbenennen (vielleicht ändern sie" empfohlen "in eine andere Datei zum Beispiel), wird das Standard-Etag gut funktionieren!"

Person B: "Ich weiß nicht, Inode scheint ein bisschen gefährlich."

Person A: "Nun, was wäre besser?"

Person B: "Ja, gute Frage. Ich denke, ich kann nicht denken, was speziell falsch ist, ich habe nur ein allgemein schlechtes Gefühl dabei."

Person A: "Aber es garantiert zumindest, dass Sie ein neues herunterladen, wenn es geändert wird. Das Schlimmste, was passiert, ist, dass Sie öfter herunterladen, als Sie brauchen, und jeder, der weiß, dass sie sich keine Sorgen machen müssen es kann es einfach ausschalten. "

Person B: "Ja, das macht Sinn. Es ist wahrscheinlich in den meisten Fällen in Ordnung, und es scheint besser als die einfachen Alternativen."

Haftungsausschluss: Ich weiß nicht, was die Apache-Implementierer gedacht haben könnten. Das ist alles nur Hand-Wellen-Raten, und versuchen, eine plausible Geschichte zu machen.Aber ich habe diese Art von Dingen schon oft genug erlebt.

Sie wissen nie, woran Sie nicht gedacht haben (in diesem Fall waren redundante Server mit Lastenausgleich, die dieselben Dateien bereitstellen, typischer als sich um Größen- und Zeitkollisionen kümmern zu müssen). Der Load Balancer ist nicht Teil von Apache, was es einfacher macht, einen solchen Überblick zu erstellen.

Plus, der Fehlermodus hier ist, dass Sie den Cache nicht perfekt effizient genutzt haben (NICHT, dass Sie falsche Daten erhalten haben), was wohl besser, aber ärgerlich ist. Das legt nahe, dass selbst wenn sie darüber nachdenken würden, sie vernünftigerweise annehmen könnten, dass jemand, der genug Interesse daran hat, einen Load Balancer einzurichten, auch in der Lage wäre, ihre Konfigurationsdetails abzustimmen.

PS: Es geht nicht um Standards. Nichts spezifiziert, wie Sie die Etag berechnen sollen, nur dass es ausreichend sein sollte, um zu sagen, ob sich der Inhalt mit hoher Wahrscheinlichkeit geändert hat.