Was bedeutet die neue Ankündigung "S3 Erhöhte Anforderungsrate"?

12

Am 17. Juli 2018 wurde in einer offiziellen AWS-Ankündigung erklärt, dass die ersten Zeichen jedes S3-Objektschlüssels nicht mehr zufällig sortiert werden müssen, um eine maximale Leistung zu erzielen: https://aws.amazon.com/about-aws/whats-new / 2018/07 / amazon-s3-kündigt-erhöhte-anfragerate-leistung an /

Amazon S3 kündigt erhöhte Leistung bei der Anforderungsrate an

Veröffentlicht am: 17. Juli 2018

Amazon S3 bietet jetzt eine verbesserte Leistung und unterstützt mindestens 3.500 Anfragen pro Sekunde zum Hinzufügen von Daten und 5.500 Anfragen pro Sekunde zum Abrufen von Daten, wodurch ohne zusätzliche Kosten erhebliche Verarbeitungszeiten eingespart werden können. Jedes S3-Präfix kann diese Anforderungsraten unterstützen, sodass die Leistung auf einfache Weise erheblich gesteigert werden kann.

Anwendungen, die heute auf Amazon S3 ausgeführt werden, profitieren von dieser Leistungsverbesserung, ohne dass Änderungen vorgenommen werden. Kunden, die neue Anwendungen auf S3 erstellen, müssen keine Anwendungsanpassungen vornehmen, um diese Leistung zu erzielen. Die Unterstützung von Amazon S3 für parallele Anforderungen bedeutet, dass Sie Ihre S3-Leistung um den Faktor Ihres Computerclusters skalieren können, ohne Anpassungen an Ihrer Anwendung vornehmen zu müssen. Leistungsskalen pro Präfix, sodass Sie so viele Präfixe verwenden können, wie Sie parallel benötigen, um den erforderlichen Durchsatz zu erzielen. Die Anzahl der Präfixe ist unbegrenzt.

Durch diese Leistungssteigerung der S3-Anforderungsrate werden alle vorherigen Anweisungen zur zufälligen Zuordnung von Objektpräfixen entfernt, um eine schnellere Leistung zu erzielen. Das heißt, Sie können jetzt bei der S3-Objektbenennung logische oder sequenzielle Benennungsmuster verwenden, ohne dass dies Auswirkungen auf die Leistung hat. Diese Verbesserung ist jetzt in allen AWS-Regionen verfügbar. Weitere Informationen finden Sie im Amazon S3-Entwicklerhandbuch.

Das ist toll, aber auch verwirrend. Es heißt, dass jedes S3- Präfix diese Anforderungsraten unterstützen kann, was es einfach macht, die Leistung signifikant zu steigern

Da Präfixe und Begrenzer nur Argumente für die GET Bucket (List Objects)API sind, wenn der Inhalt von Buckets aufgelistet wird, kann es sinnvoll sein, über die Leistung beim Abrufen von Objekten "pro Präfix" zu sprechen. Jeder Aufruf von GET Bucket (List Objects)kann ein beliebiges Präfix und Trennzeichen auswählen, sodass Präfixe keine vordefinierte Entität sind.

Wenn mein Bucket beispielsweise die folgenden Objekte enthält:

a1/b-2
a1/c-3

Dann kann ich wählen, "/" oder "-" als Trennzeichen zu verwenden, wenn ich den Bucket-Inhalt aufführe, sodass ich meine Präfixe als entweder betrachten kann

a1/ 

oder

a1/b-
a1/c-

Da die GET ObjectAPI jedoch den gesamten Schlüssel verwendet, ist das Konzept eines bestimmten Präfixes oder Begrenzers für den Objektabruf nicht vorhanden. Kann ich also mit 5.500 Anfragen / Sek. Rechnen a1/oder alternativ mit 5.500 Anfragen / Sek. a1/b-Und 5.500 Anfragen / Sek. a1/c-?

Kann jemand erklären, was mit der Ansage gemeint ist, wenn sie ein bestimmtes Leistungsniveau (z. B. +5.500 Anfragen pro Sekunde zum Abrufen von Daten) für "jedes s3-Präfix" vorschlägt?

John Rees
quelle
Ich glaube, ich habe eine Erklärung dafür, aber ich freue mich darauf, ob ich eine Bestätigung finde. Ich vermute, es hat mit dem Algorithmus zur Aufteilung der Indexpartition zu tun, der automatisch und auf der Verkehrslast basiert ... und lexikalisch und nicht auf Hash basiert.
Michael - Sqlbot

Antworten:

9

Was hier eigentlich als Präfix bezeichnet wird, scheint eine zu starke Vereinfachung zu sein, die sich wirklich auf jede Partition des Bucket-Index bezieht. Der Index ist lexikalisch, sodass Aufteilungen basierend auf führenden Zeichen im Objektschlüssel erfolgen. Daher wird es als Präfix bezeichnet .

S3 verwaltet die Indexpartitionen automatisch und transparent, sodass die genaue Definition eines "Präfixes" hier eigentlich etwas ungenau ist: "Was auch immer S3 entscheidet, wird benötigt, um die Arbeitslast Ihres Buckets zu unterstützen." S3 teilt die Indexpartitionen als Reaktion auf die Arbeitslast auf, sodass zwei Objekte, die möglicherweise heute dasselbe "Präfix" haben, morgen unterschiedliche Präfixe haben können, die alle im Hintergrund ausgeführt werden.

Im Moment können a1 / a -... und a1 / b -... und a1 / c -... alle ein einzelnes Präfix sein. Werfen Sie jedoch genügend Verkehr in den Bucket, und S3 kann entscheiden, dass die Partition aufgeteilt werden soll, sodass morgen a1 / a- und a1 / b- in einem Präfix sein können, während a1 / c- in einem eigenen Präfix sein kann. (Das heißt, Schlüssel <a1 / c- befinden sich in einer Partition, Schlüssel> = a1 / c- befinden sich jetzt in einer anderen Partition.)

Wo und wann und insbesondere welcher Schwellenwert das Split-Verhalten auslöst, ist nicht dokumentiert, sondern scheint nur mit der Anzahl der Anforderungen und nicht mit der Anzahl oder Größe der Objekte in Beziehung zu stehen. Zuvor waren diese Partitionen auf jeweils einige Hundert Anforderungen pro Sekunde beschränkt, und dies wurde deutlich erhöht.

Michael - sqlbot
quelle
1
Sehr interessant und glaubwürdig. Da die Präfixe jedoch lastabhängig dynamisch sind, ist es mit Sicherheit bedeutungslos, ein bestimmtes Leistungsmaß „pro Präfix“ zuzuweisen. Wenn sich die Präfixe Ihres Buckets dynamisch ändern, gibt es kein zuverlässiges Leistungsmaß. Oder könnte ich vielleicht ableiten, dass sich Präfixe theoretisch dynamisch ändern sollten, bis ich 5.500 Req / Sek. Pro S3-Objekt erwarten kann?
John Rees
1
Das Leistungsmaß ist immer noch nützlich, da die Bucket-Skalierung in der Regel nur in eine Richtung erfolgt - nach oben und nicht nach unten. Die offensichtliche Absurdität der Skalierung auf ein einzelnes Objekt pro Partition scheint weitgehend zu verschwinden, wenn Sie erkennen, wie viel Geld AWS verdienen würde, wenn Sie für 5.000 + Anforderungen / s pro Objekt zahlen würden.
Michael - Sqlbot
1
Ja, ich war etwas umständlich mit dem einzelnen Objekt pro Partition. :-) Aber im Ernst, ich denke, das bedeutet, dass ich erwarten könnte, dass wenn mein 10000-Objekt-Bucket nur 10 beliebte Objekte enthält, S3 sich hoffentlich irgendwann neu partitionieren würde, bis jede der 10 5.000 Reqs / Sek. Bekommen könnte, während die anderen trotzen in ein paar großen Partitionen. Plausibel?
John Rees
2
Ich bin zuversichtlich, dass S3 sich der Arbeitsbelastung anpassen würde, ja. Die offizielle Richtlinie für hohen Datenverkehr auf der Anforderungsseite lautet, CloudFront wie bisher in Verbindung mit S3 zu verwenden, da CloudFront global verteilt ist und die Objekte an den Rändern zwischenspeichert, die den Zuschauern am nächsten sind, die sie anfordern. Aufgrund der Preisgestaltung hat das Hinzufügen von CloudFront zu S3 häufig im Wesentlichen keine Auswirkungen auf die Gesamtkosten (da S3 keine Bandbreite in Rechnung stellt, wenn die Anforderung von CloudFront eingeht, einen Cache-Fehler zu beheben).
Michael - sqlbot
Danke Michael. Wirklich gute vorsichtige Antworten sehr geschätzt.
John Rees