唯一维护API的普通工程师轻松搞垮Twitter,马斯克:我们重写代码吧
作者 褚杏娟 核子可乐
当地时间周一上午,Twitter网站又出了新故障。
有Twitter用户在登录之后发现了一大堆相互关联的问题。首先是单击链接无法跳转,反而弹出了一条神秘的错误消息,称“您当前的API计划不包括对此端点的访问权限”。
“我猜这意味着Twitter非常需要现金,它开始收取Twitter API访问权限费用,但Twit ter自己无法支付这笔费用。”普林斯顿计算机科学教授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