Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS S3最终一致性和读后写一致性_Amazon Web Services_Amazon S3_Consistency_Eventual Consistency_Data Consistency - Fatal编程技术网

Amazon web services AWS S3最终一致性和读后写一致性

Amazon web services AWS S3最终一致性和读后写一致性,amazon-web-services,amazon-s3,consistency,eventual-consistency,data-consistency,Amazon Web Services,Amazon S3,Consistency,Eventual Consistency,Data Consistency,帮助我更好地理解这些我不能完全掌握的概念 谈到aws S3一致性模型,我将尝试解释我所掌握的内容 请证实或确认这些索赔 首先 谈论“写后读”只与“新作品”/“创造以前不存在的对象”有关 谈论“最终一致性”与“修改现有对象”(更新或删除)有关 这些第一个概念正确吗? 那么 最终一致性:在数据完全写入节点之前访问数据的“客户机”可以读取对象的旧版本,因为写入过程可能仍在进行中,即对象可能尚未通信。 在分布式系统中,这是一种普遍允许的行为,在分布式系统中,这种类型的一致性优先于在提交对象时等待某

帮助我更好地理解这些我不能完全掌握的概念

谈到aws S3一致性模型,我将尝试解释我所掌握的内容

请证实或确认这些索赔

首先

  • 谈论“写后读”只与“新作品”/“创造以前不存在的对象”有关
  • 谈论“最终一致性”与“修改现有对象”(更新或删除)有关
这些第一个概念正确吗? 那么

  • 最终一致性:在数据完全写入节点之前访问数据的“客户机”可以读取对象的旧版本,因为写入过程可能仍在进行中,即对象可能尚未通信。 在分布式系统中,这是一种普遍允许的行为,在分布式系统中,这种类型的一致性优先于在提交对象时等待某种类型的锁被移除的另一种选择

  • 写后读一致性:对象立即可供客户机使用,客户机将读取对象的“真实”版本,而不是旧版本,如果我理解得很好,这仅适用于新对象

如果是,为什么这些复制方法如此不同?产生这种不同的一致性

“最终一致性”的概念更自然地掌握,因为你必须考虑“延迟”来将数据传播到不同的节点,并且客户端可能在此期间访问并且没有新的数据。 但为什么“先读后写”应该是即时的呢?在现有数据上传播修改,或创建新数据,应具有相同的延迟。我不明白其中的区别

你能告诉我我的说法是否正确,并用不同的方式解释这个概念吗

谈论“写后读”只与“新作品”/“创造以前不存在的对象”有关

谈论“最终一致性”与“修改现有对象”(更新或删除)有关

几乎正确,但要注意一个警告。以下是一段引用自:

需要注意的是,如果您在创建对象之前对键名发出HEAD或GET请求,然后在该请求之后不久创建对象,则由于最终的一致性,后续GET可能不会返回该对象

关于他们为什么提供不同的一致性模型,以下是我的理解/推测。(注意:以下内容可能是错误的,因为我从未为S3工作过,也不知道它的实际内部实现。)

S3是一个分布式系统,因此S3很可能使用一些内部缓存服务。想想CDN是如何工作的,我想你可以在这里使用类似的类比。如果您得到的对象的密钥尚未在缓存中,则表示缓存未命中!S3将获取请求对象的最新版本,将其保存到缓存中,然后将其返回给您。这是先读后写模型

另一方面,如果更新缓存中已有的对象,那么除了将新对象复制到其他可用性区域之外,S3还需要做更多的工作来更新缓存中的现有数据。因此,传播过程可能会更长。S3没有让您等待请求,而是决定返回缓存中的现有数据。此数据可能是此对象的旧版本。这就是最终的一致性

正如菲尔·卡尔顿所说,计算机科学中只有两件难事:缓存失效和命名。AWS没有很好的方法来完全解决这个问题,而且必须做出一些妥协