我应该关注Amazon S3上的位翻转吗?

时间:2009-11-13 07:20:59

标签: amazon-web-services amazon-s3

我有一些数据要保存在Amazon S3上。其中一些数据是加密的,一些是压缩的。我应该担心单位翻转吗?我知道可以添加的MD5哈希头。这(根据我的经验)将防止在交易中最不可靠的部分(网络通信)翻转,但是我仍然想知道我是否需要防止在磁盘上翻转?

4 个答案:

答案 0 :(得分:12)

我几乎可以肯定答案是“不”,但是如果你想要更加偏执,你可以在上传之前预先计算MD5哈希值,将其与上传后获得的MD5哈希进行比较,然后在下载时计算MD5哈希下载的数据并将其与存储的哈希值进行比较。

我不确定你关心的风险究竟是什么。在某些时候,你必须将风险推迟到其他人。 “损坏的数据”是否属于亚马逊的服务水平协议?据推测,他们知道假设的文件哈希值是什么,如果他们给你的数据的哈希值不匹配,那么显然他们的问题就出现了。

我想还有其他方法:

  • 使用FEC存储您的数据,以便您可以检测并纠正N位错误,直至您选择的N.
  • 在Amazon S3中多次存储您的数据,可能是在美国和欧洲的数据中心(我认为新加坡有一个新的数据中心即将上线),具有类似RAID的冗余,因此您可以恢复数据,如果有的话消息来源消失或被破坏。

这实际上取决于您存储的数据对您有多大价值,以及您愿意接受多少风险。

答案 1 :(得分:3)

我从两个角度看待你的问题,理论和实践。

从理论的角度来看,是的,你应该关注 - 不仅仅是关于比特翻转,而是关于其他几个可能的问题。特别是section 11.5客户协议称亚马逊

  

不作任何明示,暗示,法定或以其他方式对服务费用作出任何陈述或保证。 (..提供..)我们和我们的许可方不保证服务提供将按照描述的功能,不会中断或无错误,或者没有任何有害组件,或者您在服务中提供的数据将是安全的或不是其他方式丢失或损坏。

现在,在实践中,我并不担心。如果你的数据丢失了,你会在博客上发表文章(虽然他们可能不会面临任何法律诉讼),但他们的业务将会相当多。

另一方面,这取决于您的数据有多重要。假设您在自己的数据中心中滚动自己的东西。您如何计划灾难恢复?如果你说:我只是在两个不同的机架中保留两份副本,只需在亚马逊上使用相同的技术,也许在两个不同的数据中心保留两份副本(因为你写的是你对如何不感兴趣为了防止翻转,我在这里只提供了一个简单的例子。

答案 2 :(得分:1)

可能不是:亚马逊正在使用校验和来防止位翻转,定期梳理静态数据,确保没有发生位翻转。因此,除非您在完整性检查循环间隔内的所有数据实例中都存在损坏,否则您应该没问题。

  

在内部,S3使用整个系统中的MD5校验和来检测/防止位翻。当您将对象放入S3时,我们计算MD5并存储该值。当您获取一个对象时,我们会在重新计算MD5时重新计算它。如果我们存储的MD5与我们计算的值不匹配,因为我们将对象重新流回来,我们将返回GET请求的错误。然后,您可以重试该请求。

     

我们还会不断循环遍历所有静态数据,重新计算校验和并根据我们最初存储对象时保存的MD5验证它们。这允许我们检测和修复静止数据中发生的位翻转。当我们发现静态数据有点翻转时,我们使用为每个对象存储的冗余数据来修复它。

     

当您向对象投放时提供MD5校验和(如果我们收到的数据与校验和不匹配,我们会发生错误)并通过验证,您也可以在传输到S3和从S3传输时保护自己免受位翻转获取对象时的MD5。

来源: https://forums.aws.amazon.com/thread.jspa?threadID=38587

答案 3 :(得分:-1)

有两种方式可以阅读您的问题:

  1. “亚马逊S3是完美的吗?”
  2. “我如何处理Amazon S3不完美的情况?”
  3. (1)的答案几乎肯定是“不”。他们可能有很多保护措施来接近,但仍有失败的可能性。

    离开(2)。事实是设备失败,有时以明显的方式和其他时间看起来有效,但给出错误的答案。为了解决这个问题,许多数据库使用每页CRC来确保从磁盘读取的页面与写入的页面相同。这种方法也用在现代文件系统中(例如ZFS,它可以写一个页面的多个副本,每个副本都有一个CRC来处理raid控制器故障。我通过读取一个磁盘看到ZFS正确的单个位错误第二个副本;磁盘不完美。)

    一般情况下,您应该检查一下您的系统是否正在运行。使用哈希函数是一种很好的方法。检测到故障时采取的方法取决于您的要求。存储多个副本可能是最好的方法(当然也是最简单的方法),因为您可以通过使用FEC来保护站点故障,连接故障甚至供应商故障(通过选择第二个供应商),而不仅仅是数据本身的冗余。