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 Leistungsanleitungen 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“ der Daten bereit, der von Benutzern häufig angefragt wird. Wenn ein Workload wiederholte GET-Anforderungen für einen gemeinsamen Satz von Objekten sendet, können Sie einen Cache wie Amazon CloudFront, Amazon ElastiCache oder verwenden, AWS Elemental MediaStore um die Leistung zu 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 großen Menge geografisch verteilter Points of Presence () transparent zwischenspeichertPoPs. Wenn auf Objekte aus mehreren Regionen oder über das Internet zugegriffen werden kann, CloudFront erlaubt , dass 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. Weitere Informationen zu CloudFrontfinden Sie im Amazon- CloudFront Entwicklerhandbuch.

Amazon ElastiCache ist ein verwalteter In-Memory-Cache. Mit können ElastiCacheSie Amazon EC2-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 zu verwenden ElastiCache, ändern Sie die Anwendungslogik, um sowohl den Cache mit aktiven Objekten zu füllen als auch den Cache auf aktive Objekte zu überprüfen, bevor Sie sie von Amazon S3 anfordern. Beispiele für die Verwendung von ElastiCache zur Verbesserung der Leistung von Amazon S3 GET finden Sie im Blogbeitrag Turbo Charge Amazon S3 with Amazon ElastiCache for Redis .

AWS Elemental MediaStore ist ein Zwischenspeicherungs- und Inhaltsverteilungssystem, das speziell für Videoworkflows und die Medienbereitstellung von Amazon S3 entwickelt wurde. MediaStore stellt end-to-end Speicher-APIs speziell für Videos bereit und wird für leistungsempfindliche Video-Workloads empfohlen. Weitere Informationen zu MediaStorefinden 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. Weitere Informationen zu Back-off-Techniken finden Sie unter Wiederholversuche bei Fehlern und Exponentielles Backoff in AWS im Allgemeine Amazon Web Services-Referenz.

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 Limits 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 Anwendungsthreads oder in verschiedenen Anwendungsinstances starten. Das beste Konzept hängt von Ihrer Anwendung und der Struktur der Objekte ab, auf die Sie zugreifen.

Sie können die - AWS SDKs verwenden, um GET- und PUT-Anfragen direkt auszugeben, anstatt die Verwaltung von Übertragungen im AWS SDK zu nutzen. 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. Generell gilt: Wenn Sie in einer Region große Objekte von Amazon S3 zu Amazon EC2 herunterladen, sollten Sie gleichzeitige Anfragen für Bytebereiche eines Objekts in der Größe von 8-16 MB starten. Starten Sie eine gleichzeitige Anforderung für jeweils 85-90 MB/s des gewünschten Netzwerkdurchsatzes. Zur Ausnutzung einer Netzwerkschnittstellenkarte (NIC) mit 10 Gb/s können Sie etwa 15 gleichzeitige Anforderungen über separate Verbindungen durchführen. Sie können die gleichzeitigen Anforderungen über mehr Verbindungen hochfahren, um schnellere NICs zu nutzen, etwa 25 oder 100 Gb/s.

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 Anleitungen finden Sie unter Senden von Anforderungen.

Verwendung 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 global verteilten Edge-Standorte in 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 zu verteilen CloudFront und schnelle Antworten auf DNS-Abfragen an Amazon Route 53 bereitzustellen.

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-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 verschiedenen AWS SDKs finden Sie unter Aktivieren und Verwenden von S3 Transfer Acceleration.