Richtlinien für die Anforderungsrate und Zugriffsverteilung

Cloud Storage ist ein in hohem Maße skalierbarer Dienst, der Technologie zur automatischen Skalierung verwendet, um sehr hohe Anforderungsraten zu erreichen. Auf dieser Seite sind Richtlinien zur Optimierung der Skalierung und Leistung von Cloud Storage aufgeführt.

Automatische Skalierung

Cloud Storage ist ein Multi-Tenant-Dienst, das heißt, die Nutzer teilen sich die gleichen zugrunde liegenden Ressourcen. Für den bestmöglichen Einsatz dieser gemeinsam genutzten Ressourcen verfügen Buckets über eine anfängliche Eingangs-/Ausgangskapazität von etwa 1.000 Schreibanfragen und 5.000 Leseanfragen pro Sekunde, was bei Objekten mit 1 MB im Monat im Durchschnitt 2,5 PB für Schreib- und 13 PB für Leseanfragen entspricht. Mit zunehmender Anforderungsrate für einen bestimmten Bucket erhöht Cloud Storage automatisch die Eingangs-/Ausgangskapazität für diesen Bucket, indem die anfallende Last auf mehrere Server verteilt wird.

Lastenumverteilungszeit

Wenn sich ein Bucket dem Maximum seiner Eingangs/-Ausgangskapazität nähert, erkennt Cloud Storage dies normalerweise innerhalb von Minuten und verteilt die Last entsprechend auf mehr Server. Folglich ergeben sich möglicherweise vorübergehende Einschränkungen, wenn sich die Anforderungsrate für Ihren Bucket schneller erhöht als Cloud Storage diese Umverteilung vornehmen kann. Insbesondere sind eine höhere Latenzzeit und Fehlerrate zu erwarten. Wie unten beschrieben lassen sich durch eine schrittweise Erhöhung der Anforderungsrate für Ihre Buckets derartige Latenzzeiten und Fehlerraten vermeiden.

Objektschlüsselindexierung

Cloud Storage unterstützt eine einheitliche Objektauflistung, sodass Nutzer problemlos Datenverarbeitungsabläufe über Cloud Storage ausführen können. Um eine einheitliche Objektauflistung zu erreichen, wird von Cloud Storage für jeden Bucket ein Index an Objektschlüsseln verwaltet. Dieser Index ist in lexikografischer Reihenfolge hinterlegt und wird immer dann aktualisiert, wenn Objekte auf einen Bucket geschrieben oder von diesem gelöscht werden. Das Hinzufügen und Löschen von Objekten, deren Schlüssel innerhalb eines kleinen Indexbereichs liegen, führt zu einem höheren Konfliktrisiko.

Cloud Storage erkennt solche Konflikte und verteilt die Last des betroffenen Indexbereichs auf mehrere Server. Ähnlich wie bei der Skalierung der Eingangs-/Ausgangskapazität eines Buckets sollten Sie beim Zugriff auf einen neuen Indexbereich, beispielsweise wenn Objekte mit einem neuen Präfix geschrieben werden, die Anforderungsrate wie unten beschrieben schrittweise erhöhen. Andernfalls können vorübergehend höhere Latenzzeiten und Fehlerraten auftreten.

Best Practices

Die folgenden Abschnitte enthalten Best Practices zum Erhöhen der Anforderungsrate, zur Auswahl der Objektschlüssel und zur Verteilung von Anfragen, um vorübergehende Einschränkungen bei Ihrem Bucket zu vermeiden.

Anforderungsrate schrittweise erhöhen

Um sicherzustellen, dass die automatische Skalierung von Cloud Storage immer die beste Leistung bietet, sollten Sie Ihre Anforderungsrate für jeden Bucket, der seit mehreren Wochen nicht mit einer hohen Anforderungsrate genutzt wurde oder über einen neuen Bereich an Objektschlüsseln verfügt, schrittweise erhöhen. Wenn Ihre Anforderungsrate weniger als 1.000 Schreibanfragen oder 5.000 Leseanfragen pro Sekunde beträgt, ist keine Erhöhung erforderlich. Wenn Ihre Anforderungsrate diese Obergrenzen voraussichtlich überschreiten wird, sollten Sie mit einer Rate unterhalb oder nahe dieser Obergrenze beginnen und sie keinesfalls schneller als alle 20 Minuten verdoppeln.

Treten Probleme wie erhöhte Latenzzeiten und Fehlerraten auf, stoppen Sie zeitweise die Erhöhung oder verringern Sie vorübergehend die Anforderungsrate, um Cloud Storage mehr Zeit für die Skalierung Ihres Buckets zu geben. Sie sollten den exponentiellen Backoff verwenden, um Ihre Anfragen noch einmal zu senden, wenn Cloud Storage Fehler mit einem Antwortcode des Typs 5xx oder 429 zurückgibt.

Eine Namenskonvention verwenden, mit der die Last gleichmäßig über die Schlüsselbereiche verteilt wird

Die automatische Skalierung eines Indexbereichs kann durch die Verwendung sequenzieller Namen, zum Beispiel Objektschlüsseln, die auf einer Reihe von Zahlen oder Zeitstempeln basieren, verlangsamt werden. Dies geschieht, weil Anfragen fortlaufend in einen neuen Indexbereich verschoben werden, wodurch die Umverteilung der Last schwieriger und weniger wirksam wird.

Um eine anhaltend hohe Anforderungsrate zu erreichen, sollten Sie keine sequenziellen Namen verwenden. Durch vollkommen zufällige Objektnamen erhalten Sie die beste Lastenverteilung. Falls Sie eine sequenzielle Nummerierung oder einen Zeitstempel als Teil Ihrer Objektnamen verwenden möchten, führen Sie für Ihre Objektnamen einen Zufallsfaktor ein, indem Sie vor der Sequenznummer oder dem Zeitstempel einen Hash-Wert einfügen.

Wenn die ursprünglichen Objektnamen, die Sie verwenden möchten, wie folgt aussehen:

my-bucket/2016-05-10-12-00-00/file1
my-bucket/2016-05-10-12-00-00/file2
my-bucket/2016-05-10-12-00-01/file3
...

Dann können Sie den MD5-Hash des ursprünglichen Objektnamens berechnen und dem Objektnamen die ersten sechs Zeichen des Hash als Präfix hinzufügen. Der neue Objektname sieht so aus:

my-bucket/2fa764-2016-05-10-12-00-00/file1
my-bucket/5ca42c-2016-05-10-12-00-00/file2
my-bucket/6e9b84-2016-05-10-12-00-01/file3
...

Zufälligkeit nach einem gemeinsamen Präfix ist unter dem Präfix wirksam

Beachten Sie, dass der zufällig erstellte String nicht unbedingt am Anfang des Objektnamens stehen muss. Das Hinzufügen eines zufälligen Strings nach einem gemeinsamen Präfix ermöglicht ebenfalls eine automatische Skalierung. Die Wirkung ist jedoch auf dieses Präfix beschränkt, ohne dass der Rest des Buckets berücksichtigt wird.

Beispiel:

my-bucket/images/animals/4ce4c6af-6d27-4fa3-8a91-5701a8552705/1.jpg
my-bucket/images/animals/9a495e72-1d85-4637-a243-cbf3e4a90ae7/2.jpg
...
my-bucket/images/landscape/585356ac-ce89-47a8-bdd2-78a86b58fee6/1.jpg
my-bucket/images/landscape/2550ae5b-395e-4243-a29b-bbf5aece60ef/2.jpg
...
my-bucket/images/clouds/1.jpg
my-bucket/images/clouds/2.jpg
...

Die oben aufgeführte Benennung ermöglicht eine effiziente automatische Skalierung der Objekte in images/animals und images/landscape, aber nicht in images/clouds.

Zufälligkeit nach sequentiellen Präfixen ist weniger wirksam

Wie oben erwähnt, nützt die Verwendung eines nach dem Zufälligkeitsprinzip erstellten Strings nur bei der automatischen Skalierung unter diesem Präfix. Sobald die Anfragen zu einem neuen Präfix verschoben werden, profitieren Sie möglicherweise nicht mehr von den vorherigen automatischen Skalierungseffekten. Das ist besonders dann ein Problem, wenn die Präfixe einem sequentiellen Muster folgen.

Hier ein Beispiel, wenn Sie stündlich Dateien unter einem neuen zeitstempelbasierten Präfix schreiben:

my-bucket/2016-05-10-00/cf9a7b95-0d2e-4466-9596-840ff388ddbd
my-bucket/2016-05-10-00/f1e16a88-16b8-4c66-ba66-a225c87be80c
my-bucket/2016-05-10-00/646d8272-4a88-4dc2-b2d4-d537c778df41
...
my-bucket/2016-05-10-01/bdcba6de-ac25-4c27-8550-0d08f249e69d
my-bucket/2016-05-10-01/a32c867c-09a9-4d65-9668-ddd4ebe4138b
my-bucket/2016-05-10-01/d619485c-5243-4a4e-8ef3-0f7e1d26ce1d
...

Obwohl die automatische Skalierung dazu beiträgt, die Schreibrate unter einem Präfix mit der Zeit zu erhöhen, wird die Rate zu Beginn jeder Stunde zurückgesetzt. Dies führt zu einer suboptimalen Schreibrate und einer periodischen Erhöhung der Latenz und Fehlerrate. Wenn Sie im Laufe der Zeit in verschiedene Präfixe schreiben müssen, müssen Sie darauf achten, dass die neuen Präfixe gleichmäßig über den gesamten Schlüsselbereich verteilt sind, damit dieses Problem vermieden wird.

Bulk-Vorgänge zur gleichmäßigen Lastverteilung über Schlüsselbereiche neu ordnen

Manchmal möchten Sie mit Ihren Daten in Cloud Storage einen Bulk-Upload oder -Löschvorgang durchführen. In beiden Fällen haben Sie möglicherweise keine Kontrolle über die Objektnamen. Sie können jedoch die Reihenfolge festlegen, in der die Objekte hochgeladen oder gelöscht werden, um die höchstmögliche Schreib- oder Löschrate zu erreichen.

Dazu müssen Sie die Uploads oder Löschvorgänge auf mehrere Präfixe verteilen. Wenn beispielsweise jeder Ordner, den Sie hochladen möchten, viele Unterordner und Dateien enthält, ist es ratsam, einen parallelen Upload aus mehreren Ordnern durchzuführen und zufällig auszuwählen, welche Ordner und Dateien hochgeladen werden. Dadurch kann das System die Last gleichmäßiger über ganze Schlüsselbereiche verteilen. Somit erreichen Sie nach der ersten Erhöhung eine hohe Anfragerate.

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...