从谷歌宕机事件认识互联网工作原理

原文转自:http://kb.cnblogs.com/page/166210/

  英文原文:Why Google Went Offline Today and a Bit about How the Internet Works

  译者注:本文中提到 CloudFlare 是一家总部位于美国旧金山的内容分发网络(CDN)服务公司,由 Project Honey Pot 项目的三位前开发人员成立于 2009 年。2011 年 10 月被华尔街日报评为最具创新精神的网络科技公司。

  今天,谷歌的服务经历了短暂的宕机事件,持续大概 27 分钟,对部分地区的互联网用户造成了影响。此次事件的原因深究起来需要进入互联网络那深邃的、黑暗的角落。我是 CloudFlare 公司的一名网络工程师,在帮助谷歌从此次宕机中恢复回来提供了一臂之力。下面就是事情发生的过程。

  大约在太平洋标准时间 2012 年 11 月 5 号下午 6:24 分/时间标准时间 2012 年 11 月 6 号凌晨 2:24 分,CloudFlare 的员工发现谷歌的服务中断了。我们使用谷歌的电子邮件等服务,所以,当它的服务不正常时,办公室的人会很快发现。我在网络技术小组工作,因此我立刻接上网络查看是什么情况——是局部区域问题还是全球问题。

  问题排查

  我很快就意识到,所有谷歌的服务我们都不能连接上——甚至包括连接 8.8.8.8,谷歌的公共 DNS 服务器——于是,我从追查 DNS 开始。

$ dig +trace google.com

  下面是我在探测 Google.com 的域名服务器时得到的回复:

  google.com. 172800 IN NS ns2.google.com.

  google.com. 172800 IN NS ns1.google.com.

  google.com. 172800 IN NS ns3.google.com.

  google.com. 172800 IN NS ns4.google.com.

  ;; Received 164 bytes from 192.12.94.30#53(e.gtld-servers.net) in 152 ms

  ;; connection timed out; no servers could be reached

  无法探测到任何服务器的结果证明确实有什么地方出了问题。尤其是,这意味着从我们的办公室将连接不到任何的谷歌 DNS 服务器。

  我开始网络层查找问题,看看是否是在这个通信层出了问题。

  PING 216.239.32.10 (216.239.32.10): 56 data bytes

  Request timeout for icmp_seq 0

  92 bytes from 1-1-15.edge2-eqx-sin.moratelindo.co.id (202.43.176.217)

  这里出现了奇怪的信息。通常,我们不应该在谷歌的路由信息中看到一个印度尼西亚的网络服务提供商(Moratel)的名字。我立即进入一个 CloudFlare 的路由器中查看发生了什么事。与此同时,Twitter 上世界其它地方的报告显示了我们并不是唯一遇到问题的地方。

  互联网路由

  为了理解是出了什么问题,你需要知道一些互联网是如何工作的基础知识。整个互联网是由很多的网络组成,这些网络被称为是“自治系统(AS)”。每个网络都有一个唯一的数字来标志自己,被称为 AS 号。CloudFlare 的 AS 号是 13335,谷歌的 AS 号是 15169。各个网络通过一种叫做边缘网关协议(BGP)的技术互相连接。边缘网关协议被称为是互联网的粘合剂——由它来声明哪个 IP 地址属于哪个网络,由它来建立从某个自治网络到另外一个自治网络的路由。一个互联网“路由”跟这个词的表意完全一样:由一个自治网络里的 IP 地址到另外一个自治网络里的另一个 IP 地址的路径。

  边缘网关协议是基于一个相互信任的体制。各个网络基于信任的原则告诉其它网络哪个 IP 地址属于哪个网络。当你发送一个数据包,或发送一个穿越网络的请求,你的网络服务提供商会联系它的上游提供商或对等提供商,询问它们从你的网络服务提供商到网络目的地,哪条路线最近。

  不幸的是,如果当一个网络发出声明说某个 IP 地址或某个网络在它的内部,而事实不是这样,如果它的上游网络或对等网络信任了它,那么,这个数据包最终将会迷路丢失。这里发生的就是这个问题。

  我查看了边缘网关协议传递的谷歌 IP 的路由地址,路由指向了 Moratel (23947),一个印度尼西亚的网络服务提供商。我们的办公室在加利福尼亚,离谷歌的数据中心并不远,数据包绝不应该经过印度尼西亚。很有可能是,Moratel 声明了一个错误的网络路由。

  当时我看到的边缘网关协议发来的路由是:

  [email protected]> show route 216.239.34.10

  inet.0: 422168 destinations, 422168 routes (422154 active, 0 holddown, 14 hidden)

  + = Active Route, - = Last Active, * = Both

  216. 239.34.0/24 *[BGP/170] 00:15:47, MED 18, localpref 100

AS path: 4436 3491 23947 15169 I

> to 69.22.153.1 via ge-1/0/9.0

  我查看了其它路由,比如谷歌的公共 DNS,它同样被劫持到了相同的(不正确的)路径:

  [email protected]> show route 8.8.8.8

  inet.0: 422196 destinations, 422196 routes (422182 active, 0 holddown, 14 hidden)

  + = Active Route, - = Last Active, * = Both

  8. 8.8.0/24 *[BGP/170] 00:27:02, MED 18, localpref 100

AS path: 4436 3491 23947 15169 I

> to 69.22.153.1 via ge-1/0/9.0

  路由泄漏

  像这样的问题在行业内被认为是起源于“路由泄漏”,不是正常的。这种事情并不是没有先例。谷歌之前曾遭受过类似的宕机事件,当时推测是巴基斯坦为了禁止 YouTube 上的一个视频,巴基斯坦国家 ISP 删除了 YouTube 网站的路由信息。不幸的是,他们的这种做法被传递到了外部,巴基斯坦电信公司的上游提供商——电讯盈科(PCCW)信任了巴基斯坦电信公司的做法,把这种路由方式传递到了整个互联网。这个事件导致了 YouTube 网站大约 2 个小时不能访问。

  今天发生的事情属于类似情况。在 Moratel 公司的某个人很可能是“胖手指”,输错了互联网路由。而电讯盈科,Moratel 公司的上游提供商,信任了 Moratel 公司传递给他们的路由。很快,这错误的路由就传到了整个互联网。在边缘网关协议这种信任模式中,与其说这是恶意的行为,不如说这是误操作或失误。

  修复

  解决方案就是让 Moratel 公司停止声明错误的路由。作为一个网络工程师,尤其是像 CloudFlare 这样的大网络公司里工作的工程师,很大一部分工作就是和其它世界各地的网络工程师保持联络。当探明问题后,我联系到了 Moratel 公司的一位同事,告诉他发生了什么事。他大概在太平洋标准时间下午 6:50 分/世界标准时间凌晨 2:50 分修复了这个问题。3 分钟后,路由恢复了正常,谷歌的服务重新可以工作了。

  从网络传输图上观察,我估计全球整个互联网用户的 3-5% 受到了此次宕机事故的影响。重灾区是香港,因为那是电讯盈科的总部。如果你所处的地区在当时无法访问谷歌的服务,你现在应该知道是什么原因了。

  构建更好的互联网

  我说这些就是想让大家知道我们的互联网上如何在一个相互信任的机制下建立起来的。今天的事故说明,即使你是一个像谷歌这样的大公司,外部你无法掌控的因素也会影响到你的用户,让他们无法访问你。所以,一个网络技术小组是非常必要的,由他们来监控路由,管理你与世界的联系。CloudFlare 公司每天的工作就是确保客户得到最佳的路由。我们照看互联网上的所有网站,确保他们的以最快传输速度提供服务。今天的事情只是我们工作内容的一个小片段。

时间: 2024-10-25 21:02:24

从谷歌宕机事件认识互联网工作原理的相关文章

怎样最小化云宕机事件的影响?

云计算并不是天生就是不可靠的,但是如同所有的IT形式一样,必须仔细挑选和管理云服务以实现特定的可靠性和可用性目标.这些步骤可以是合同形式的.是技术形式的或者甚至可能需要重新思考你的应用程序架构.如果没有经过慎重考虑,那么你从云计算中的收益可能要少于你的预期. SLA降低了使用云厂商数据中心而产生的风险 免受云宕机事件影响的第一步就是要评估云厂商数据中心的可靠性.大部分的云厂商都拥有着很少数量的数据中心,通常情况下只有一个,而这些数据中心易于产生与企业相同类型的故障.最广为人知的云计算故障往往是那

深入解析和反思携程宕机事件【转自https://www.infoq.cn/】

宕机时间 2015 年 5 月 28 日 携程网宕机事件还在持续,截止 28 号晚上 8 点,携程首页还是指向一个静态页面,所有动态网页都访问不了.关于事故根源,网上众说纷纭.作为互联网运维老兵,尝试分析原因,谈谈我的看法. 宕机原因分析 网上有各种说法,有说是数据库数据和备份数据被物理删除的.也有说是各个节点的业务代码被删除,现在重新在部署.也有说是误操作,导致业务不可用,还有说是黑客攻击甚至是内部员工恶意破坏的. 先说一下最早传出来的"数据库物理删除",其实这个提法就很不专业,应该

由Redis的hGetAll函数所引发的一次服务宕机事件

昨晚通宵生产压测,终于算是将生产服务宕机的原因定位到了,心累.这篇博客,算作一个复盘和记录吧... 先来看看Redis的缓存淘汰算法思维导图: 说明:当实际占用的内存超过Redis配置的maxmemory时,Redis就会根据用户选择淘汰策略清除被选中的key. 业务场景:用户通过微信入口来访问一个页面: 测试场景:通过多线程模拟定量的并发来访问页面服务: 涉及架构:springsession+Redis集群,容器部署: 问题描述:固定并发数压测10分钟,压测开始后半小时,Redis连接数激增,

平时人家说的宕机是什么意思?

对于我这样一个刚踏入互联网圈的新人来说,在跟圈内同事交流的时候,发现他们最近经常在讨论“宕机”这个问题.那么这个宕机到底是什么意思呢? 宕机,多指一些网站.游戏.网络应用等服务器一种区别于正常运行的状态,也叫“Down机”.“当机”或“死机”.宕机状态不仅仅是指服务器“挂掉了”.“死机了”状态,也包括服务器假死.停用.关闭等一些原因而导致出现的不能够正常运行的状态. 说到这,大家可能明白了原来宕机是和服务器有关的一种状态,通常开发和运维人员对宕机这件事最为敏感.服务器一旦宕机会给服务商或者访客造

从Appstore宕机看DNS解析的重要性

3月11日,就在苹果公司高高兴兴发布完AppleWatch后不久,其网站便惨遭全球性宕机,宕机故障的持续时间长达11小时,期间App Store.iTunes Store.iCloud等苹果互联网在线服务无法访问.如此大面积.长时间的网络服务中断,堪称近年来苹果在线服务最大的一次危机事件. 根据外媒网站报道,该次大规模宕机导致全球苹果用户无法访问和购买,对苹果造成至少2500万美元的直接损失:另外,此次重大事故也影响到了苹果的股价,事件后苹果股价大幅下跌了 1.82 %, 瞬间蒸发 130 多亿

云宕机

云计算正日益融入我们的生活,可能有时候我们都意识不到自己正在使用云服务.正因为如此云计算宕机的影响才更严重.我想,最近一个月发生的这些宕机事件给我们的启示有三点: 1.云计算不是万灵丹,我们不过是租别人的计算机而已.因此自己数据中心可能出现的问题就算是转向了云计算也依然存在. 2.云计算极大简化了用户对资源的操作,但这有好也有坏.有不知多少人为了你能正常使用操碎了心,但出了问题的时候你作为用户完全什么也做不了. 3.企业有自己的替代方案很重要.可以是另一家云服务提供商,也可以是自己后备的数据中心

如何有效预防宕机?你需要掌握这4个方法

随着应用架构的不断演进,IT 系统也变得越来越复杂,这样就容易产生各类宕机事件.就在今年,国内外就出现了多起宕机事故. 2015年1月27日,网友发现无法登陆 Facebook,页面显示「对不起,出故障了,目前正在抢修,会尽快修复」. 2015年3月11日,包括 App Store.iTunes Store.Mac App Store 以及 iBooks Store 在内的一系列苹果在线商店服务,遭遇大面积服务中断.据统计事故恢复时间长达11个小时. 2015年5月,陌陌.网易.支付宝.携程网.

【甘道夫】HBase随机宕机事件处理 & JVM GC回顾

一.引言 本文记录了困扰团队两周的HBase随机宕机事件的解决方案,并回顾了JVM GC调优基础知识,供各位参考. 欢迎转载,请注明出处: http://blog.csdn.net/u010967382/article/details/42394031 二.实验环境 16台虚拟机,每台4G内存,1核CPU,400G硬盘 Ubuntu 14.04 LTS (GNU/Linux 3.13.0-29-generic x86_64) CDH5.2.0套装(包括相应版本的Hadoop,HIVE,Hbase

Redis的KEYS命令引起RDS数据库雪崩,RDS发生两次宕机,造成几百万的资金损失

最近的互联网线上事故发生比较频繁,20180919顺丰发生了一起线上删库事件,在这里就不介绍了. 在这里讲述一下最近发生在我公司的事故,以及如何避免,并且如何处理优化. 间接原因还有很多,技术跟不上业务的发展,由每日百万量到千万级是一个大的跨进,公司对于系统优化的处理优先级不高,技术开发人手的短缺 第一次宕机20180913某个点,公司某服务化项目的RDS实例连接飙升,CPU升到100%,拒绝了其他应用的所有请求服务整个过程如下: 监控报警,显示RDS的CPU使用率达到80%以上,DBA介入,准