唯一維護API的工程師輕鬆搞垮Twitter,馬斯克:我們重寫代碼吧

infoq 發佈 2024-03-31T22:48:32.105593+00:00

作者 | 褚杏娟、核子可樂當地時間周一上午,Twitter 網站又出了新故障。有 Twitter 用戶在登錄之後發現了一大堆相互關聯的問題。首先是單擊連結無法跳轉,反而彈出了一條神秘的錯誤消息,稱「您當前的 API 計劃不包括對此端點的訪問權限」。

作者 | 褚杏娟、核子可樂

當地時間周一上午,twitter 網站又出了新故障。


有 Twitter 用戶在登錄之後發現了一大堆相互關聯的問題。首先是單擊連結無法跳轉,反而彈出了一條神秘的錯誤消息,稱「您當前的 API 計劃不包括對此端點的訪問權限」。


「我猜這意味著 Twitter 非常需要現金,它開始收取 Twitter API 訪問權限費用,但 Twitter 自己無法支付這筆費用。」普林斯頓計算機科學教授Arvind Narayanan發布推文略帶調侃地評論道。



Narayanan 還寫道:「雪上加霜地是,每個人都在發布錯誤消息的屏幕截圖,但圖像也被破壞了。」是的,Twitter 上的圖片之後也無法正常加載了。此外,還有用戶報告稱無法訪問 Twitter 推出的專業用戶客戶端 TweetDeck。


「Twitter 破爛到可以拿來開玩笑,但功能足夠強大,我們可以*在 twitter 上*拿它開玩笑,這是硬核軟體的柏拉圖式理想,」技術分析師 Benedict Evans在這個不穩定的社交媒體網站上打趣道。


隨著圖片加載功能的失靈,Twitter 開始陷入一片混亂,無數用戶奔走相告關於這次故障的消息。有網友指出是「對 Twitter API 的傳入和傳出訪問被破壞了」,推文底下有網友抱著「看熱鬧不嫌事大」的心態稱:「這個應用程式壞了會更有趣」。


在一條推文中,該公司做了一番相當模糊的解釋:Twitter 的某些部分現在可能無法按預期工作。我們開展了內部調整,但產生了一些意想不到的後果。問題隨後得到確認,引發故障的原因是變更 Twitter API 免費訪問關閉計劃導致的。


2 月 1 日,該公司宣布將不再支持免費訪問其 API,這實際上終結了第三方客戶端的存在基礎,也極大限制了外部研究人員研究 Twitter 網絡的能力。該公司一直在構建新的付費 API 以供外部開發者使用。


值得注意的是,Twitter 於 2014 年針對第三方應用開發商封殺了有關用戶數據的開發接口,之後嚴格限制用於登錄的令牌,開發人員必須向 Twitter 付費才能使用其 API。後來,Twitter 創始人Jack 表示,這是「我們做過的最糟糕的事情」,並辯解說他「當時沒有在經營公司」,還表示「公司一直在努力將其重新完全開放。」


一人維護,關閉了自己的內部訪問


據悉,馬斯克的大幅裁員計劃令 Twitter 的工程師數量銳減,最終導致只有一人參與到涉及平台 API 的重大項目當中。


據一位現任員工稱,周一這個唯一的現場可靠性工程師執行了一次「錯誤的配置變更,基本上破壞了 Twitter API 的正常運作。」此變更還在公司內部引發了連鎖反應,導致 Twitter 多款內部工具和面向公眾 API 全部癱瘓。工程師們一邊手忙腳亂地解決問題,一邊在 Slack 上呼喊著「完了」、「Twitter 整個宕機了」。


據說馬斯克在得知情況後非常憤怒。


當天晚些時候,馬斯克發推文說,「API 的一個小改動會產生巨大的影響。代碼堆棧已經極度脆弱,最終需要完全重寫。」在此之前,Twitter 投資人 Marc Andreessen 也曾發布了一張截圖,顯示該公司的 API 故障正在網站上蔓延。



「馬斯克的解釋似乎偏離了真正的原因。看起來馬斯克只是不了解他的技術堆棧中的依賴關係,並且在試圖切斷對免費外部用戶的訪問時,無意中下令關閉了 Twitter 對它們自己的 API 內部訪問。」專欄作者 Ahmed Bab 評論道。


馬斯克接管 Twitter 時,曾承諾會大幅提高網站運行速度和穩定性。他的同事對員工的技術水平進行了篩選,最終裁掉了幾千名「能力」不足以在馬斯克治下取得成功的員工。


內部員工已見怪不怪


但不間斷裁員,導致 Twitter 公司現在只剩不足 550 名全職工程師,有媒體統計馬斯克已經裁掉了約 80%的員工。如今事態也符合前員工們當初的預想,人員流失導致 Twitter 越來越頻繁地曝出災難性宕機事件。


本周一的錯誤配置變更,已經是 Twitter 今年以來第六次造成廣泛影響的服務宕機:


  • 1 月 23 日,Androiod 用戶暫時無法加載或發布新推文。
  • 2 月 8 日,一條錯誤消息提醒用戶「您已超過每日推文發送上限」,導致其無法正常發帖。
  • 2 月 15 日,推文無法加載。
  • 2 月 18 日,推文時間線中斷,回復消失。
  • 3 月 1 日,時間線無法正常工作。


以上提到的還只是服務宕機。此外,馬斯克的推文在時間線上比其他用戶更顯眼等問題,也擾亂了用戶的正常體驗。


一名現任員工稱,「這類中斷事故已經越來越頻繁,我甚至感覺大家開始變得麻木了。」據悉 Twitter 總部內的氣氛很是「輕鬆融洽」。有一位員工表示,「從始至終,我們一直都笑呵呵的。」


由於 Twitter 已經沒有多少經驗豐富的員工能夠恢復服務,Twitter 花了一上午才解決掉這個問題。「把員工裁掉 90%,就必然是這樣的結果。」


從種種方面來看,本周一的宕機事故代表著馬斯克對 Twitter 公司的影響已經達到頂峰。為了一心一意賺回 440 億美元的收購成本,馬斯克一直在裁員並縮減 Twitter 提供的免費服務。


一名工程師被迫需要獨力負責一個重大項目,最終導致這個同時為用戶和員工服務、與多個關鍵系統相互關聯的項目突然「爆雷」。


技術債也要背鍋?


不過也有部分現任員工認為,Twitter 目前的很多技術隱患早在馬斯克接手之前就已經存在。當初的 Twitter 之所以被戲稱作「失敗的鯨魚」,並不無道理。


有位現任員工提到,「Twitter 1.0 帶來了太多的技術債務。如果現在做出變更,那麼一切都會崩潰。」


比如,Twitter 在早期開發時,MVP 選用了 Rails。快速的開發能力帶來了快速的產品驗證,然而 Rails 的低效使得 Twitter 很快在技術上觸及了天花板:2007 年左右,Twitter 動不動就掛,甚至一度掛了三天。後來,新的技術主管上任後大刀闊斧地做了債務重組,摒棄 Rails,擁抱 Java 生態圈,用 scala 重寫很多核心服務,終於把服務穩定下來。


2011 年時,Twitter 還遇到了站點穩定性問題,當時使用 HTTP 協議的 Twitter API 時,如果調用 statuses 或者 home_timeline 的 OAuth 方法將會產生一些問題。


不過,如今掌舵推特的馬斯克是否真正關心 Twitter 的技術債還不得而知。


此前,馬斯克在推特上表示,「對於 Twitter 在許多國家/地區的超慢速度,我深表歉意。應用正在執行超過 1000 個批處理不當的 RPC,只是為了渲染一個主頁時間軸!」


隨後,當時還在 Twitter 的工程師 Eric Fronhoefer 公開指出馬斯克的錯誤,給出的原因中也包括多年的技術債讓 Twitter 用速度和功能換取性能,但他第二天就被解僱了。


不過有趣的是,Fronhoefer 當時還指出,「我們可能應該優先考慮一些重大的重寫,以對抗 10 多年的技術債務,並呼籲積極刪除功能。」


而如今,馬斯克也在推文中表示要完全重寫。


雖然這次 Twitter 設法在幾小時後就順利恢復了過來,但故障背後的故事似乎昭示著,後頭還有更多的麻煩在等著馬斯克。


參考連結:


https://www.theverge.com/2023/3/6/23627875/twitter-outage-how-it-happened-engineer-api-shut-down


本文轉載來源:

https://www.infoq.cn/article/5paqh38dauVLiPCJqRs9

關鍵字: