2010-07-06 70 views
4

Amazon S3提供了「最終一致性」模型,您存儲的數據最終對所有客戶都可見。Amazon S3是否保證書寫順序?

我找不到任何官方信息,以確定寫入順序是否有保證。如果您正在構建一個客戶端可能希望在其他人存儲數據後立即讀取數據的架構,這一點非常重要。

如果保留寫入順序,我可以通過讓寫入程序存儲警戒(如特殊鍵)和寫入操作結束來輕鬆檢查數據是否完整。

如果沒有寫入順序的保證,那麼我有一個嚴重的問題,因爲我無法確定我能否安全地讀取數據。

我讀了Werner Vogel關於一致性的文章(http://www.allthingsdistributed.com/2007/12/eventually_consistent.html),他指出,沒有單調寫一致性的系統出了名難以編程,但並沒有說明S3是否保證它。

+0

你打算覆蓋文件嗎? – 2010-07-08 15:08:57

+0

不,我只寫一次。但是我需要編寫一些文件,當我告訴另一個軟件數據完整時,我需要它是可訪問的。 – 2010-07-10 11:05:08

回答

2

要回答你的直接問題'亞馬遜S3保證書寫順序嗎?',我想答案是否定的。儘管如此,我會在AWS論壇中詢問。

如果您能夠以接近完美的一致性生活,我建議讓您的作家在返回成功之前檢查所有文件。雖然這不是保證該文件將提供給所有客戶端,這對大多數使用情況來說已經足夠好了。就我個人而言,當我這樣做時,我從來沒有遇到與客戶端S3的一致性問題。我應該注意到,這需要更多的時間,並且爲額外的請求支付更多的費用,但就您的情況而言,這可能是值得的。另一方面,如果你需要保證完美的一致性,我建議使用美國標準地區以外的地區。除美國標準地區外,所有地區均提供"read-after-write consistency for PUTS of new objects and eventual consistency for overwrite PUTS and DELETES"。這應該可以解決您的新寫入問題,但同樣會花費更多。

最佳,

扎克

開發,長尾視頻

3

這將是非常愚蠢的亞馬遜,保證寫入順序時,它的目標是大規模可擴展性。考慮以下情況:

  • 在S3中存在與密鑰K相關聯的值X.
  • 客戶端1(香港):寫入值A密鑰K,由服務器A服務
  • 客戶端2(堪薩斯城):寫入值B到密鑰K,由服務器B

最終一致性服務保證所有的讀者,無論在世界任何地方,都會看到A值或B值或X值,最終,所有讀者都會看到A或B的值,但不是混合。

如果客戶端1和2同時發出寫入,那麼唯一保證寫入順序的方法是在時間線上將寫入相互關聯。但是,跨大西洋時鐘將不會完全同步。這裏真正的問題在於,當世界兩端的兩個客戶及時發佈書寫時,寫訂購意味着什麼。

更新

同爲一個單一的客戶端也是如此。假設從2個位置提供值,並且單個客戶端發出2個連續更新。如果兩個寫入都由相同的端點提供,則可能會保留您的排序。但是,沒有任何東西阻止從第二個位置(路由,網絡拆分等)滿足讀取。

+0

我的意思是書寫順序是「單一客戶端」寫入順序。例如。當一個_single client_進行一堆寫入時,其他所有人是否會按照它們的順序看到這些寫入? – 2010-08-02 06:27:31

+0

我更新了說明: 對於單個客戶端也是如此。假設從2個位置提供值,並且單個客戶端發出2個連續更新。如果兩個寫入都由相同的端點提供,則可能會保留您的排序。但是,沒有任何東西阻止從第二個位置(路由,網絡拆分等)滿足讀取。 – 2010-08-02 14:30:35

相關問題