Leistungsentwurfsmuster 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.

Leistungsentwurfsmuster 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 Leistungsrichtlinien für Amazon S3 für Überlegungen zur Planung Ihrer Anwendungsarchitektur an.

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

Verwenden von Caching für Inhalte, auf die häufig zugegriffen wird

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 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 Netzwerk zur Bereitstellung von Inhalten (CDN), das Daten aus Amazon S3 transparent in einer Vielzahl von geografisch verteilten Präsenzpunkten () 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 zu einer Verringerung der GET Latenz um ein Vielfaches und zu einer erheblichen Steigerung des Download-Durchsatzes. 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 GET Leistung von Amazon S3 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. Weitere Informationen dazu MediaStore finden Sie im AWS Elemental MediaStore Benutzerhandbuch.

Timeouts und Wiederholungsversuche für latenzempfindliche 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 (in der Regel anhaltende Raten von über 5.000 Anfragen pro Sekunde für eine kleine Anzahl von Objekten), erhält sie möglicherweise 503 verlangsamte Antworten. HTTP Wenn diese Fehler auftreten, AWS SDK implementiert jede Methode eine automatische Wiederholungslogik mit exponentiellem Backoff. Wenn Sie keine verwenden AWS SDK, sollten Sie beim Empfang des 503-Fehlers eine Wiederholungslogik implementieren. HTTP Informationen zu Back-Off-Techniken finden Sie unter Verhalten bei Wiederholungsversuchen im Referenzhandbuch AWS SDKsund 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 intern für eine neue Anforderungsrate optimiert, erhalten Sie vorübergehend HTTP 503 Antworten auf Anfragen, 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 erneut versuchen, empfehlen wir, eine neue Verbindung zu Amazon S3 zu verwenden und eine neue DNS Suche durchzuführen.

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 Anfragen stellen (z. B. weniger als 512 KB), bei denen die mittleren Latenzen oft im Bereich von mehreren zehn Millisekunden liegen, ist es eine gute Richtlinie, einen OR-Vorgang nach 2 Sekunden erneut zu versuchen. GET PUT 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 Parallelisierung von Anfragen 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, die mehrere Verbindungen zu GET oder PUT Daten parallel verwenden. Dies wird beispielsweise von Amazon S3 Transfer Manager in AWS Java unterstütztSDK, 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 das verwenden AWS SDKs, um PUT Anfragen direkt GET auszustellen, anstatt die Verwaltung von Übertragungen in der zu verwenden. AWS SDK Mit diesem Ansatz können Sie Ihre Arbeitslast direkter anpassen und gleichzeitig von der SDK Unterstützung für Wiederholungsversuche und der Bearbeitung aller HTTP 503 Antworten profitieren, die möglicherweise auftreten. Wenn Sie große Objekte innerhalb einer Region von Amazon S3 nach Amazon herunterladen, empfehlen wir generellEC2, 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 85—90. MB/s of desired network throughput. To saturate a 10 Gb/s network interface card (NIC), you might use about 15 concurrent requests over separate connections. You can scale up the concurrent requests over more connections to saturate faster NICs, such as 25 Gb/s or 100 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. Wenn beispielsweise die Bearbeitung einer Anfrage nach der anderen zu einer CPU Auslastung von 25 Prozent führt, deutet dies darauf hin, dass bis zu vier gleichzeitige Anfragen berücksichtigt werden können. Messungen sind sehr wichtig, und es lohnt sich, die Ressourcennutzung zu ermitteln, wenn die Anforderungsrate erhöht wird.

Wenn Ihre Anwendung Anfragen direkt an Amazon S3 sendet, empfehlen wir RESTAPI, einen Pool von HTTP Verbindungen zu verwenden und jede Verbindung für eine Reihe von Anfragen wiederzuverwenden. Durch die Vermeidung einer Verbindungseinrichtung pro Anfrage entfällt die Notwendigkeit, bei jeder Anfrage TCP Slow-Start- und Secure Sockets Layer (SSL) -Handshakes durchzuführen. Informationen zur Verwendung von finden Sie in der Amazon Simple Storage Service API Reference. REST API

Schließlich lohnt es sich, darauf zu achten DNS und zu überprüfen, ob Anfragen über einen großen Pool von Amazon S3 S3-IP-Adressen verteilt werden. DNSAbfragen für Amazon S3 durchlaufen eine große 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. Netzwerk-Utility-Tools wie das netstat Befehlszeilentool können die IP-Adressen anzeigen, die für die Kommunikation mit Amazon S3 verwendet werden, und wir stellen Richtlinien für die zu verwendenden DNS Konfigurationen bereit. Weitere Informationen zu diesen Richtlinien finden Sie unter Anfragen stellen in der Amazon S3 API S3-Referenz.

Verwenden von Amazon S3 Transfer Acceleration zur Beschleunigung geografisch verteilter 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 nutzt die global 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.