2012-12-17 30 views
0

目前,我們將所有用戶生成的內容上傳到中等大小的EC2實例,然後從那裏運行cron作業以將所有上傳的內容同步到S3。我們在後端運行一些代碼(每次需要訪問任何上傳的文件時),檢查是否已將資源移至S3,或者只有在我們的上傳實例中可用。Amazon S3是否獨立於EC2而不可用?

這看起來有點浪費,但它確實提供了redundency - 如果S3關閉,我們有一些JavaScript代碼,強制文件從我們的上傳框中提供。實際的文件上傳存儲在EBS中,而不是實例上。

現在我們已經在S3存儲桶中獲得了大約150GB的文件;這使得執行S3 Bucket的單獨備份非常耗時且幾乎不可能在任何定期的基礎上運行。

所以,我的問題是,這是必要的嗎?任何人都可以指向S3和EC2之間的一些正常運行時間統計信息嗎? S3發生故障,但EC2可用?看起來,將所有內容直接上傳到S3並相信它已經結束可能會更簡單。另一方面,我們可以將所有內容存儲在EBS中,並將S3完全遺忘,這似乎更有意義。

回答

2

您的EC2實例更有可能比S3更低。首先,您可以在單個主機上運行單個實例,並在單個可用區域中使用單個網絡連接。過去認爲,在一個平臺上水平,EC2(特別是涉及EBS)已severalprotractedoutages,而S3還沒有從2008年開始

S3是在您所選擇的區域遍佈分佈式系統有顯著可用性事件。在最終一致性保證的情況下,在目標層面進行操作比EBS和EC2解決的問題坦率地簡單得多,所有這些都通過設計增加了一致性保證(以及因此失敗的方式)。

我通常使上傳過程將S3作爲後備存儲 - 直接上傳到S3,或通過EC2實例以直寫方式上傳 - 並接受如果S3關閉,則我無法處理上傳。這樣做會引入一個失敗模式,在該模式下,您的應用程序正在運行,但S3不在,但它顯着降低了數據丟失的可能性,這通常是比不可用性更嚴重的問題。這還允許您同時處理通過不同可用區域中的不同EC2實例進行上傳,避免EC2故障以及通過實例存儲實例進行對衝,避免EBS故障。

相關問題