對于亞馬遜而言,9月20日是個糟糕的一天。美國東海岸亞馬遜網絡服務(AWS)出了故障,5小時后才恢復。本文聊一下故障原因以及AWS恢復服務的過程。
AWS還好不是在周一(9月21日)上午掛掉的,否則網友們少不了吐糟。AWS是周日(9月20日)掛的,周日凌晨太平洋夏令時間3點(北京時間周日下午6點)掛了,幾乎沒有人注意到。
當然,如果你是諸如亞馬遜視頻和Reddit的一些流行用戶服務和網站的系統管理員的話,你當然會知道這事。有沒有被搞了個措手不及?
在AWS的大客戶里,似乎只有Netflix公司對AWS數據中心出現大故障做了二手準備,其他人似乎都沒有準備。
要知道,這次的故障遠非一個“簡單的”數據中心問題,并不是諸如美東AWS主干互聯網叫推土機不小心碰了一下那么簡單,這次的故障要復雜得多。
一開始是亞馬遜在美國弗吉尼亞的DynamoDB服務出問題。DynamoDB是一種快速靈活的NoSQL數據庫服務。DynamoDB用于支持應用程序,必須保證在支持大規模的程序時延遲在幾毫秒以內。你可能已經猜到了,許多時間敏感度高的AWS云服務都用到 DynamoDB服務。
一位AWS發言人在對此事作出正式回應時表示,“2015年9月20日太平洋夏令時間凌晨02時13分到早上7點10分,美國東部地區的亞馬遜DynamoDB服務的讀寫操作出現錯誤率非常大的情況,影響了該地區的其他AWS服務,并造成一些AWS客戶也受到錯誤率增大的影響。“
DynamoDB一旦出現讀/寫問題,其性能就會開始崩潰,進而會影響美國東部的其他AWS服務。出現這種情況后,美國東部所有其他AWS服務的應用程序編程接口(API)開始出現超時。爾后,基于AWS的服務就開始失效。
有些客戶受到的影響比其他客戶大些。在大多數情況下,這些客戶會受到錯誤增多的影響,導致客戶無法訪問自己的網站和服務。許多這一類的網站其實并沒有“掛掉”,但網站的性能下降,無法提供滿意的服務。
根據周日的AWS服務運行狀況儀表板上DynamoDB條目的數據,整個故障過程如下:
凌晨3:00 (所有時間為太平洋夏令時間,縮寫為PDT):我們正在檢查美國-東-1區API請求錯誤率升高的問題。
凌晨3:26 PDT:美國-東-1區所有DynamoDB API調用誤差率繼續增加,我們正在全力解決此問題。
凌晨04時05 PDT:已經找到了問題的根源,我們正在努力恢復服務。
凌晨04時41分PDT:我們仍在解決美國-EAST-1區錯誤率升高的問題,以求恢復DynamoDB API的正常工作。
凌晨04時52分PDT:我們在下面為大家提供目前情況的詳細信息。問題的根源是DynamoDB內部的部分元數據服務。它是一個內部子服務,作用是管理表和分區信息。我們的恢復工作重點目前放在恢復元數據操作上。在我們進行恢復工作期間,API的速度將受到限制。
可以看到,亞馬遜花了兩個小時才找到問題的根源。他們接著就降低了所有AWS API的速度,以便其間他們的系統管理員解決出現的問題。
早上5:22 PDT:我們現在開始對API限速,以利恢復工作的進行。
早上05:42 PDT:元數據服務開始趨向穩定;我們仍在繼續恢復工作,力求盡快取消API限速。
早上6:19 PDT:元數據服務現在穩定了下來,我們的恢復工作的目標是盡快取消API限速。
早上07:12 PDT:我們仍在努力恢復服務,力求盡早取消API限速及恢復正常API,但會遵循小心謹慎的原則。
早上07:22 PDT:我們已開始逐步取消API限速,恢復正常流量。
早上7:40 PDT:我們繼續取消API限速,可望在短期內恢復正常。
早上7:50 PDT:讀寫操作開始恢復正常,我們在繼續努力恢復其他各種操作。
早上8:16 PDT:讀寫操作的恢復進展非常順利,我們仍在繼續努力恢復其他各種操作。
至此,AWS用了5個多小時才重新恢復正常服務。
從理論上說,7月16日發布的亞馬遜DynamoDB可能有助于緩解該問題,原因是該版本含DynamoDB跨區域復制功能。其客戶端解決方案使得AWS客戶可以在不同的AWS地區內同時保存相同的DynamoDB表副本,而且是近乎實時的。使用該功能當然是要交錢的,但有了這個功能以后,你就可以利用跨區域復制功能備份DynamoDB表,或是可以對分布在不同地理位置上的數據進行低延遲訪問。
不管怎么說,此次事件表明,即便是全球最大的云服務提供商也會發生重大故障。有些業務要求絕對無中斷,那么,在DynamoDB跨區域復制上花點錢則會是明智的一步。