CloudFlare于2019年7月2日全球断网事故复盘

搬瓦工机场JMS

直接原因:新增了一条WAF防护规则,正则表达式编写错误(具体如下)

  1. (?:(?:"|’|\]|\}|\\|\d|(?:nan|infinity|true|false|null|undefined|symbol|math)|\`|\-|\+)+[)]*;?((?:\s|-|~|!|{}|\|\||\+)*.*(?:.*=.*)))

复制代码

其他错误点:
1.An engineer wrote a regular expression that could easily backtrack enormously.
2.A protection that would have helped prevent excessive CPU use by a regular expression was removed by mistake during a refactoring of the WAF weeks prior—a refactoring that was part of making the WAF use less CPU.
3.The regular expression engine being used didn’t have complexity guarantees.
4.The test suite didn’t have a way of identifying excessive CPU consumption.
5.The SOP allowed a non-emergency rule change to go globally into production without a staged rollout.
6.The rollback plan required running the complete WAF build twice taking too long.
7.The first alert for the global traffic drop took too long to fire.
8.We didn’t update our status page quickly enough.
9.We had difficulty accessing our own systems because of the outage and the bypass procedure wasn’t well trained on.
10.SREs had lost access to some systems because their credentials had been timed out for security reasons.
11.Our customers were unable to access the Cloudflare Dashboard or API because they pass through the Cloudflare edge.

虽然不能完全说经验主义害死人或者批评程序员不能写bug,但是按照CloudFlare的上线流程,这起事故本身是可以避免的

原文见:https://blog.cloudflare.com/details-of-the-cloudflare-outage-on-july-2-2019/
安徽网友:推锅程序员
黑龙江网友:估计阿三程序员干的
青海网友:如果仅按照博客的情况推断,WAF规则研发、运营、SRE、品质管理、公关……都有问题。不过在这种情况下,谁能不乱呢?
贵州网友:一句都看不懂
台湾网友:
简单来说就是(以下来自主贴中的错误点的归纳,仅限于个人理解)
1.WAF研发写了个带有bug的防护规则,而且也没有仔细看过;
2.测试没有严格遵循测试流程(测试经验不足或者开小差?);
3.CDN品质和SRE把能降低影响的一个关键模块下线了,为了性能,然后针对这一块还没有新的灾备机制;
4.下发规则是全球同步下发,导致问题产生更快;
5.故障回滚效率太低;
6.发现节点死了到被监控系统发现和报警,这中间时间太长了;
7.SRE登录节点正好遇上过期,重新登录系统花了一点时间;
8.官网和重要的API通讯系统也过了服务节点,导致也受到了影响。
辽宁网友:卧槽
大神,我只是随便灌下水而已,其实我能看懂,唯一看不懂的是最上边一行正则
青海网友:就是
.*(?:.*=.*)
河南网友:专门看过正则的东西,就是看不懂,头疼
上海网友:我是真的一个单词都看不懂
宁夏网友:我是真的一个单词都看不懂
澳门网友:正则一句不懂
上海网友:能写成这样裹脚布的正则,还不如堆几行脚本
海南网友:写几行脚本效率还未必有正则高
辽宁网友:
正则是效率最差的办法,因为对表达式还需要进行二次解析,越复杂的正则越糟糕。

除非能明显获得价值的情况下,否则不会去首先考虑使用正则的。
内蒙古网友:CDN防护用正则……这也太可怕了
黑龙江网友:正则代码用代码符号包起来,不然被替换成表情了
上海网友:感谢,已经编辑
山东网友:正则本来就是提升效率的
比如伟大的perl
缺点是要看平台的内嵌语言和模块是啥
cf放一段这玩意而没有数据规约
只能说测试不完善回滚太慢了
再说好听点就是cf家服务器太多

青海网友:博文末尾的附录讲解了正则表达式造成CPU资源耗尽的原因。忽略掉正则表达式中不必要的部分,可以将之看为`.*.*=.*`,这个表达式有过多的贪婪匹配,导致回溯次数过多,从而耗费了cpu的资源。
从附录来看,cf 可能会更换正则表达式引擎的算法,避免回溯。

这份博文已经有译文了。

未经允许不得转载:美国VPS_搬瓦工CN2 GIA VPS » CloudFlare于2019年7月2日全球断网事故复盘

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏