(相關(guān)資料圖)
The register 網(wǎng)站披露,巴西南部地區(qū)部署的 Microsoft Azure DevOps 服務(wù)”罷工“了約十個(gè)小時(shí)。隨后,微軟首席軟件工程經(jīng)理 Eric Mattingly 為本次中斷事件公開(kāi)道歉,并透露中斷原因是一個(gè)簡(jiǎn)單拼寫錯(cuò)誤致使 17 個(gè)生產(chǎn)數(shù)據(jù)庫(kù)被刪除。
Mattingly 表示 Azure DevOps 工程師會(huì)定期對(duì)生產(chǎn)數(shù)據(jù)庫(kù)進(jìn)行快照(Snapshot)處理,以便及時(shí)調(diào)查報(bào)告上來(lái)的問(wèn)題或測(cè)試性能是否改進(jìn),這些舉動(dòng)都依賴一個(gè)每天運(yùn)行的后臺(tái)系統(tǒng),該系統(tǒng)會(huì)在特定時(shí)間刪除舊的快照。
在 Azure DevOps 工程師近期進(jìn)行的一次代碼升級(jí)中,用支持的 Azure.ResourceManager.*NuGet 包取代了棄用的 Microsoft.Azure.Management.*包,此舉引起一個(gè)大型的拉取請(qǐng)求,其中更換了舊包和新包中的 API 調(diào)用。
然而拉取請(qǐng)求中卻出現(xiàn)了拼寫錯(cuò)誤,誤將刪除快照數(shù)據(jù)庫(kù)的調(diào)用改成了刪除托管數(shù)據(jù)庫(kù)的 Azure SQL Server 的調(diào)用,導(dǎo)致后臺(tái)快照刪除作業(yè)刪除了整個(gè)服務(wù)器。
事故原因Mattingly指出 Azure DevOps有專門的測(cè)試來(lái)捕捉此類問(wèn)題,但是錯(cuò)誤的代碼只在某些特定條件下才得以運(yùn)行,因此在現(xiàn)有的測(cè)試中沒(méi)有很好的覆蓋到。(據(jù)推測(cè),這些條件需要存在于一個(gè)足夠“老”的數(shù)據(jù)庫(kù)快照,以便被刪除腳本所捕獲。)
Mattingly 進(jìn)一步指出由于沒(méi)有任何快照數(shù)據(jù)庫(kù),Sprint 222 的內(nèi)部部署(第0環(huán))沒(méi)有發(fā)生任何意外,幾天后,軟件變更被部署到客戶環(huán)境(第1環(huán))被用于南巴西規(guī)模單位(一個(gè)特定角色的服務(wù)器集群)。該環(huán)境中有一個(gè)快照數(shù)據(jù)庫(kù),其年齡“老”到足以觸發(fā)該錯(cuò)誤,最終導(dǎo)致后臺(tái)工作刪除了該規(guī)模單位的“整個(gè)Azure SQL服務(wù)器和所有17個(gè)生產(chǎn)數(shù)據(jù)庫(kù)”。
經(jīng)過(guò)十多個(gè)小時(shí)的努力,微軟方面已經(jīng)全部恢復(fù)了數(shù)據(jù)庫(kù),為防止此類問(wèn)題再次發(fā)生,微軟已經(jīng)采取各種修復(fù)和重新配置措施?;ㄙM(fèi)如此長(zhǎng)時(shí)間的原因如下:
第一:由于客戶自己無(wú)法恢復(fù) Azure SQL Server, 必須由 Azure 工程師來(lái)處理這一問(wèn)題,這一過(guò)程大約需要一個(gè)小時(shí):第二:數(shù)據(jù)庫(kù)具有不同的備份配置,一些數(shù)據(jù)庫(kù)被配置為區(qū)域冗余備份,另一些數(shù)據(jù)庫(kù)被設(shè)置為最近的地理區(qū)域冗余備份,協(xié)調(diào)這種不匹配的冗余備份,需要花費(fèi)幾個(gè)小時(shí);最后一個(gè)原因:在數(shù)據(jù)庫(kù)開(kāi)始恢復(fù)在線后,由于自身網(wǎng)絡(luò)服務(wù)器存在一系列復(fù)雜問(wèn)題,使用這些數(shù)據(jù)庫(kù)的客戶也無(wú)法立刻訪問(wèn)整個(gè)規(guī)模單元。據(jù)悉,這些問(wèn)題由服務(wù)器預(yù)熱任務(wù)引起,該任務(wù)通過(guò)測(cè)試調(diào)用在可用數(shù)據(jù)庫(kù)列表中反復(fù)進(jìn)行,恢復(fù)過(guò)程中的數(shù)據(jù)庫(kù)出現(xiàn)了一個(gè)錯(cuò)誤,就會(huì)觸發(fā)預(yù)熱測(cè)試 執(zhí)行指數(shù)回退重試,導(dǎo)致預(yù)熱平均需要 90 分鐘,在正常情況下此操作只需要幾秒鐘。
更為復(fù)雜的是,整個(gè)恢復(fù)過(guò)程交錯(cuò)進(jìn)行,一旦有一兩臺(tái)服務(wù)器開(kāi)始接受客戶流量,就會(huì)出現(xiàn)過(guò)載現(xiàn)象,然后停機(jī)。因此,恢復(fù)服務(wù)需要阻斷所有到巴西南部規(guī)模單位的流量,直到一切都充分準(zhǔn)備好后,才重新加入負(fù)載平衡器并處理流量。
文章來(lái)源:https://www.theregister.com/2023/06/03/microsoft_azure_outage_brazil/
標(biāo)簽: