百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

“少写一行代码,5分钟狂刷一次下载,开发者8000美元就这么烧没了!”

moboyou 2025-08-11 01:22 3 浏览

只因为漏写了一行代码,macOS 录屏工具 Screen Studio 的开发者 Adam Pietrasiak 意外烧掉了 8000 美元的流量费,连带着还让部分用户断了网。一个看起来微不足道的自动更新改动,最后变成了一场技术灾难。这不仅是一场“翻车事故”,也给所有开发者敲响了警钟:凡是跟网络、成本沾边的代码,真的一点都马虎不得。

这篇名为《One line of code that did cost $8,000》的文章虽然写于 2023 年,最近却在 Hacker News 上被翻了出来,再次引发开发者圈热议。

来源:
https://pietrasiak.com/one-line-of-code-that-did-cost-dollar8000

作者 | Adam Pietrasiak
编译 | 屠敏
出品 | CSDN(ID:CSDNnews)

由于一个 Bug,macOS 录屏应用 Screen Studio 的自动更新机制出了问题:每隔 5 分钟就会让每位用户重复下载一次更新文件。这个更新包有 250MB,大量重复下载导致请求次数飙升至 900 万次,最终生成了超过 2PB(约 200 万 GB)的 Google Cloud 流量。

当时的流量波动如下图所示,虽然这个截图本身看起来没什么大不了,但背后的流量规模可不容小觑:在一个多月的时间里,Screen Studio 的服务端持续跑出至少 100 Mib/s 的带宽,有时甚至逼近 1 GiB/s——而且是每一秒都在大规模传输数据。

这个 Bug 简单得令人痛心,甚至可以说愚蠢至极。

简单来看,Screen Studio 是一款运行在 macOS 上的本地屏幕录制应用。出于常规需求,身为开发者的 Adam Pietrasiak 为它设计了一个自动更新机制,让用户可以方便地获取最新版本。

更新逻辑其实也很简单:应用会每五分钟检查一次更新,或者在用户启动时主动检查。一旦检测到有新版本,就会下载更新文件,并暂停五分钟一轮的检查循环,直到用户完成安装并重启应用为止。


悲剧性的重构

最初,Screen Studio 的自动更新机制还有个小问题:一旦检测到新版本,应用会立刻弹窗提醒用户更新。但这在用户录屏时出现弹窗将会非常扰人——毕竟谁也不希望录到一半被窗口打断。

为了改善这一体验,Adam Pietrasiak 决定对更新逻辑进行了重构。不过,就是在这次重构中,出了个代价惨重的疏忽:他漏掉了一行关键代码——在更新文件已经下载后,应该停止后续的定时检查。

忘记这行代码的后果就是:应用每五分钟就会重新下载一次同一个 250MB 的更新包。


悲剧性的运行环境:后台运行数周

问题在于,事实证明有成千上万的用户把 Screen Studio 这款应用长期挂在后台运行,即使他们并没有主动使用。

这间接地导致 Bug 的影响被大大放大——这些客户端每隔五分钟就自动下载一次 250MB 的更新文件,而且是持续了好几个星期。

来做个简单的计算:

  • 每五分钟一次的频率,一天大约会执行 288 次下载。

  • 每个更新文件约为 250MB,也就是每天每位用户产生约 72GB 的下载量。

  • 这一 bug 持续了一个多月,而开发者 Adam Pietrasiak 完全没有察觉到。

  • 该应用大约有一千个这样的客户端实例始终在后台运行。

  • 250MB × 288 次/天 × 30 天 × 1000 用户

  • 换算之后就是——2,000,000GB

  • 或 2,000 TB

  • 或 2PB 的流量


一连串糟糕的错误

雪上加霜的是,Adam Pietrasiak 当时并没有在 Google Cloud 上设置任何流量或账单预警机制——毕竟,过去每月的账单从未超过 300 美元,也就没太放在心上。

而流量监控呢?也没人主动去看,因为“以前从来没出过问题”。

那这场事故最后是怎么被发现的呢?并不是通过技术手段,而是因为 Adam Pietrasiak 的信用卡因为超过了其设定的限额而被银行拒付了(所幸他事先设了限额,否则后果可能更惨)。


对用户的影响

这不仅对我们来说是场灾难,对一些用户来说更是严重的问题。

对于一部分用户来说,它甚至成了现实生活中的麻烦:由于更新文件是从用户设备端发起的下载,超大流量实际上是“从他们自己的网络里跑出去”的。

有位用户住在郊区,结果因为异常高频的网络使用,被当地的运营商直接断了网,甚至取消了服务合同——更糟糕的是,那一片区域没有别的可选网络提供商。

得知此事后,Adam 表示将对事件负责,并承担由此产生的全部费用。幸运的是,那位用户最终还是与运营商协商解决了问题,没有造成进一步损失。

尽管如此,对开发者和用户来说,这都是一次糟糕的经历。Adam 后来说,作为一名设计师,他一直非常在意用户体验——但这次的事故,不只是糟糕体验,甚至一度对用户造成了实际伤害。


总结教训

基于此,Adam Pietrasiak 自己也总结了一些经验,也希望能给其他开发者提个醒:

  • 始终为云服务设置费用预警;

  • 写自动更新逻辑时要极其小心;

  • 任何可能带来成本的代码都要格外谨慎;

  • 设计可由服务器远程触发的特殊信号机制,比如“强制更新且不提示用户”;

  • 定期检查你的云服务状态。


最后

随着 Adam Pietrasiak 把这次事故分享出来,也引发了不少开发者的讨论。

有网友指出,这次事件的损失可能远不止账单上写的 8000 美元。比如用户用的是流量,像移动热点,很可能因此悄悄多花了不少钱,却完全不知道是应用的问题。

也有人认为,像自动更新器这种容易出问题、又特别关键的功能,其实没必要硬着头皮自己做。用个成熟、靠谱的第三方方案,反而更省事、安全。毕竟,一旦 App 出了严重 Bug,更新机制就成了唯一的补救通道,设计得不靠谱,后果可能比想象中严重得多。网友 jmull 指出,「像“每五分钟检查一次更新”这种设计,就挺离谱的,说明他们可能根本没认真设计这个系统。」

还有开发者将其归咎为没有代码审查。用户 donatj 表示,「我一直对代码评审非常严格。有一次,一个经理随口说我应该多留点问题给 QA 处理,语气差不多是“最坏能出什么问题?”我当时脱口而出:“我们全都丢掉工作。”我们永远离“因为一行糟糕的代码丢掉工作”只差一步。我抓到初级甚至资深开发者写出可能泄露用户隐私信息(PII)的代码的次数,简直数不清。在大多数系统中,一不小心就可能惹上法律麻烦,这实在太容易了。」

这次事件虽然是个意外,但对很多人来说,也是一个值得认真思考的教训。无论是系统设计、代码审核,还是日常监控和应急预案,做得细一点、稳一点,总归是有好处的。

相关推荐

Util应用框架基础(二)- 面向切面编程(AOP)

面向切面编程(AOP)Util应用框架横切关注点处理本节介绍Util应用框架对横切关注点的处理.文章分为多个小节,如果对设计原理不感兴趣,只需阅读基础用法部分即可.概述有些问题需要在系统中全局处理,比...

QQ假红包生成器(恶搞qq红包假红包生成)

软件名称:QQ假红包生成器软件大小:892.37KB运行平台:安卓软件说明:本软件由iapp编写,所以全被安全软件误报。作者也把软件免杀了,但免杀版无法在5.0系统的手机上安装,安装非免杀版即可...

如何用云虚拟主机搭建一个影视网站

大家好,今天教大家使用云虚拟主机搭建一个影视网站的教程,本教程使用的是苹果CMS系统搭建。清空虚拟主机在开始安装网站之前,先要清空下虚拟主机。因为虚拟主机开通成功后,一般都会有一个默认网页文件,直接...

小白快速掌握!目前最有效玩客云刷机法之玩客云刷魔改版iStoreOS

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:最佳男煮角来来咯,我又来咯,为方便小白快速掌握刷机流程,我在每一篇文章里都是尽可能一步一图一解读的,而最最基础的准备直接点击我的文章《什么,...

AI七个月突破数学家“围剿”反超人类,14位数学家深挖原始推理token:不靠死记硬背靠直觉

从只能答对2%的题目,到在超难数学题集中刷下22%得分,甚至超过人类团队平均水平,大模型需要多长时间?现在,令数学家们都惊讶的结果已经尘埃落定:7个月。发生在大名鼎鼎的“专为为难大模型而生的”Fron...

1.5B刷新数学代码SOTA!快手清华精细Token管理,LLM推理能力飙升

Archer团队投稿量子位|公众号QbitAI当大模型在数学题和代码任务里“卷”参数规模时,一支来自快手和清华的团队给出了不同答案——他们用1.5B参数的小模型,在多个推理基准上干过了同量级S...

抢票软件刷走200张,黄牛代码篡改系统,看球还敢信“代抢”吗?

7月4日晚无锡警方抓了两个人,他们用电脑程序抢了200多张苏超比赛门票,赚了1万5。现在苏超比赛场场爆满,抢票软件、黄牛倒票成了大问题。网上有人晒高价票,有人说自己被“代抢”骗了钱。黄牛倒票分三类:有...

大模型转行土木工程,首个「打灰人」评估基准:检验读、改工程图纸能力

首个工程自动化任务评估基准DrafterBench,可用于测试大语言模型在土木工程图纸修改任务中的表现。通过模拟真实工程命令,全面考察模型的结构化数据理解、工具调用、指令跟随和批判性推理能力,研究结...

仅用一行代码实现全网站暗黑模式(仅用一行代码实现全网站暗黑模式怎么办)

开源项目推荐:uViewPro正式开源!70+Vue3组件重构完成,uni-app组件库新选择推荐文章:element-plus同款主题换肤动画如何实现?-附完整源码经历了PMP和软...

“少写一行代码,5分钟狂刷一次下载,开发者8000美元就这么烧没了!”

只因为漏写了一行代码,macOS录屏工具ScreenStudio的开发者AdamPietrasiak意外烧掉了8000美元的流量费,连带着还让部分用户断了网。一个看起来微不足道的自动...

IE法提取网页数据(如何提取网页中的表格)

【分享成果,随喜正能量】我们不良的行为、不善的念头、不好的言语,都属于我们内心的暴力,要想获得平和,我们需要自我修习,学会控制情绪,学会内观反省并接近善良。。《VBA信息获取与处理》教程是我推出第六套...

从abc起步学做网站(4)(abc是哪几个网站)

上一次我们做了一个大多数网站使用的模板,带有顶部、左侧导航、右侧主内容、底部等板块。现在我们把它逐步扩展成一个论坛。一个论坛的基本功能有注册,登陆,发帖,回帖,看帖,删帖等,我们一步步来做。首先大多数...

黑客命令第16集:47种最常见的**网站方法2/2

31.工具1:网站猎手2:大马一个关键字:切勿关闭Cookies功能,否则您将不能登录插入diy.asp32.关键字:Team5StudioAllrightsreserved默认数据库:dat...

安卓最有名的网页编辑器(安卓网页设计工具)

安卓平台上有几款较为知名的网页编辑器,如Quoda、DroidEdit等,它们凭借丰富的功能和良好的用户体验受到广泛关注,以下是具体介绍:-Quoda:是一款强大的免费多语言代码编辑器,支持HTM...

918国际导航免费分享一款简洁模板+整站程序+数据打包-yungui

918国际导航免费分享一款简洁模板+整站程序+数据打包国际导航模板说明:搜索栏背景是动态型的,为了简洁本站没有搜索框以及文章页,只有首页一个,这样可以满足大部分人的需求了,毕竟大家只是大家导航而已...