51CTO讀者成長(zhǎng)計(jì)劃社群招募,咨詢小助手(微信號(hào):CTOjishuzhan)
撰稿 | 言征
四個(gè)月,16次中斷。Github真的惹惱了用戶了。
微軟旗下的GitHub為版本控制和協(xié)作提供了一個(gè)代碼托管平臺(tái),在過(guò)去三個(gè)月發(fā)生了13起此類事件后,而就在剛剛過(guò)去的上周,該公司就發(fā)生三次服務(wù)中斷。
5月16日,GitHub首席安全官M(fèi)ike Hanley發(fā)表了一篇博文《解決Github最近的可用性問題》中表示:“上周,GitHub發(fā)生了幾起可用性事件,包括長(zhǎng)時(shí)間和短時(shí)間的可用性事件。此后,我們已經(jīng)緩解了這些事件,所有系統(tǒng)現(xiàn)在都正常運(yùn)行。”

Hanley補(bǔ)充道:“這些事件的根本原因并不相關(guān),但總的來(lái)說(shuō),它們對(duì)組織和開發(fā)人員信任GitHub提供的服務(wù)產(chǎn)生了負(fù)面影響。這既不可接受,也不符合我們的標(biāo)準(zhǔn)。”
一、三起事件回溯及原因
該公司表示,這三起事件分別發(fā)生在5月9日、5月10日和5月11日,影響了GitHub提供的大部分關(guān)鍵服務(wù)。事件導(dǎo)致關(guān)鍵的GitHub服務(wù)中斷如下:
1.5月9日Git數(shù)據(jù)庫(kù)事件
日期:2023 年 5 月 9 日
事件:Git 數(shù)據(jù)庫(kù)因配置更改而降級(jí)
影響:10 個(gè)主要服務(wù)中有 8 個(gè)降級(jí)
據(jù)該公司稱,5月9日發(fā)生的事件由于配置更改而中斷了GitHub的數(shù)據(jù)庫(kù)。
Hanley在博客文章中表示:“5月9日,我們發(fā)生了一起事件,導(dǎo)致狀態(tài)門戶網(wǎng)站上的10項(xiàng)服務(wù)中有8項(xiàng)受到重大(紅色狀態(tài))停機(jī)的影響。大部分停機(jī)時(shí)間僅持續(xù)了一個(gè)多小時(shí)。”

Git 推送錯(cuò)誤率:在 11:30 左右,錯(cuò)誤率從零上升到大約 30,000。匯率繼續(xù)在 25,000 和 35,000 之間波動(dòng),直到 12:30 左右,此時(shí)它回落到零。
Hanley解釋說(shuō),在中斷時(shí),許多服務(wù)無(wú)法讀取新寫入的Git數(shù)據(jù),導(dǎo)致了大范圍的故障,并補(bǔ)充說(shuō),中斷后,一些拉取請(qǐng)求和推送數(shù)據(jù)的事件后恢復(fù)時(shí)間延長(zhǎng)了。
Hanley表示,此次中斷是由提供Git數(shù)據(jù)的內(nèi)部服務(wù)的配置更改引發(fā)的。
“這一更改旨在防止連接飽和,之前曾在Git后端的其他地方成功引入。推出后不久,集群發(fā)生了故障切換。我們恢復(fù)了配置更改,并在幾分鐘內(nèi)嘗試回滾,但由于內(nèi)部基礎(chǔ)設(shè)施錯(cuò)誤,回滾失敗了。”
2.5 月 10 日 GitHub App auth token 事件
日期:2023 年 5 月 10 日
事件:GitHub App 身份驗(yàn)證令牌頒發(fā)因負(fù)載下降
影響:10 個(gè)主要服務(wù)中有 6 個(gè)下降
5月10日發(fā)生的這起事件是由于GitHub的應(yīng)用程序身份驗(yàn)證令牌發(fā)布能力下降,十分之六的關(guān)鍵GitHub服務(wù)也受到了影響。
Hanley在博客文章中表示:“5月10日,提供GitHub應(yīng)用程序身份驗(yàn)證令牌的數(shù)據(jù)庫(kù)集群發(fā)現(xiàn)GitHub App權(quán)限的寫入延遲增加了7倍(狀態(tài)為黃色)。在此次事件的大部分時(shí)間里,這些身份驗(yàn)證令牌請(qǐng)求的失敗率為8-15%,但在短時(shí)間內(nèi)達(dá)到了76%的峰值。”
5 月 10 日,為 GitHub 應(yīng)用程序授權(quán)令牌提供服務(wù)的數(shù)據(jù)庫(kù)集群發(fā)現(xiàn) GitHub 應(yīng)用程序權(quán)限(狀態(tài)黃色)的寫入延遲增加了 7 倍。在這一事件的大部分時(shí)間里,這些授權(quán)令牌請(qǐng)求的失敗率為 8-15%,但在短時(shí)間內(nèi)確實(shí)達(dá)到了 76% 的峰值。

延遲隨時(shí)間變化的線圖:顯示從 5 月 10 日星期三中午 12 點(diǎn) 30 分到 5 月 11 日星期四午夜從零跳到“3e14”附近波動(dòng)。峰值延遲在此期間有 5 次接近“1e15”。
首席安全官解釋說(shuō),令牌頒發(fā)問題是由于管理GitHub應(yīng)用程序權(quán)限的API“執(zhí)行效率低下”造成的,并補(bǔ)充說(shuō)該公司正在更新API以檢查安裝狀態(tài)的變化。
3.5月11日Git數(shù)據(jù)庫(kù)事件
日期:2023 年 5 月 11 日
事件:Git 數(shù)據(jù)庫(kù)因只讀副本丟失而降級(jí)
影響:10 個(gè)主要服務(wù)中有 8 個(gè)降級(jí)
該公司表示,由于讀取副本丟失,GitHub的數(shù)據(jù)庫(kù)于5月11日再次遭到攻擊。Hanley在博客文章中表示:“在Git數(shù)據(jù)庫(kù)事件中,Git讀寫是許多GitHub場(chǎng)景的核心,因此延遲和故障的增加導(dǎo)致GitHub Actions工作流無(wú)法提取數(shù)據(jù)或提取不更新的請(qǐng)求。”

隨著時(shí)間的推移成功操作的線圖,顯示大約 250 萬(wàn)的典型值。該圖顯示在 13:30 下降到大約 150 萬(wàn)次操作,隨后穩(wěn)步增加回到 250 萬(wàn)次,并在 14:00 恢復(fù)正常。
二、為什么這些事件會(huì)影響其他 GitHub 服務(wù)?
在博客中,Hanley表示:“我們希望我們的服務(wù)能夠盡可能地適應(yīng)失敗。分布式系統(tǒng)中的故障是不可避免的,但不應(yīng)導(dǎo)致多個(gè)服務(wù)嚴(yán)重中斷。在所有這三起事件中,我們都看到了普遍的退化。在 Git 數(shù)據(jù)庫(kù)事件中,Git 讀寫是很多 GitHub 場(chǎng)景的核心,因此延遲和故障增加導(dǎo)致 GitHub Actions 工作流無(wú)法拉取數(shù)據(jù)或拉取請(qǐng)求不更新。”
此外,在 GitHub Apps 事件中,對(duì)令牌發(fā)布的影響也影響了依賴令牌運(yùn)行的 GitHub 功能。這是 GitHub Actions 中每個(gè) GITHUB_TOKEN 的來(lái)源,以及用于授予 GitHub Codespaces 訪問存儲(chǔ)庫(kù)的令牌。它們也是保護(hù)私有 GitHub 頁(yè)面訪問的方式。當(dāng)令牌發(fā)行失敗時(shí),GitHub Actions 和 GitHub Codespaces 無(wú)法訪問它們運(yùn)行所需的數(shù)據(jù),因此無(wú)法啟動(dòng)。
三、GitHub正在采取行動(dòng)來(lái)避免類似事件
Hanley 表示,為了避免未來(lái)發(fā)生類似事件,公司正在幾個(gè)方面開展工作,例如仔細(xì)審查其內(nèi)部流程,并進(jìn)行調(diào)整,以確保變動(dòng)始終得到更安全的部署。
“當(dāng)然,并非所有這些事件都是由生產(chǎn)變化引起的,但我們認(rèn)為這是一個(gè)需要改進(jìn)的領(lǐng)域”。
此外,Hanley補(bǔ)充道:“除了標(biāo)準(zhǔn)的事件后分析和審查外,我們正在分析這些事件對(duì)各服務(wù)的影響范圍,以確定在哪里可以減少未來(lái)類似故障的影響。”
同時(shí),GitHub正在努力提高“高成本、低容量查詢模式”的可觀測(cè)性、快速診斷和緩解此類問題的通用能力。其他措施包括解決數(shù)據(jù)庫(kù)故障轉(zhuǎn)移問題,以確保故障轉(zhuǎn)移始終在沒有干預(yù)的情況下完全恢復(fù),并了解多個(gè)Git數(shù)據(jù)庫(kù)崩潰事件。
作為Github公司對(duì)透明度承諾的一部分,將會(huì)在月度可用性報(bào)告中發(fā)布了導(dǎo)致 GitHub 服務(wù)性能下降的所有事件的摘要。“鑒于最近這些事件的范圍和持續(xù)時(shí)間,我們認(rèn)為現(xiàn)在與社區(qū)一起解決這些問題很重要。”
Hanley表示,5 月的可用性報(bào)告將包括這些事件和更多相關(guān)的進(jìn)一步細(xì)節(jié),以及關(guān)于提高 GitHub 可用性的進(jìn)展的一般更新。
四、四個(gè)月持續(xù)發(fā)生服務(wù)性能下降事件
盡管github聲稱正在努力解決停機(jī)問題,但GitHub在過(guò)去四個(gè)月里持續(xù)發(fā)生了不少中斷事件,4月發(fā)生了4起,3月發(fā)生了6起,2月發(fā)生了3起。

五、用戶炸鍋了
一位Reddit用戶表示,對(duì)于Github的可用性問題由來(lái)已久,不僅僅是最近才有。Github或者其中的某些服務(wù)經(jīng)常出現(xiàn)故障,并對(duì)該公司根本不屑于寫任何關(guān)于問題的東西剛到吃驚。“Actions經(jīng)常崩潰,而他們與Codespaces的不斷停機(jī)是讓我的團(tuán)隊(duì)遠(yuǎn)離它的一個(gè)很大的動(dòng)力。”此外,他還對(duì)于Github的狀態(tài)頁(yè)面事件歷史更新表示不滿。

有另一位網(wǎng)友回應(yīng):某云不更改狀態(tài)頁(yè)面的原因是因?yàn)檫@會(huì)引發(fā)一堆SLA積分和對(duì)客戶的補(bǔ)償。
也有不少網(wǎng)友附議:“每次我遇到代碼空間問題時(shí),狀態(tài)頁(yè)面肯定也沒有顯示問題”、“我很清楚某些服務(wù)降級(jí)的頻率,在我們Slack的第三方狀態(tài)頻道中被發(fā)送垃圾郵件”、“哇,3月發(fā)生了20起事件,幾乎每個(gè)工作日發(fā)生一次”。
六、寫在最后
作為承載著無(wú)數(shù)良心代碼的平臺(tái)和社區(qū),Github成為全球開發(fā)者的開源圣地,然而此次的服務(wù)中斷問題似乎點(diǎn)燃了用戶們對(duì)于Github時(shí)不時(shí)就“玩中斷”的不滿情緒。
正如Hanley所說(shuō),分布式系統(tǒng)中的故障是不可避免的。但給到用戶的可用性承諾卻是要遵守的。如果不能保障這一點(diǎn),那SLA(service-level agreement)也就變成了空頭支票,有何意義?
參考鏈接:
https://www.infoworld.com/article/3696279/github-owns-up-to-service-issues-multiple-outages.html
https://github.blog/2023-05-16-addressing-githubs-recent-availability-issues/



























