Leistungsdesignmuster für Amazon S3 - Amazon Simple Storage Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Leistungsdesignmuster für Amazon S3

Beim Entwurf von Anwendungen zum Upload und Abruf von Objekten von Amazon S3 sollten Sie unsere bewährten Designmuster verwenden, um eine optimale Leistung für Ihre Anwendung zu erzielen. Dazu bieten wir Ihnen Anleitungen zur Leistung von Amazon S3 für Überlegungen zur Planung Ihrer Anwendungsarchitektur an.

Zur Optimierung der Leistung können Sie die folgenden Designmuster verwenden.

Verwendung von Caching für Inhalte mit häufigen Zugriffen

Viele Anwendungen, die Daten in Amazon S3 speichern, stellen einen „Arbeitssatz“ von Daten bereit, der wiederholt von Benutzern angefordert wird. Wenn ein Workload wiederholte GET-Anfragen für eine gemeinsame Gruppe von Objekten sendet, können Sie einen Cache wie Amazon CloudFront, Amazon oder verwenden ElastiCache, um die Leistung AWS Elemental MediaStorezu optimieren. Die erfolgreiche Cache-Nutzung kann zu niedriger Latenz und zu hohen Datenübertragungsraten führen. Anwendungen, die die Zwischenspeicherung verwenden, senden auch weniger direkte Anforderungen an Amazon S3, was zur Senkung der Anfragekosten beitragen kann.

Amazon CloudFront ist ein schnelles Content Delivery Network (CDN), das Daten aus Amazon S3 in einer Vielzahl von geografisch verteilten Präsenzpunkten () transparent zwischenspeichert. PoPs Wenn auf Objekte aus mehreren Regionen oder über das Internet zugegriffen werden kann, CloudFront können Daten in der Nähe der Benutzer zwischengespeichert werden, die auf die Objekte zugreifen. Dies kann zu hoher Leistung bei der Bereitstellung beliebter Amazon S3-Inhalte führen. Informationen dazu CloudFront finden Sie im Amazon CloudFront Developer Guide.

Amazon ElastiCache ist ein verwalteter In-Memory-Cache. Mit ElastiCache können Sie EC2 Amazon-Instances bereitstellen, die Objekte im Speicher zwischenspeichern. Dieses Caching führt zur Reduzierung der GET-Latenz im Bereich mehrerer Größenordnungen und zu einer erheblichen Zunahme des Downloaddurchsatzes. Um dies zu verwenden ElastiCache, ändern Sie die Anwendungslogik so, dass sowohl der Cache mit Hot-Objekten gefüllt wird als auch der Cache auf Hot-Objekte überprüft wird, bevor Sie sie von Amazon S3 anfordern. Beispiele für die Verwendung ElastiCache zur Verbesserung der Amazon S3-GET-Leistung finden Sie im Blogbeitrag Turbocharge Amazon S3 with Amazon ElastiCache for Redis.

AWS Elemental MediaStore ist ein Caching- und Inhaltsverteilungssystem, das speziell für Video-Workflows und Medienbereitstellung von Amazon S3 entwickelt wurde. MediaStore bietet end-to-end Speicher APIs speziell für Videos und wird für leistungsabhängige Video-Workloads empfohlen. Informationen zu MediaStore finden Sie im AWS Elemental MediaStore Benutzerhandbuch.

Timeouts und Wiederholungsversuche für latzenzsensitive Anwendungen

Es gibt bestimmte Situationen, in denen eine Anwendung eine Antwort von Amazon S3 erhält, die darauf hinweist, dass ein Wiederholungsversuch erforderlich ist. Amazon S3 ordnet Bucket- und Objektnamen den damit verbundenen Objektdaten zu. Wenn eine Anwendung hohe Anforderungsraten generiert (typischerweise dauerhaft über 5.000 Anforderungen pro Sekunde für eine kleine Zahl von Objekten), erhält sie möglicherweise HTTP 503 Slowdown-Antworten. Wenn solche Fehler auftreten, implementiert jedes AWS -SDK eine automatische Wiederholungsversuch-Logik mit exponentiellem Backoff. Wenn Sie kein AWS -SDK verwenden, sollten Sie eine Wiederholungsversuch-Logik implementieren, wenn Sie den HTTP-Fehler 503 erhalten. Informationen zu Back-Off-Techniken finden Sie unter Verhalten bei Wiederholungsversuchen im Referenzhandbuch AWS SDKs und im Tools-Referenzhandbuch.

Amazon S3 wird automatisch in Reaktion auf andauernde neue Anforderungsraten skaliert und optimiert so die Leistung in dynamischer Weise. Während Amazon S3 Optimierungen für eine neue Anforderungsrate durchführt, erhalten Sie temporär HTTP 503-Anforderungsantworten, bis die Optimierung abgeschlossen ist. Nachdem Amazon S3 die Leistung intern für die neue Anfragerate optimiert hat, werden alle Anfragen generell ohne Wiederholungsversuche bereitgestellt.

Für latenzsensitive Anwendungen empfiehlt Amazon S3 Nachverfolgung und aggressive Wiederholungsversuche bei langsameren Vorgängen. Wenn Sie eine Anfrage wiederholen, empfehlen wir die Verwendung einer neuen Verbindung mit Amazon S3 und die Durchführung eines neuen DNS-Lookup-Vorgangs.

Wenn Sie sehr große Anforderungen unterschiedlicher Größe (beispielsweise mit mehr als 128 MB) durchführen, sollten Sie den erreichten Durchsatz nachverfolgen und für die langsamsten 5 Prozent der Anforderungen Wiederholungsversuche durchführen. Wenn Sie kleinere Anforderungen (etwa unter 512 KB) durchführen, bei denen die mittleren Latenzen oft im zweistelligen Millisekundenbereich liegen, ist es sinnvoll, nach zwei Sekunden eine GET- oder PUT-Operation zu wiederholen. Wenn weitere Wiederholungsversuche erforderlich sind, ist ein Backoff die beste Lösung. So empfehlen wir beispielsweise die Ausgabe eines Wiederholungsversuchs nach zwei Sekunden und eines zweiten Versuchs nach weiteren vier Sekunden.

Wenn Ihre Anwendung Anfragen mit fester Größe an Amazon S3 sendet, sollten Sie konsistentere Reaktionszeiten für diese einzelnen Anfragen erwarten. In diesem Fall ist es eine einfache Strategie, das langsamste Prozent der Anforderungen zu identifizieren und diese zu wiederholen. Selbst ein einziger Wiederholungsversuch ist oft erfolgreich für die Reduzierung der Latenz.

Wenn Sie AWS Key Management Service (AWS KMS) für die serverseitige Verschlüsselung verwenden, finden Sie unter Kontingente im AWS Key Management Service Entwicklerhandbuch Informationen zu den Anforderungsraten, die für Ihren Anwendungsfall unterstützt werden.

Horizontale Skalierung und Anforderungsparallelisierung für hohen Durchsatz

Amazon S3 ist ein sehr großes verteiltes System. Um diese Größe zu nutzen, sollten Sie parallele Anforderungen horizontal zu den Amazon S3-Service-Endpunkten skalieren. Zusätzlich zur Verteilung der Anforderungen in Amazon S3 hilft dieses Skalierungskonzept dabei, die Last über mehrere Pfade im Netzwerk zu verteilen.

Für Übertragungen mit hohem Durchsatz empfiehlt Amazon S3 die Verwendung von Anwendungen mit mehreren Verbindungen für die parallele Ausführung von GET- und PUT-Aktionen. Dies wird beispielsweise von Amazon S3 Transfer Manager im AWS Java SDK unterstützt, und die meisten anderen AWS SDKs bieten ähnliche Konstrukte. Für manche Anwendungen können Sie parallele Verbindungen dadurch erreichen, dass Sie Anforderungen gleichzeitig in verschiedenen Anwendungs-Threads oder in verschiedenen Anwendungs-Instances starten. Das beste Konzept hängt von Ihrer Anwendung und der Struktur der Objekte ab, auf die Sie zugreifen.

Sie können das verwenden AWS SDKs , um GET- und PUT-Anfragen direkt zu stellen, anstatt die Verwaltung von Übertragungen im AWS SDK zu verwenden. Dieses Konzept ermöglicht die direktere Abstimmung Ihrer Workloads, bei gleichzeitiger Nutzung des SDK-Supports für Wiederholungsversuche und den Umgang mit eventuell auftretenden HTTP 503-Antworten. Wenn Sie große Objekte innerhalb einer Region von Amazon S3 nach Amazon herunterladen, empfehlen wir generell EC2, gleichzeitige Anfragen für Bytebereiche eines Objekts mit einer Granularität von 8—16 MB zu stellen. Stellen Sie eine gleichzeitige Anfrage für jeweils MB/s 85—90% des gewünschten Netzwerkdurchsatzes. Um 10 Gb/s Netzwerkschnittstellenkarten (NIC) zu überlasten, könnten Sie etwa 15 gleichzeitige Anfragen über separate Verbindungen verwenden. Sie können die Anzahl der gleichzeitigen Anfragen auf mehr Verbindungen hochskalieren, um sie schneller auszulasten NICs, z. B. 25 oder 100. Gb/s Gb/s NICs

Die Messung der Leistung ist wichtig für die Einstellung der Anzahl der gleichzeitig auszugebenden Anforderungen. Wir empfehlen, mit jeweils einer einzigen Anforderung zu beginnen. Messen Sie die erreichte Netzwerkbandbreite und die Nutzung weiterer Ressourcen durch Ihre Anwendung bei der Verarbeitung der Daten. Sie können dann die Engpassressource (die Ressource mit der höchsten Nutzung) identifizieren und so die Anzahl der Anforderungen ermitteln, die wahrscheinlich nützlich waren. z. B.: Wenn die Verarbeitung einzelner Anforderungen zu einer CPU-Nutzung von 25 Prozent führt, zeigt dies an, dass bis zu vier gleichzeitige Anforderungen möglich sind. Messungen sind sehr wichtig, und es lohnt sich, die Ressourcennutzung zu ermitteln, wenn die Anforderungsrate erhöht wird.

Wenn ihre Anwendung Anforderungen direkt an Amazon S3 mit der REST-API ausgibt, sollten Sie einen Pool von HTTP-Verbindungen verwenden und jede Verbindung für eine Serie von Anforderungen wiederverwenden. Die Vermeidung der Einrichtung von Verbindungen für jede Anforderung macht TCP-Slow-Starts und Secure Sockets Layer (SSL)-Handshakes bei jeder Anforderung überflüssig. Informationen zur Verwendung der REST-API finden Sie in der Amazon Simple Storage Service API-Referenz.

Schließlich ist es auch sinnvoll, auf den DNS zu achten und genau zu prüfen, ob Anfragen über einen großen Pool von Amazon S3-IP-Adressen verteilt werden. DNS-Anforderungen für Amazon S3 durchlaufen eine lange Liste von IP-Endpunkten. Das Caching von Resolvern oder Anwendungscode, der eine einzelne IP-Adresse wiederverwendet, profitiert nicht von der Adressendiversität und dem daraus resultierenden Lastenausgleich. Network Utility-Tools wie das netstat-Befehlszeilentool können die IP-Adressen anzeigen, die für die Kommunikation mit Amazon S3 verwendet werden, und wir bieten Anleitungen zu den zu verwendenden DNS-Konfigurationen. Weitere Informationen zu diesen Richtlinien finden Sie unter Senden von Anforderungen in der Amazon-S3-API-Referenz.

Optimierung für Workloads mit hoher Anforderungsrate

Verwenden von Amazon S3 Transfer Acceleration zur Beschleunigung geographisch disparater Datenübertragungen

Konfigurieren schneller, sicherer Dateiübertragungen mit Amazon S3 Transfer Acceleration ist effektiv bei der Minimierung oder Beseitigung der durch geographische Entfernung zwischen global verteilten Clients und einer regionalen Anwendung mit Amazon S3 verursachten Latenz. Transfer Acceleration verwendet die weltweit verteilten Edge-Standorte CloudFront für den Datentransport. Das AWS Edge-Netzwerk verfügt über Präsenzpunkte an mehr als 50 Standorten. Heute wird es verwendet, um Inhalte über Amazon Route 53 zu verteilen CloudFront und schnelle Antworten auf DNS-Anfragen zu geben.

Dazu hilft das Edge-Netzwerk bei der Beschleunigung von Datenübertragungen zu und aus Amazon S3. Es ist ideal für Anwendungen, die Daten über oder zwischen Kontinenten übertragen, eine schnelle Internetverbindung nutzen, große Objekte verwenden oder zahlreiche Inhalte hochladen müssen. Sobald die Daten an einem Edge-Standort eingehen, werden sie über einen optimierten Netzwerkpfad an Ihren Amazon S3-Bucket weitergeleitet. Allgemein gilt: Je weiter Sie von einer Amazon S3-Region entfernt sind, um so größer ist die Geschwindigkeits-Verbesserung, die Sie von Transfer Acceleration erwarten können.

Sie können Transfer Acceleration auf neuen oder bestehenden Buckets einrichten. Sie können einen separaten Amazon S3 Transfer Acceleration Acceleration-Endpunkt verwenden, um die AWS Edge-Standorte zu verwenden. Die beste Möglichkeit zur Prüfung, ob Transfer Acceleration die Client-Anfrageleistung erhöht, ist die Verwendung des Amazon S3-Transfer-Acceleration-Speed-Comparison-Tools. Netzwerkkonfigurationen und Bedingungen variieren von zeit zu Zeit und von Standort zu Standort. Sie werden daher nur für Übertragungen belastet, bei denen Amazon S3 Transfer Acceleration Ihre Upload-Leistung potentiell verbessern kann. Informationen zur Verwendung von Transfer Acceleration mit anderen AWS SDKs finden Sie unterAktivieren und Verwenden von S3 Transfer Acceleration.

Optimierung für Workloads mit hoher Anforderungsrate

Anwendungen, die hohe Anforderungsraten an Amazon S3 generieren, benötigen spezifische Entwurfsmuster, um eine optimale Leistung zu erzielen. Wenn Ihre Anwendung konsistent mehr als 3.500 PUT/COPY/POST/DELETE or 5,500 GET/HEAD Anfragen pro Sekunde und Präfix generiert, sollten Sie Strategien zur Verteilung von Anfragen und zur Handhabung des Skalierungsverhaltens implementieren.

Amazon S3 skaliert automatisch, um höheren Anforderungsraten Rechnung zu tragen. Diese Skalierung erfolgt jedoch schrittweise. Während des Skalierungsprozesses erhalten Sie möglicherweise HTTP 503-Antworten (Slow Down). Diese Antworten sind temporär und deuten darauf hin, dass Amazon S3 seine internen Systeme für Ihr neues Anforderungsmuster optimiert. Sobald die Skalierung abgeschlossen ist, werden Ihre Anfragen ohne Drosselung bearbeitet.

Um die Leistung für Workloads mit hoher Anforderungsrate zu optimieren, sollten Sie die folgenden Strategien in Betracht ziehen:

  • Anfragen auf mehrere Präfixe verteilen — Verwenden Sie ein zufälliges oder sequentielles Präfixmuster, um Anfragen auf mehrere Partitionen zu verteilen. Anstatt beispielsweise sequentielle Objektnamen wie zu verwenden, verwenden Sie zufällige Präfixe wielog-2024-01-01.txt. a1b2/log-2024-01-01.txt Dies hilft Amazon S3, die Last effektiver zu verteilen.

  • Implementieren Sie exponentielles Backoff für 503-Fehler — Wenn Sie HTTP 503-Antworten erhalten, implementieren Sie eine Wiederholungslogik mit exponentiellem Backoff. Beginnen Sie mit einer kurzen Verzögerung und erhöhen Sie die Wartezeit zwischen den Wiederholungen schrittweise. Sie AWS SDKs enthalten eine integrierte Wiederholungslogik, die dies automatisch handhabt.

  • Anforderungsmuster überwachen — Verwenden Sie CloudWatch Amazon-Metriken, um Ihre Anforderungs- und Fehlerquoten zu überwachen. Achten Sie besonders auf die 5xx-Fehlermetriken, die darauf hinweisen können, wann sich Ihre Anwendung den aktuellen Skalierungsgrenzen nähert oder diese überschreitet.

  • Schrittweise Erhöhung der Anforderungsraten — Wenn Sie neue Anwendungen starten oder die Anforderungsraten deutlich erhöhen, sollten Sie Ihren Traffic im Laufe der Zeit schrittweise erhöhen, anstatt sofort Spitzenraten zu erreichen. Dadurch kann Amazon S3 proaktiv skalieren und die Wahrscheinlichkeit einer Drosselung wird reduziert.

  • Verwenden Sie mehrere Verbindungen — Verteilen Sie Ihre Anfragen auf mehrere HTTP-Verbindungen, um den Durchsatz zu maximieren und die Auswirkungen einzelner Verbindungsprobleme zu reduzieren.

Für Anwendungen, die eine gleichbleibend hohe Leistung erfordern, sollten Sie Amazon S3 Express One Zone in Betracht ziehen, das für Anwendungen konzipiert ist, die Latenzen im einstelligen Millisekundenbereich erfordern und Hunderttausende von Anfragen pro Sekunde unterstützen können. Weitere Informationen finden Sie unter S3 Express One Zone.