为什么DoorDash在你饿的时候偏偏崩溃?服务器可靠性的隐藏科学
晚餐高峰灾难:应用失灵时
晚上7点。你度过了漫长的一天。你打开心仪的外卖应用,滑到常去的店,点击“下单”。屏幕闪烁,小加载轮转啊转,转啊转。你刷新,什么都没发生。应用卡死了。
我们都经历过。时机总是恰到好处——就在数百万其他饥饿的人做同样事情的时候。为什么这总是发生在最糟糕的时刻?应用“宕机”到底意味着什么?
你为什么要关心?宕机的真正代价
这只是小麻烦吗?取决于你是谁。如果你是顾客,你可能只是饿怒症发作,伸手去拿外卖菜单。但对于正拿着你半杯奶昔的司机,或刚炸上你洋葱圈的餐厅,宕机不是不便——而是突然且令人困惑的收入损失。司机无法为几分钟前完成的配送获得报酬。餐厅则备好食物却无单可接。
从更大范围看,这些应用已成为数字基础设施。我们依赖它们吃饭、出行、沟通。当DoorDash崩溃,这便是一个冷酷的提醒:我们的日常体验运行在脆弱的代码、电缆和芯片堆叠之上。宕机不只会破坏应用,更会破坏信任。对于相关公司,信任崩塌可能造成数百万美元的收入损失和股价暴跌。所以,当你盯着冻结的屏幕时,危险的不只是你的晚餐。
根据文章,当外卖应用崩溃时,司机和餐厅会怎样?
根据文章,宕机对公司更广泛的后果是什么?
屏幕背后:客户端-服务器之舞
要理解崩溃,你必须先理解这场舞蹈。想象一家极受欢迎的寿司店。你不能自己坐进厨房。你有服务员。服务员就是你的客户端(手机上的应用)。你把订单给服务员。服务员冲进后厨,服务器(厨房)就在那里。服务器不是你的手机。服务器是一台放在巨大仓库(数据中心)里、距离你数英里之外的强大计算机。它接收你的请求(“来一份龙卷寿司!”),处理它(找到餐厅、计算价格、从你的卡扣款),然后发回响应给服务员(“订单已确认!25分钟后准备好。”)。这就是客户端-服务器模型。这几乎是所有你使用的应用的基本架构。你的手机发出请求。服务器给出回应。一切运转良好,直到后台的寿司师傅完全不堪重负。
文中描述的客户端-服务器模型是什么?
到底哪里出问题了?可扩展性、负载和单点故障
那么,是什么让厨师掉了刀?为什么一个功能完美的应用在下午6点突然变成数字南瓜?
1. 可扩展性和负载
“晚餐高峰”这个名字再贴切不过了。DoorDash通常每分钟处理10,000份订单。而在晚餐高峰期,这个数字可能飙升到100,000。服务器(厨师)在晚餐高峰前并不空闲——它们一直很忙。负载的突然增加就像一排尖叫的客人同时下海量订单。
公司花费数百万试图通过扩展来解决。你可以尝试垂直扩展(雇佣一位超级厨师——一台更强大的计算机)。但这有硬性限制。或者,你可以尝试水平扩展(额外雇佣100名厨师——数千台较小的普通服务器协同工作)。后者是巨头们的做法。但简单地增加服务器并非魔法。服务器必须完美配置以分担工作,这项任务由负载均衡器(一位聪明的领班,将客人引导到最不忙的工位)处理。
2. 单点故障(SPoFs)
即使有一千名厨师,厨房的强度也只取决于最弱的一环。
单点故障是指一旦发生故障就会导致整个系统瘫痪的那个部件。也许数据库——那本保存你账户信息和订单历史的大师级菜谱——无法轻易跨多台服务器拆分。如果那台单一的数据库服务器宕机,每位厨师都会立刻停止烹饪。他们没有指令。
工程师试图通过构建冗余(一个镜像主数据库的备份数据库)来解决这个问题。但如果从故障数据库切换到备份数据库的开关存在 bug 呢?你可以买十台烤箱,但如果主煤气管道被切断,你一样被困住。系统的可靠性只取决于其最不可靠的组件。
著名故障:当巨头轰然崩塌
你可能认为这只发生在新手创业公司身上。并非如此。世界上最大、最富有的科技公司也会经历壮观而羞辱性的崩溃。
- DoorDash,2023年9月: 我们故事的典型代表。第三方服务器的问题在周六晚餐高峰期间引发了级联故障。订单消失,司机在半路上被搁浅。公司不得不做出艰难决定,暂时完全关闭整个应用。
- 亚马逊网络服务(AWS)宕机,2021年: 这是个大事件。AWS是运行着互联网巨大部分的“云”,包括DoorDash、Netflix和许多银行。当AWS错误配置自己的网络时,引发了级联故障。宕机不仅让一个应用瘫痪,而且同时让数千个应用瘫痪。这相当于城市供水系统因一个故障阀门而关闭。
- Facebook(Meta),2021年10月: 一个经典的“哎呀”。对其路由器的一次例行维护更新出了错。他们意外地发送了一个命令,实际上将Facebook从互联网上断开了。长达6小时,35亿用户无法访问WhatsApp、Instagram或Facebook。内部工程师甚至无法远程进入自己的办公室修复错误。
教训令人警醒:复杂性是可靠性的敌人。杂耍者使用的电锯越多,就越可能失去一只手。
在技术宕机背景下,什么是级联故障?
误区澄清:宕机意味着什么和不意味着什么
当应用变黑时,常识往往被抛到窗外。让我们澄清几个误区。
误区 #1: “用户太多导致崩溃。” 真相:这当然是诱因,但很少是直接原因。通常,糟糕的软件更新(导致内存泄漏的bug)或配置错误使服务器无法处理它们本该能处理的流量。用户并不是冲破大坝的水;大坝本身就有裂缝。
误区 #2: “增加更多服务器就能立即解决一切。” *真相:*这听起来合乎逻辑,但服务器不是简单的开关。如果应用结构糟糕,投入更多服务器就像给有漏油管的汽车加更多油箱。瓶颈(通常是数据库或代码逻辑)仍然会堵塞整个系统。这就是为什么扩展是一门工程艺术,而不是蛮力的苦差事。
误区 #3: “宕机意味着应用编码差劲。” *真相:*不一定。Netflix有一个专门负责“混沌工程”的工程团队。他们在工作时间故意关闭自己的服务器,以使系统更强大。即使是完美编写的代码,在面对真实互联网不可预测的混乱时也可能失败——比如光纤电缆被切断、变电站故障或第三方API返回错误数据。
误区 #4: “一旦修复,问题就结束了。” *真相:*在技术领域,没有“结束”。每一次重大宕机都会导致事后剖析——一份供全行业阅读的详细验尸报告。工程师们花费数周时间找出确切问题,修复根本原因,并引入新的保障措施。目标不是永不失败,而是优雅地失败并r