2009-11-13 28 views
5

我有一些數據,我想保存在Amazon S3。其中一些數據被加密,一些被壓縮。我應該擔心一點翻轉?我知道可以添加的MD5哈希頭。這(根據我的經驗)將防止交易中最不可靠的部分翻轉(網絡通信),但是我仍然想知道是否需要防止磁盤上的翻轉?我應該關注Amazon S3上的位翻轉嗎?

+0

你平時不用擔心位翻轉在磁盤上? – 2009-11-30 02:27:42

+0

如果您使用本地磁盤,您將如何解決此問題? – Dave 2009-12-03 15:53:18

+0

我通常做的擔心位翻轉 - 不採取行動來糾正他們的觀點,但是從我如何對待我的最重要的索引數據的角度。我的經驗表明,大多數誰試圖阻止他們的數據位翻轉的鄉親有一樣多的成功,那些誰試圖推動繩:P 這樣說,如果我有幾百萬的小片數據的一個指標的數據中,我將通過索引來加倍努力。 (想想NTFS上的MFT,有兩個副本)。我可能不會壓縮,或沒有某種檢測/糾正設施 – stuck 2009-12-03 17:04:03

回答

12

我幾乎可以肯定的答案是「否」,但如果你想成爲額外的偏執狂,你可以預先計算上傳之前的MD5哈希值,比較,爲MD5哈希你下載計算MD5時上傳後得到的,然後下載數據的散列並將其與您存儲的散列進行比較。

我不確定你擔心什麼風險。在某些時候,你必須將風險推遲給其他人。 「損壞的數據」是否屬於亞馬遜的服務水平協議?據推測他們知道什麼文件散列是假設是,如果他們給你的數據散列不匹配,那麼這顯然是他們的問題。

我想還有其他的方法太:

  • Store中有FEC這樣的數據,你可以檢測和糾正的N比特錯誤取決於您的選擇N.的
  • 商店不止一次您的數據更在亞馬遜S3中,也許在美國和歐洲的數據中心(我認爲新加坡也有一個新的即將上線的網站),具有類RAID冗餘功能,以便在某些數據源消失或損壞時恢復數據。

這實際上取決於您存儲的數據對您有多寶貴,以及您願意接受多少風險。

+0

,將剛剛告訴我,有問題發生,我不會有我的數據 – stuck 2009-11-15 09:34:51

+0

我已經編輯我的答案,包括降低風險更多的想法。 – 2009-11-15 23:56:31

+0

它會是最真棒知道亞馬遜是幹什麼的,任何人從亞馬遜那裏? – stuck 2009-11-29 08:56:31

3

我從兩個角度看你的問題,一個理論和實踐。

從理論的角度來看,是的,你應該關注的 - 而不僅是位翻轉,但對其他一些可能出現的問題。在客戶協議中特別section 11.5說,亞馬遜

作出任何陳述或保證任何形式明示,暗示,法定或其他方式對於服務產品。 (..omiss ..)我們和我們的許可人不保證服務提供的功能如下所述,不會中斷或沒有錯誤,或不含有害組件,或者您存儲在服務提供中的數據將是安全的不會有其他損失或損壞。現在

,在實踐中,我不關心。如果您的數據丟失,您會在博客上發佈有關它的信息(雖然它們可能不會面臨任何法律行爲),但他們的業務將會大打折扣。

另一方面,這取決於您的數據有多重要。假設您正在自己的數據中心中滾動自己的東西。您如何計劃在那裏進行災難恢復?如果你說:我只是保持兩個副本在兩個不同的機架,只需使用與亞馬遜相同的技術,也許保持在兩個不同的數據中心的兩個副本(因爲你寫的,你不感興趣的如何防止位翻轉,我只提供在這裏一個簡單的例子)

-1

有閱讀你的問題有兩種方式:「難道亞馬遜S3完美」

  1. 「我如何處理Amazon S3不完美的情況?」

答案(1)幾乎可以肯定是 「不」。他們可能有很多保護措施要結束,但仍然有失敗的可能性。

離開(2)。事實是設備出現故障,有時以明顯的方式和其他方式出現,但出現錯誤的答案。爲了解決這個問題,許多數據庫使用每頁CRC來確保從磁盤讀取的頁面與寫入的頁面相同。這種方法也是現代文件系統(例如ZFS,它可以編寫一個頁面的多個副本,每一個CRC處理RAID控制器故障使用我通過閱讀的第二個副本看到ZFS從一個磁盤糾正單比特錯誤;磁盤是不完美的。)

一般來說,你應該有一個檢查,以驗證您的系統運行的是你的期望。使用散列函數是一種好方法。當您檢測到故障時採取什麼方法取決於您的要求。存儲多個副本可能是最好的方法(當然也是最簡單的方法),因爲使用FEC可以避免站點故障,連接故障甚至廠商故障(通過選擇第二個供應商),而不僅僅是數據本身的冗餘。

1

可能不是:亞馬遜正在使用校驗和來防止位翻轉,定期檢查靜止的數據,確保沒有發生位翻轉。因此,除非在完整性檢查循環的時間間隔內對所有數據實例有損壞,否則應該沒問題。

在內部,S3在整個系統中使用MD5校驗和來檢測/防止位翻轉。將對象放入S3中​​時,我們計算MD5並存儲該值。當您獲取對象時,我們會重新計算MD5,並將其返回。如果我們存儲的MD5與我們計算的值不匹配,那麼我們將返回一個GET請求的錯誤。然後您可以重試請求。

我們也不斷地通過靜止的所有數據,重新計算校驗和驗證他們不要當我們最初存儲的對象,我們節省了MD5循環。這使我們能夠檢測和修復靜止數據中發生的位翻轉。當我們在休息時發現數據翻轉時,我們使用我們爲每個對象存儲的冗餘數據來修復它。

您還可以通過當你把對象(如果我們收到的數據不匹配校驗,我們將誤差)提供的MD5校驗和驗證MD5時保護自己免受bitflips傳輸和S3期間獲取對象。

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