一千萬個為什麽

搜索

當S3離線時,讓我的網站保持在線狀態的策略是什麽?



當S3離線時,讓我的網站保持在線狀態的策略是什麽?

如果S3 US East 1脫機,我應該如何配置/結構我的應用程序以防止將我的整個網站脫機?

在這種情況下多樣化的最佳策略是什麽?

轉載註明原文: 當S3離線時,讓我的網站保持在線狀態的策略是什麽?

一共有 2 個回答:

2015年3月,亞馬遜AWS 宣布它們支持跨地區的S3復制。當S3中的某個區域脫機時,您可以在另一個區域提供鏡像中的文件。

源: https:// aws .amazon.com /博客/ AWS /新交區域復制換亞馬遜-S3/

通過切換到另一個區域來保持您的基礎架構在線的做法非常復雜,但S3是一個相對較小且簡單的組件。 Netflix有關精彩文章的經驗混沌大猩猩。

這也適用於服務降級,例如增加的延遲。不只是當你所依賴的服務完全脫機時。 Netflix也有一篇關於這方面的文章:混沌工程升級

你要求的基本上是高可用性。為了使系統高度可用,您需要三件事情:

  1. 消除單點故障
  2. 從端點切換到另一個端點的機制
  3. 一種檢測失敗的方法

消除單點故障

在S3的情況下,如Evgeny指出的那樣,點#1被解決,由 S3跨區域復制

但是,復制並不是即時的,您需要檢查是否要使應用程序復制可識別。在發生中斷的情況下,寫入源存儲桶的內容可能尚未將其(未復制)發送到目標存儲桶。你必須考慮應用程序如何處理這種情況。這實際上取決於數據的類型,正在做什麽以及(可能)最終用戶或管理層的期望。

從端點切換到另一個端點的機制

對於S3,這意味著如果發生停機,您希望應用程序停止從存儲區A讀取數據並向其寫入數據,並使用存儲區B.

就我所知,如何實現這一點,現在就由你決定。其他一些AWS服務提供完全透明的故障切換,但目前我還沒有意識到S3的這種情況。

有多種方法可以實現這一點。一個例子是使用代理將流量路由到適當的存儲桶。在停機期間,您需要更新/更改代理以將流量路由到不受停機影響的存儲桶。另一個例子是使您的應用程序配置動態化並將其存儲在鍵值存儲中。如果應用程序經常讀取KV存儲以獲取更新的屬性,則可以切換讀取和寫入的位置(例如,Spring Cloud支持“EnvironmentChange”偵聽器)。

一種檢測故障的方法

那麽,我認為這很容易。只要設置一個寫入+讀取循環,並在有問題時立即發出警報:)

結束筆記

  • If your application is writing to the bucket, you have to think about what would happen in the case of a fail-over. Have all the writes made it to the destination bucket (and can you tell)? Can you allow writes to the destination bucket (making it the new "primary")? Careful planning will avoid split-brain or lost updates scenarios.
  • Depending on your SLA, you may want the points #2 and #3 to be automated or automatic. That requires additional planning, tooling and testing, but well-written scripts will always react faster and in more predictable ways than human can (failures also have the annoying habit of happening in the middle of the night when human intervention is something hazardous.
  • It's worth mentioning that even cross-region replication doesn't completely 消除單點故障. Sure, if a region goes down, you are covered. But what if a US-wide AWS outage happens? Azure had a partial but global outage last year and one in 2014 too.