2017-11-15 1 views
0

mir die Amazon S3 Datenkonsistenz in der Dokumentenlese http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.htmlAmazon S3 Datenkonsistenz Modell

Amazon S3 bietet Lese-nach-Schreiben Konsistenz für PUTS neue Objekte in Ihrem Eimer S3 in allen Regionen mit einem Vorbehalt. Der Vorbehalt besagt, dass, wenn Sie eine HEAD- oder GET-Anfrage an den Schlüsselnamen stellen (um zu finden, ob das Objekt existiert), bevor Sie das Objekt erstellen, bietet Amazon S3 eventuelle Konsistenz für Read-After-Write.

Ich verstehe, dass Amazon S3 Lese-nach-Schreib-Konsistenz bietet, während neue Objekte S3-Bucket setzen. Aber ich habe diese Einschränkung für HEAD und GET nicht bekommen, bevor ich das Objekt erstellt habe. Was bedeutet das?

+0

[Werner Vogels über Eventual Consistency] (http://www.allthingsdistributed.com/2008/12/eventually_consistent.html) - hauptsächlich über DynamoDB, aber immer noch relevant für jedes eventuell konsistente System. –

Antwort

1

Die tatsächlichen Interna von S3 sind auf AWS proprietär, aber hier ist eine Theorie:

Wenn Sie ein Objekt anfordern, geht es ihm Cache zu sehen ist, wenn es da ist.

1) Wenn es sich nicht im Cache befindet, ruft es die Daten aus dem zugrunde liegenden Speicher ab und speichert sie im Cache.

Dies ist die Lese-nach-Schreib-Konsistenz. Sie erhalten sofort die neue Version.

2) Wenn es bereits im Cache ist, gibt es die Daten zurück.

Dies ist die endgültige Konsistenz für Lesen-nach-Schreiben für Updates. Sie aktualisieren das Objekt, und dann muss die zwischengespeicherte Version ablaufen, bevor Sie die neue Version erhalten.

3) Wenn es sich nicht im Cache befindet und das Objekt nicht vorhanden ist, wird das Ergebnis "nicht vorhanden" zwischengespeichert.

Dies ist das Verhalten, nach dem Sie fragen. Wie die alten Daten, die sich im Cache befinden, hat S3 den "Schlüssel existiert nicht" als "alte Daten" zwischengespeichert. Auch hier müssen Sie warten, bis der Cache abläuft, bevor die eigentlichen Daten zurückgegeben werden können.

Auch dies wird nicht mit irgendeiner Autorität angegeben. Ich würde alle S3-Experten begrüßen, um mögliche Fehler zu korrigieren oder zu bestreiten.

+0

Es kann wirklich nicht anders sein als genau so, wie du es beschrieben hast. Im Wesentlichen ändert eine "GET" oder "HEAD" Anfrage für ein nicht vorhandenes Objekt die interne Repräsentation des Objekts des Index-Replikats von "unbekannt, ich muss den Master-Index fragen" zu "Ich habe bereits den Master-Index gefragt, und als Ergebnis, ich weiß, dass das Objekt nicht existiert, also 404. " Sobald die Indexeinfügung von "PUT" repliziert wurde, ist das Objekt zugänglich. Wenn das Indexreplikat nicht im Voraus angefordert wird, führt es eine Suche durch und findet das neue Objekt bei der ersten Anforderung. –

+0

Dies erklärt auch die eventuelle Konsistenz von Überschreibungen und Löschungen. Bis die Indexreplikation aufgeholt ist, wird die alte Antwort verwendet, um Anforderungen zu erfüllen. Die einzige Diskrepanz, die ich bei Ihrer Antwort vermute, ist, dass ich vermute, dass nur der Index im Cache ist. Das tatsächliche Objekt ist sofort zugänglich, da dokumentiert ist, dass ein "200 OK" bedeutet, dass das Objekt dauerhaft gespeichert ist, und wir wissen, dass S3-Objekte an mehreren Stellen innerhalb der Region gespeichert sind ... aber der Index wird verwendet, um nachzuschlagen ist die Entität, von der ich vermute, dass sie über einen Cache und eine mögliche Replikationsverzögerung verfügt. –