AWS S3 Data Consistency Model
- S3 achieves high availability by replicating data across multiple servers within Amazon’s data centers.
- S3 provides Read-after-Write consistency for PUTS of new objects
- For a PUT request, S3 synchronously stores data across multiple facilities before returning SUCCESS
- A process writes a new object to S3 and will be immediately able to read the Object i.e. PUT 200 -> GET 200
- A process writes a new object to S3 and immediately lists keys within its bucket. Until the change is fully propagated, the object might not appear in the list.
- However, if a HEAD or GET request to a key name is made before the object is created, then create the object shortly after that, a subsequent GET might not return the object due to eventual consistency. i.e. GET 404 -> PUT 200 -> GET 404
- S3 provides Eventual Consistency for overwrite PUTS and DELETES in all regions.
- For updates and deletes to Objects, the changes are eventually reflected and not available immediately i.e. PUT 200 -> PUT 200 -> GET 200 (might be older version) OR DELETE 200 -> GET 200
- if a process replaces an existing object and immediately attempts to read it, S3 might return the prior data till the change is fully propagated
- if a process deletes an existing object and immediately attempts to read it, S3 might return the deleted data until the deletion is fully propagated
- if a process deletes an existing object and immediately lists keys within its bucket. Until the deletion is fully propagated, S3 might list the deleted object.
- Updates to a single key are atomic. for e.g., if you PUT to an existing key, a subsequent read might return the old data or the updated data, but it will never write corrupted or partial data.
- S3 does not currently support object locking. for e.g. If two PUT requests are simultaneously made to the same key, the request with the latest time stamp wins. If this is an issue, you will need to build an object-locking mechanism into your application.
- S3 Object Lock is different as it allows to store objects using a write-once-read-many (WORM) model, which prevents an object from being deleted or overwritten for a fixed amount of time or indefinitely.
- Updates are key-based; there is no way to make atomic updates across keys. for e.g, update of one key cannot be dependent on the update of another key unless you design this functionality into the application.
AWS Certification Exam Practice Questions
- Questions are collected from Internet and the answers are marked as per my knowledge and understanding (which might differ with yours).
- AWS services are updated everyday and both the answers and questions might be outdated soon, so research accordingly.
- AWS exam questions are not updated to keep up the pace with AWS updates, so even if the underlying feature has changed the question might not be updated
- Open to further feedback, discussion and correction.
- Which of the following are valid statements about Amazon S3? Choose 2 answers
- S3 provides read-after-write consistency for any type of PUT or DELETE.
- Consistency is not guaranteed for any type of PUT or DELETE.
- A successful response to a PUT request only occurs when a complete object is saved
- Partially saved objects are immediately readable with a GET after an overwrite PUT.
- S3 provides eventual consistency for overwrite PUTS and DELETES
A customer is leveraging Amazon Simple Storage Service in eu-west-1 to store static content for web-based property. The customer is storing objects using the Standard Storage class. Where are the customers’ objects replicated?
- Single facility in eu-west-1 and a single facility in eu-central-1
- Single facility in eu-west-1 and a single facility in us-east-1
- Multiple facilities in eu-west-1
- A single facility in eu-west-1
- A user has an S3 object in the US Standard region with the content “color=red”. The user updates the object with the content as “color=”white”. If the user tries to read the value 1 minute after it was uploaded, what will S3 return?
- It will return “color=white”
- It will return “color=red”
- It will return an error saying that the object was not found
- It may return either “color=red” or “color=white” i.e. any of the value (Eventual Consistency)