快速理解AWS S3数据读写一致性模型

先说结论


对于一个新上传的对象,S3提供写后读写一致性(read-after-write consistency)

对于已存在对象的复写,S3提供最终读写一致性(eventual consistency)


举几个栗子。

什么意思呢?https://codeburst.io/quick-explanation-of-the-s3-consistency-model-6c9f325e3f82 这篇文章写得挺清楚的,有兴趣可以看一下,这里我们来总结一下

1.假设我们有一个崭新的文件img.jpg,put之后马上get ,OK,没有问题。这里就是read-after-write consistency的体现。

PUT /img.jpg 200

GET /img.jpg 200

2.假设我们上传了一个img.jpg,之后再put一个和这个img.jpg的key一样,但是内容不同的新文件,之后再get。这个时候get请求的结果很可能还是旧的文件

PUT /img.jpg 200

PUT /img.jpg 200 (new content)

GET /img.jpg 200

3.假设我们get一个不存在的对象,会返回一个404结果,之后我们再put这个对象,随后再次的get可能还是会返回404

GET /img.jpg 404

PUT /img.jpg 200 

GET /img.jpg 404

上述例子2和3就是S3最终一致性(eventual consistency)的体现。


关于最终一致性的解释

    因为s3是一个分布式系统,变更传播到每个节点需要一定的时间,所以如果在变更还没有传播到所有节点之前就执行get请求,很有可能就会得到一个旧的结果。

    S3的这种特性其实是CAP定理的一种体现。简单解释一下CAP定理

CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

一致性(Consistency) (等同于所有节点访问同一份最新的数据副本)

可用性(Availability)(每次请求都能获取到服务器非错的响应)

分区容错性(Partition tolerance)(以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择)

    一般来说P属性都是不可避免的,而S3的做法就是在P的前提下,保证高可用性,根据CAP定理,就会牺牲掉一致性。

    当然,CAP定理并不是绝对的,有兴趣的话可以参考一下这篇文章。 https://www.infoq.cn/article/cap-twelve-years-later-how-the-rules-have-changed/


参考资料:

https://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel

https://codeburst.io/quick-explanation-of-the-s3-consistency-model-6c9f325e3f82

https://www.infoq.cn/article/cap-twelve-years-later-how-the-rules-have-changed/

你可能感兴趣的:(云存储)