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