高级农民
- 积分
- 1040
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2016-11-9
- 最后登录
- 1970-1-1
|
14 个主题 | 462 个回复 | 最后更新:2024-5-6 05:45
注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
LZ是network相关从业者 有一些想法分享一下
FB为什么炸网上已经有很多解析,大家可以搜一搜。
大概就是facebook的BGP configuration出错导致fb的DNS record消失,
这样你去找facebook的IP地址就找不到了。
但是有趣的是,这次facebook炸了却波及到了好多其他网站。
所以这里我大概分析一下,为什么除了facebook其他的网站也被波及到。
一点点背景:
a. DNS解析器(DNS resolver)简单来说可以把域名(www.google.com)解析成IP地址(e.g. 142.250.64.68),任何网站背后都是很多ip地址(根据request所在的位置找到对应服务器)。所以你的每一个网络请求都要先通过DNS resolver给你解析出来。
b. DNS服务器(DNS authoritative nameserver): 各大公司serve自己ip的地方,DNS解析器自己也不知道facebook.com的ip是什么,他要去问facebook的nameserver。
Process:
1. 从源头开始facebook BGP的configuration出错了,这样就会导致各DNS解析器(e.g. 8.8.8.8, 1.1.1.1, etc. 其实大部分人用的都是运营商自己的DNS解析器)无法找到facebook的DNS record。比如之前8.8.8.8问fb的nameserver "facebook.com的IP是多少啊?" fb的nameserver说 "x.x.x.x"。 现在8.8.8.8再问,fb的nameserver直接回复 "facebook.com不存在" 或者 "我现在炸了" (NXDOMAIN / SERVFAIL)。
2. DNS是用的UDP传输的,经常会有丢包packet loss或者其他问题比如上述“我炸了请重试”,所以各个解析器都会设置一些重试retry。因为找不到facebook的DNS record解析器们就会一直疯狂retry。
3. 因为FB的scale太大,而且是全球性的,大家越连不上facebook就会总点刷新,解析器们每次失败也会又重试很多次,这种巨大量的retry很多DNS解析器也承受不住。
4. Retry太多了DNS解析器们受不了会集体爆炸,这样所有网站的DNS解析都会收到影响。比如某个解析器在这个地区有100个task,各个task逐渐开始炸,比如50个炸了,所有剩余请求都积压到剩的50个了,这样load增加,速度就会变慢,到最后受不了了剩下的一起全炸了。(当然google的8.8.8.8只是小炸变慢了一点,但是小的DNS resolver就会炸的很严重,这也是为什么twitter上很多人说上不了网把DNS改成8.8.8.8就好了)。
5. 这样上任何网站都会变慢甚至无法连接,直到FB和DNS resolver们恢复。
非常有趣的是,这就是典型的蝴蝶效应,虽然看起来是只是facebook的bgp configuration出错了,但是差点炸掉了整个互联网。
假如几个facebook这么大体量的公司同时发生这种"小"错误,这样就能把全世界所有dns解析器炸掉,比如连google的8.8.8.8也无法幸免。整个互联网全都沦陷也是可能只是一瞬间发生的事。
补充内容 (2021-10-05 08:06 +8:00):
对DNS感兴趣的可以看一下https://www.cloudflare.com/learning/dns/what-is-dns/
补充内容 (2021-10-05 10:09 +8:00):
Cloudflare也发了关于这次事件的blog: https://blog.cloudflare.com/october-2021-facebook-outage/
感兴趣的可以看一下细节 大概和我这里说的差不多
补充内容 (2021-10-05 12:18 +08:00):
有很多人问关于retry的问题
其实这个retry来自于多方面 可以来自DNS resolver自己,也可以来自浏览器,也可以来自用户手动刷新,又或者是运营商中间的哪个layer。
举个简单的栗子:每一次facebook.com的request,DNS resolver自己retry3次,你用的chrome浏览器retry3次,加载不出来你非常着急自己再点浏览器refresh三次 这乘在一起就是3*3*3=27次。这还不考虑中间某些其他layer。
这仅仅是一次对facebook的request被放大了几十倍。这对于很多dns resolver简直是噩梦。于是纷纷承受不了就炸了。于是别网站的request也变慢,大家刷新的更多了,恶性循环。
有时候很多小东西经过乘积或指数放大有比预想要大得多且可怕的多的影响。 |
上一篇: Facebook、Instagram、WhatsApp和Workplace在大规模故障中宕机下一篇: 今天的Facebook:不能好好上班也没法完全躺平...
|