webentwicklung-frage-antwort-db.com.de

Amazon CloudFront-Latenzzeit

Ich experimentiere mit AWS S3 und CloudFront für eine Webanwendung, die ich entwickle. 

In der App lasse ich Benutzer Dateien in den S3-Bucket hochladen (mithilfe des AWS SDK) und über CloudFront CDN verfügbar machen. Das Problem ist jedoch auch, wenn die Dateien hochgeladen werden und im S3-Bucket bereit sind 2 Um in der CloudFront-CDN-URL verfügbar zu sein, ist dies normal?

22
Ahsan

CloudFront versucht in Echtzeit, nicht zwischengespeicherten Inhalt vom Origin-Server abzurufen. Es gibt keine "Replikationsverzögerung" oder ein ähnliches Problem, da CloudFront ein Pull-Through-CDN ist. Jeder CloudFront Edge-Standort weiß nur über die Existenz und Konfiguration Ihrer Site. Es weiß nichts über Ihren Inhalt, bis er Anfragen dazu erhält. In diesem Fall ruft der CloudFront Edge den angeforderten Inhalt vom Origin-Server ab und speichert ihn gegebenenfalls im Cache, um nachfolgende Anforderungen zu bedienen. 

Das Problem, das hier auftritt, bezieht sich auf ein Konzept, das manchmal als "negatives Caching" bezeichnet wird - das Zwischenspeichern der Tatsache, dass eine Anforderung nicht funktioniert - was normalerweise ausgeführt wird, um zu verhindern, dass der Ursprung des Objekts, mit dem gepuffert wird, gehämmert wird Anforderungen, die wahrscheinlich trotzdem fehlschlagen.

Wenn Ihr Origin einen HTTP 4xx- oder 5xx-Statuscode zurückgibt, zwischenspeichert CloudFront diese Fehlerantworten fünf Minuten lang und übermittelt dann die nächste Anforderung für das Objekt an Origin, um zu sehen, ob das Problem, das den Fehler verursacht hat, behoben und die Anforderung angefordert wurde Objekt ist jetzt verfügbar.

- http://docs.aws.Amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html

Wenn der Browser oder etwas anderes versucht, die Datei von diesem bestimmten CloudFront Edge herunterzuladen, bevor der Upload in S3 abgeschlossen ist, gibt S3 einen Fehler aus, und CloudFront an diesem Edge-Speicherort speichert diesen Fehler und speichert sie die nächsten 5 Minuten, um es nicht noch einmal zu versuchen.

Keine Sorge - dieser Timer ist konfigurierbar. Wenn der Browser dies unter der Haube und außerhalb Ihrer Kontrolle durchführt, sollten Sie ihn trotzdem reparieren können.

Sie können die Dauer des Fehler-Caching angeben - das Minimum-Caching für FehlerTTL - für jeden 4xx- und 5xx-Statuscode, den CloudFront zwischenspeichert. Eine Prozedur finden Sie unter Konfigurieren des Fehlerantwortverhaltens .

- http://docs.aws.Amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html


Um dies in der Konsole zu konfigurieren

  • Klicken Sie beim Anzeigen der Distributionskonfiguration auf die Registerkarte Error Pages

  • Beginnen Sie für jeden Fehler, bei dem Sie das Timing anpassen möchten, indem Sie auf Create Custom Error Response klicken.

  • Wählen Sie den zu ändernden Fehlercode aus der Dropdown-Liste aus, z. B. 403 (Verboten) oder 404 (Nicht gefunden). Ihre Bucket-Konfiguration bestimmt, welcher Code S3 für fehlende Objekte zurückgibt. Wenn Sie sich nicht sicher sind, ändern Sie sie 403 wiederholen Sie dann den Vorgang und ändern Sie 404. 

  • Setzen Sie Error Caching Minimum TTL (seconds) auf 0

  • Lassen Sie Customize Error Response auf No gesetzt. (Bei Auswahl von Yes aktiviert diese Option den benutzerdefinierten Antwortinhalt bei Fehlern. Dies ist nicht das, was Sie wollen. Die Aktivierung dieser Option liegt außerhalb des Umfangs dieser Frage.)

  • Klicken Sie auf Create. Sie gelangen zurück zur vorherigen Ansicht, in der Error Caching Minimum TTL für den soeben definierten Code angezeigt wird. 

Wiederholen Sie diese Schritte für jeden HTTP-Antwortcode, den Sie gegenüber dem Standardverhalten ändern möchten (dies ist die oben beschriebene Haltezeit von 300 Sekunden).

Wenn Sie alle gewünschten Änderungen vorgenommen haben, kehren Sie zum Hauptbildschirm der CloudFront-Konsole zurück, in dem die Distributionen aufgeführt sind. Warten Sie, bis der Verteilungsstatus von In Progress in Deployed wechselt (normalerweise etwa 20 Minuten, bis die Änderungen an allen Kanten ausgegeben werden), und testen Sie. 

35

Werden diese neuen Dateien zum ersten Mal in S3 geschrieben oder werden vorhandene Dateien aktualisiert? S3 bietet Konsistenz beim Lesen nach dem Schreiben für neue Objekte. Angesichts des Pull-Modells von CloudFront sollten Sie dieses Problem nicht mit neuen in S3 geschriebenen Dateien haben. Wenn ja, würde ich ein Ticket bei AWS eröffnen. 

Wenn es sich um Updates für vorhandene Dateien handelt, müssen Sie sowohl die S3-Konsistenz als auch den Ablauf des CloudFront-Caches berücksichtigen. Beides könnte dieses Verhalten verursachen.

3
Mark B

Wie in Ihrem Kommentar bemerkt, scheint Google Chrome Ihre Upload-/Vorschau-Strategie durcheinander zu bringen:

  1. Chrome fordert die URL an, die derzeit nicht den Inhalt Hat. 
  2. die Anforderung wird von Cloudfront mit ungültiger Antwort zwischengespeichert
  3. sie laden die Datei in S3 hoch
  4. bei der Vorschau der hochgeladenen Datei antwortet die Cloudfront mit der zwischengespeicherten Antwort (Schritt 2).
  5. nachdem der Cloudfront-Cache abgelaufen ist, trifft Cloudfront auf Origin und das Problem kann nicht mehr reproduziert werden. 
0