作者 | 马超       责编 | 张红月

出品 | CSDN

弱小从来不是生存的障碍,傲慢才是。10月4日 FaceBook 发生了一次史诗级中断事故,故障期间 FaceBook 所有旗下APP全面对外服务中断,而且故障的时间长达7个小时之久。根据 Facebook 最新的声明来看,故障的原因是由于工程师错误地发出了一条指令,切断了 Facebook 的数据中心“在全球范围内的所有网络连接”。

恰恰是这条简单的指令,造成的影响却是史诗级别的,本次宕机事故非常彻底,甚至Facebook自己的内网也完全报废,无法访问。笔者看到事件解决过程中不少运维方面的大牛都直接把故障的原因定位到了DNS和BGP方面。

从Cloudflare的博客中也能看到,问题的原因也确实出在了BGP指令方面,不过我们要问的是为什么这样一条小小的指令会造成如此之大的影响。

route-views>show ip bgp 185.89.218.0/23
% Network not in table
route-views>

上一次Facebook的全面中断事件还要追溯到7年的2014年6月当时Facebook在APP更新版本时出现了一些问题,随后就有一些用户开始无法登陆Facebook,不过Facebook方面很快就找到了问题所在并进行了修复,并在半小时之内就让服务100%恢复了正常。

这次史诗级故障也不是脆弱的BGP协议第一次出现问题,就在2020年1月23日,所有后缀为.net的域名也出现无法解析的情况,经DNS顶级根服务运营商ISC调查,发现.net域名缺失了关键的A记录和AAAA记录,所有.net后缀的互联网地址从ISC的F根服务器全部消失了,接下来美国宇航局(NASA)运营的E根服务器也遇到了类似的问题。

那次故障中ISC定位问题的时间也很快,在5分钟内就迅速将问题定位在他们与Cloudflare合作运营的节点上,后来Cloudflare很快查明原因是由于他们刚刚发布的变更代码所造成的问题。但最终问题的解决也花了近两个小时的时间,因为撤回导致该问题的BGP通告,出乎意料的长。

通过对比我们可以看到,本次Facebook的故障无论是从影响程度,还是故障时间上讲都堪称是负面教材的典型,而历史一再告诉我们,只要能从历史经验中总结一点教训就能避免悲剧的发生,因此复盘这次史诗级的故障,对于我们来说肯定也会是大有裨益。

什么是BGP协议

BGP边界网关协议是EGP外部网关协议的一种, 顾名思义BGP处理外部网络区域的之间路由信息的协议,其主要功能是与其他网络自治区的BGP协议系统交换网络路由信息。我们看到EGP相对的IGP内部网关协议,拥有众多储如RIP、OSPF、IS-IS、IGRP、EIGRP的协议族实现不同。EGP家族当中几乎只有BGP这一根独苗是可用的,BGP几乎是唯一一个能够处理独立路由域间的多路连接的协议。

我们举个例子来说明一下这个BGP协议,比如互联网上有7个独立的网络自治区域AS (Autonomous System),他们分别是AS1-AS7,这7个AS之间相互的物理连接情况用橙色线段表示如下:

那么如果AS1区域内的设备想要与AS7区域内的设备产生连接,那么具体的路由路径应该选择AS1-AS4-AS5-AS6-AS7的蓝色路径,还是选择AS1-AS2-AS35-AS6-AS7的红色路径就是BGP协议要解决的核心问题,其实BGP之类的路由协议从宏观层面来看都有点像旅游规划,也就是可以把问题转化为从AS1到AS7的道路中哪条道路最快。BGP协议通过一系列的报文,Internet发布其前缀路由信息,并维护一个有限状态机,并以此来完成路由策略的收敛,但如果发布了错误的通告信息,那么就没有人能够知道如何连接这个错误区域了。当然本文不是要介绍BGP协议,这里各位读者对于BGP的有关概念性有所认识就可以了。

事件处理故障复盘

正如Facebook公告所说,事故的一开始,Facebook已经停他们DNS前缀路由的BGP通告也就是说Facebook的DNS无法访问,也就是说一条错误的指令让Facebook整体下线了。

route-views>show ip bgp 129.134.30.0/23
% Network not in table
route-views>

在故障期间通过dig、nslookup等命令解析Facebook的DNS域名全部返回SERVFAIL,而且正如我们上文介绍,如果发布了错误的BGP通告,那么没有人能够再从互联网上找到你,这和人工破坏了Facebook数据中心的连向互联网的光纤线路,从结果上看没有任何本质区别。

根据CloudFlare的博客显示,Facebook的故障差点把整个互联网搞崩,因为Facebook用户太多了,用户在无法正常登陆APP时会疯狂的发起重试,而且由于Facebook域名解析缓存已经在各级DNS服务器上全部失效了,这就给根DNS也就是1.1.1.1造成了巨大的压力。据说这使1.1.1.1的DNS解析查询的速度比平时高出30倍,所幸1.1.1.1顶住了压力,Facebook故障期间绝大多数的DNS解析请求的返回速度都稳定在10毫秒左右,否则一旦根DNS也崩溃那么后果将不堪设想。

最终在7个小时之后,Facebook终端重新向互联网通告了他们的路由,至此服务才最终恢复。

通过本次事件我们能学到了什么

以Facebook那些大牛人物的实力,从发现故障到定位故障原因的时间不会超过1分钟,甚至很有可能在刚刚指行完那条错误的BGP通告命令之后就发现问题了,但是故障依旧持续了长达7个小时。再结合Facebook内网全部中断的细节,那么我们可以推出隐藏在这背后的重要结论,那就是相关的错误命令把Facebook的VPN通道也全部影响了,我们知道Facebook目前在疫情的影响下,美国区的员工还处在远程办公的状态,也就是说在错误指令生效之后,远程运维工程师自身的VPN以及逃生通道也全部失效了,而数据中心现场值班的人员可能只会加电、重启等简单操作,甚至不排除现场人员连登陆到核心网络设备的权限都没有,一切都得指望远程运维的人员到现场解决了。

假设自己不出现低级失误,才是最大的低级错误:从上述分析中我们可以看出,Facebook的网络工程师对于自身的能力太过自信了,以至于他们可能就没有认真分析过回退方案的可行性,而故障发生之后才发现网络设备已经无法通过远程方式登陆了,回退方案执行的前提已经崩溃。因此在发布任何版本之前都要根据其造成的最大负面影响制订预案,假定自身不会出现低级失误的想法是绝对错误的。

逃生通道是最后生命线,必须严格保持独立:从故障的时间上看,远程登陆的逃生通道也一定是受到了影响,从这里我们能吸取到的教训就是一定要在平时做好逃生通道的可用性验证,并且要尽量保证逃生通道的独立性,不能把逃生和日常运营的通道混为一谈。

作者:马超,CSDN博客专家,阿里云MVP、华为云MVP,华为2020年技术社区开发者之星。

往期推荐

“5G+AI”到底有啥用?

云原生时代,底层性能如何调优?

Redis很厉害,使用规范来啦

985大学的高材生只会写代码片段,丢人吗?

点分享

点收藏

点点赞

点在看

一行指令造成 60 亿美元蒸发,更让 Facebook 遭遇史诗级故障!相关推荐

  1. 今日头条优化实践: iOS 包大小二进制优化,一行代码减少 60 MB 下载大小

    摘要 苹果对 iOS App 大小有严格限制:下载大小超限会阻碍用户在蜂窝网络下载 App ,直接影响新用户转化:可执行文件超限将导致 App 审核被拒,直接影响上架.今日头条探索实践 __TEXT ...

  2. [快速] 一行指令暫時隱藏 Mac 桌面檔案 – 讓你凌亂的桌面不會被看見 - TechMoon 科技月球...

    原文網址:[快速] 一行指令暫時隱藏 Mac 桌面檔案 – 讓你凌亂的桌面不會被看見 首發於:科技月球 TechMoon 有時當我們要拍攝桌面照片時,或是遇到要展示電腦時,需要使用到桌面. 此時如果不 ...

  3. 如何评价小马智行投后估值60亿美元?无人车的追涨杀跌已经开始

    雷刚 发自 凹非寺  量子位 报道 | 公众号 QbitAI 半年左右,再次传出巨额融资. 自动驾驶公司PonyAI小马智行,在2月官宣丰田主导的4.62亿美元投资后,刚又被曝出了新一轮3亿美元新融资 ...

  4. 小红书最新用户量数据_小红书估值高达60亿美元?小红书超过蘑菇街了吗?

    知情人士透露小红书正在谈判筹集5亿美元资金,公司估值或高达60亿美元.消息人士续指,小红书的潜的投资者包括软银的愿景基金.红杉中国和高瓴资本.另有消息指的确有数家美元基金已给出投资意向书. 这是不是意 ...

  5. 苹果支付60亿美元与高通和解?亚马逊不再运营中国国内市场业务;华为愿同德国签“无间谍软件协议”;Facebook开发语音服务...

    戳蓝字"CSDN云计算"关注我们哦! 重磅先知         亚马逊:从7月18日起将不再运营中国国内市场业务 传Facebook开发语音服务:将与亚马逊和苹果Siri竞争 瑞银 ...

  6. 豪拒60亿美元,天真的程序员CEO最终被自己的公司解雇

    全文共3328字,预计学习时长9分钟 安德鲁·梅森,"团购网"(Groupon)联合创始人兼前CEO. 获得音乐学位之后转而去学习编码,提出的网站创意收到前任老板的注资,用一百万建 ...

  7. 估值超60亿美元,GitHub 多年劲敌 GitLab 即将上市

    2021 年 9 月 17 日,知名软件开发平台 GitLab 向美国证券交易所提交招股书,计划在纳斯达克上市.文件中显示此次 GitLab 计划发行规模为 1 亿美元,股票代码为"GTLB ...

  8. 微软网络业务九年令人失望:亏损60亿美元

    据国外媒体今日报道,微软网络业务成立九年来已经累计亏损了60亿美元. 虽然微软必应(Bing)最近获得了初步成功,而且还与雅虎建立了合作关系.但微软的互联网业务过去九年的财务业绩却令人失望:该业务过去 ...

  9. 2016年第二季度全球以太网交换机销量破60亿美元

    据市场调研公司Dell'Oro Group的最新报告显示,2016年Q2全球以太网交换机第二和第三层市场营收超过60亿美元,同比增幅达6%.当中,企业园区的反弹,中国地区季度的记录销量,加之云计算强势 ...

最新文章

  1. 调用个别f5 负载端口为80的vs时,返回值为空的问题
  2. java随机产生100个大小写字母_Java生成固定长度的随机字符串(以大小写字母和数字)...
  3. 在nginx上部署vue项目(history模式);
  4. 《大型网站技术架构》5、6、7章阅读笔记
  5. Struts2内置拦截器和自定义拦截器
  6. Python笔记-UiSelector中class定位
  7. MATLAB读取text文件数据,拟合曲线
  8. 两台linux电脑怎么互推文件夹,Llinux文件目录权限及chmod命令简析
  9. 报错处理——# Creating Server TCP listening socket *:6379: bind: Address already in use
  10. springboot @value 默认值_原创 | 搞定默认值
  11. 中职学校计算机课程标准,中等职业学校课程标准发布
  12. 2019年创新中国网课答案
  13. 考研数学1-考试大纲(2022年)
  14. 企业招聘面试的经典6类问题
  15. AI科普(一):什么是人工智能?
  16. iphone上app store切换国家和地区
  17. leaflet 画扇形
  18. Threejs系列--14游戏开发--沙漠赛车游戏【纹理贴图之loading加载】
  19. Flash/Flex学习笔记(38):动量守恒与能量守恒
  20. L1-039. 古风排版解决

热门文章

  1. 【学习笔记】局域网基本概念和体系结构,以太网、无线局域网与PPP协议、HDLC协议
  2. 计算机网络 --- 局域网中的以太网
  3. scrapy框架_Python:Scrapy框架
  4. Windows和linux提权方法,Windows与Linux本地用户提权体验(一)
  5. 2017电大c语言考试时间,2017年电大 《c语言程序设计》a课程考核说明.doc
  6. 原来数学才是世界上最浪漫的学科!
  7. 逃离深圳的华为,原来可以这么美:研发小姐姐第一天上班游记
  8. .val()数据乱码_【目标检测数据集】PASCAL VOC制作
  9. ubuntu16.04安装gcc g++7.5.0及各个版本的切换
  10. GRPC: 如何实现分布式日志跟踪?