Blog

Optimierung der Leistung von Amazon S3

Sidney Borrego y Diaz

Aktualisiert Oktober 16, 2025
7 Minuten

Amazon Simple Storage Service (S3) ist einer der wichtigsten Speicherdienste von AWS. S3 Buckets werden von Millionen von AWS-Kunden genutzt. In diesem Artikel gehen wir darauf ein, wie die Leistung von S3 optimiert werden kann.

Vorsilben

Die Verwendung von Präfixen ermöglicht eine Skalierung für hohe Anfrageraten. S3 unterstützt bis zu 3.500 Schreibvorgänge und 5.500 Lesevorgänge pro Sekunde pro partitioniertem Präfix. Jede Partition ist eine logische Einheit, die S3 intern zur Indizierung der Objektschlüssel verwendet. Die Objektschlüssel befinden sich zunächst in einer einzigen Partition.

Anfragen, die die zulässige Kapazität überschreiten, führen zu einem HTTP 503 Slowdown-Fehler. Wenn S3 anhaltende Anfrageraten feststellt, die die Kapazität einer einzelnen Partition überschreiten, erstellt es eine neue Partition pro Präfix in Ihrem Bucket. Wenn die Durchsatzanforderungen für Ihre Arbeitslasten steigen, skalieren die partitionierten Präfixe entsprechend, ohne dass es eine Obergrenze für die Anzahl der partitionierten Präfixe gibt.

Parallelisierung

S3 ist ein umfangreiches verteiltes System. Um seine Größenvorteile zu nutzen, können Lese- und Schreibanfragen an S3 auf große Objekte parallelisiert werden, anstatt eine einzige Anfrage zu stellen. Dieser Ansatz hilft dabei, Anfragen über mehrere Pfade durch das Netzwerk zu verteilen. S3 hat keine Beschränkungen für die Anzahl der Verbindungen zu einem S3-Bucket.

Lesen mit parallelen Anfragen

Für einzelne große Objekte wird der Bereich HTTP-Header kann verwendet werden, um das Objekt in Teilen herunterzuladen und nur den angegebenen Teil zu übertragen. Durch die Verwendung paralleler, gleichzeitiger Verbindungen zu S3, um verschiedene Byte-Bereiche desselben Objekts zu lesen, wird ein höherer Gesamtdurchsatz im Vergleich zu einem einzigen Lesen des gesamten Objekts ermöglicht.

Schreiben mit parallelen Anfragen

Auf ähnliche Weise kann eine einzelne große Datei in S3 geschrieben werden, indem sie in Teilen parallel hochgeladen wird, indem Sie mehrteilig Hochladen. Jeder Teil kann außerdem flexibel angehalten/fortgesetzt und bei Fehlern erneut versucht werden. Der mehrteilige Upload ist ein 3-stufiger Prozess:

  1. Upload initiieren Wenn Sie einen mehrteiligen Upload initiieren, stellt AWS S3 eine Upload-ID zur Verfügung, eine eindeutige Kennung, mit der die Teile hochgeladen werden.
  2. Laden Sie die Teile hoch Jedes Teil wird mit der angegebenen Upload-ID hochgeladen. Pause/Fortsetzen und Wiederholungen werden je nach Bedarf verwendet.
  3. Schließen Sie den Upload ab Sobald alle Teile hochgeladen sind, kann die Upload-ID als abgeschlossen markiert werden. S3 fügt dann die Teile in der richtigen Reihenfolge zu einem einzigen Objekt zusammen.

Zeitüberschreitung & Wiederholungen

In hochgradig verteilten Systemen wie S3 ist ein kleiner Prozentsatz an Verbindungsverzögerungen und -ausfällen zu erwarten. S3 verfügt über Mechanismen, um eine Überbeanspruchung der Ressourcen zu erkennen und entsprechend zu antworten. HTTP 503 Verlangsamung und HTTP 500 sind bei hohen Anfrageraten zu erwarten. Um widerstandsfähige Architekturen aufzubauen, können diese 2 Techniken angewendet werden:

  • Wiederholungen Wiederholungen ermöglichen es Clients, sich von Verbindungsfehlern zu erholen, indem sie die gleiche Anfrage erneut senden. Es empfiehlt sich, eine Wiederholungslogik in die Anwendungen einzubauen. Wenn Überlastung zu Verbindungsfehlern führt, kann ein aggressiver Wiederholungsversuch die Überlastung weiter erhöhen und die Wiederherstellung verzögern. Um dies zu vermeiden, sollte die Wiederholung eine zunehmende Verzögerung bei jedem weiteren Wiederholungsversuch beinhalten. Außerdem sollte eine zufällige Verzögerung hinzugefügt werden, um zu verhindern, dass mehrere Clients gleichzeitig einen Wiederholungsversuch nach einem ähnlichen Muster unternehmen, wodurch die Wirkung der Verzögerung verringert wird.
  • Zeitüberschreitungen Anfragen während des Fluges verbrauchen Ressourcen, wie z.B. Speicher und Netzwerkverbindungen. Lange Antwortzeiten können zu einer übermäßigen Inanspruchnahme von Ressourcen führen. Clients sollten Timeouts verwenden, um Anfragen mit langen Antwortzeiten zu beenden, um diese Ressourcen freizugeben.

Wie diese 2 Techniken am besten implementiert werden, hängt von Ihrer S3-Arbeitslast ab. Parameter, die Sie bei der Ermittlung des optimalen Timeouts und der Anzahl und Verzögerung der Wiederholungsversuche berücksichtigen sollten, sind:

  • Anfragen mit fester Größe vs. Anfragen mit variabler Größe?
  • Fail-Fast oder Fail-Slow?
  • Benutzerorientiert oder Job?
  • Zuverlässiges Netzwerk mit geringer Latenz oder unzuverlässige Konnektivität?

S3 Wählen

S3 Select ist eine Funktion, mit der Sie mithilfe von SQL-Ausdrücken bestimmte Daten aus dem Inhalt eines Objekts abrufen können. Indem Sie die Datenmenge, die S3 überträgt, reduzieren, minimieren Sie die Übertragungskosten und verbessern die Leistung.

S3 Select funktioniert mit Objekten, die im CSV-, JSON- und Apache Parquet-Format gespeichert sind. Es funktioniert auch mit CSV- und JSON-Objekten, die mit GZip und BZip2 komprimiert wurden. Die SQL-Ergebnismenge kann entweder in CSV oder JSON vorliegen, verschachtelte Daten nur in JSON.

Das folgende Beispiel beschreibt einen Datensatz mit relationalen Daten, für den eine SQL-Abfrage den Vor- und Nachnamen der Person mit der Kennung '9346' zurückgibt. Dieses Beispiel demonstriert das Konzept, wie ein großer Datensatz innerhalb von Millisekunden in der Anwendung über SDKs oder über die AWS-Konsole ad hoc abgefragt werden kann.

CloudFront

CloudFront ist ein globales Content Delivery Network (CDN), das Inhalte mit geringer Latenz und hoher Übertragungsgeschwindigkeit an die Zuschauer liefert. CloudFront verwendet Randbereiche um Kopien Ihrer S3-Inhalte an einem Ort zwischenzuspeichern, der dem Betrachter am nächsten liegt. Die zwischengespeicherten Inhaltsanfragen und -antworten legen einen kürzeren Weg zurück als zu Ihrer S3-Region und bieten daher eine bessere Leistung. Nicht zwischengespeicherte Inhalte werden von CloudFront aus S3 abgerufen und bei Bedarf zwischengespeichert.

CloudFront verwendet mehrere Optimierungen, um eine hohe Leistung zu erzielen, wie TLS-Sitzungswiederaufnahme, TCP Fast Open, OCSP Stapling, S2N und Request Collapsing. Es werden HTTP/1.0, HTTP/1.1, HTTP/2 und HTTP/3 unterstützt.

Außerdem kann der direkte Zugriff auf S3 eingeschränkt werden, so dass nur der Zugriff auf die Inhalte von CloudFront möglich ist. Dies kann mit der Option Herkunft Zugang Identität (OAI). Die HTTPS-Verschlüsselung kann auch erzwungen werden, wenn eine Verschlüsselung während der Übertragung zwischen CloudFront und dem Betrachter erforderlich ist.

S3 Transfer Beschleunigung

Transfer Acceleration ermöglicht schnelle, einfache und sichere Übertragungen von Dateien über große Entfernungen zwischen dem Client und dem S3-Bucket. Transfer Acceleration nutzt das globale Netzwerk der Edge-Standorte von CloudFront, indem es die Daten so nah wie möglich an den Edge weiterleitet, so dass sie eine kürzere Strecke im öffentlichen Internet und mehrheitlich im AWS Backbone des optimierten Netzwerks zurücklegen.

Transfer Acceleration verwendet Standard-TCP- und HTTP/HTTPS-Ports, so dass keine spezielle Firewall-Konfiguration erforderlich ist. Transfer Acceleration ist ideal für die Übertragung von Gigabytes bis Terabytes an Daten über Kontinente hinweg oder für den Upload in einen zentralen Bucket aus der ganzen Welt.

Wenn Ihre Objekte im Megabyte-Bereich liegen, sollten Sie CloudFront anstelle von Transfer Acceleration verwenden.

Jedes Mal, wenn Transfer Acceleration zum Hochladen von Daten verwendet wird, prüft es intern, ob es eine Beschleunigung im Vergleich zur herkömmlichen S3-Übertragung bieten kann. Wenn es keine Vorteile gibt, werden die Daten über die normale S3-Übertragung übertragen und es entstehen keine zusätzlichen Kosten.

AWS bietet ein Tool zum Vergleich der Übertragungsbeschleunigungso dass ein Vergleich zwischen einer beschleunigten und einer nicht-beschleunigten S3-Übertragung durchgeführt werden kann. Dieses Tool verwendet mehrteilig Upload, um eine Datei vom Browser an verschiedene S3-Regionen mit und ohne Beschleunigung zu übertragen.

Um die Übertragungsgeschwindigkeit mit Ihrem Bucket und Ihrer Region zu testen, ändern Sie die URL wie folgt:

CloudWatch

Um eine optimale S3-Leistung zu erreichen, ist es wichtig, den nötigen Einblick in die S3-Leistung zu erhalten. CloudWatch ist ein Überwachungs- und Beobachtungsdienst, der Anwendungen und Dienste überwacht und einen einheitlichen Überblick über den Betriebszustand bietet.

CloudWatch verwendet Metriken und Dimensionen, um die notwendige Visualisierung des Betriebszustands zu liefern. Metriken stellen einen zeitlich geordneten Satz von Datenpunkten dar, z. B. die Anzahl der Anfragen an einen S3-Bucket. Dimensionen stellen ein Schlüssel-Wert-Paar der Identität der Metrik dar, z. B. ApplicationEnvironment=Test. Dimensionen können für die Filterung der Metriken verwendet werden.

Metriken und Dimensionen werden in Form von Tabellen und Diagrammen in einem Dashboard visualisiert oder für Alarme verwendet, um Mitarbeiter zu benachrichtigen oder einen Alarmreaktionsprozess zu automatisieren.

Die von S3 bereitgestellten Schlüsselmetriken sind in folgende Gruppen unterteilt:

  • Lagerung Speichermetriken überwachen die Anzahl der Objekte und den verbrauchten Speicherplatz. Sie sind standardmäßig aktiviert und verursachen keine zusätzlichen Kosten.
  • Anfragen Anfragemetriken überwachen S3-Anfragen, wie z.B. das Volumen von Lese- und Schreibanfragen
  • Replikation Die Replikationsmetriken überwachen die Gesamtzahl der S3-API-Operationen, die zur Replikation anstehen, die Gesamtgröße der Objekte, die zur Replikation anstehen, und die maximale Replikationszeit zur Zielregion.

Möchten Sie mehr über Skalierbarkeit und Sicherheit bei S3 erfahren? Schauen Sie sich diesen Blog von meinem Kollegen Steyn an!

Verfasst von

Sidney Borrego y Diaz

I'm an AWS enthusiast who likes to evangelize about how I think things should be done in AWS while trying to keep the balance between the real world and my AWS Valhalla.

Contact

Let’s discuss how we can support your journey.