携程网宕机事件还在持续,截止28号晚上8点,携程首页还是指向一个静态页面,所有动态网页都访问不了。关于事故根源,网上众说纷纭。作为互联网运维老兵,尝试分析原因,谈谈我的看法。

\\

宕机原因分析

\\

网上有各种说法,有说是数据库数据和备份数据被物理删除的。也有说是各个节点的业务代码被删除,现在重新在部署。也有说是误操作,导致业务不可用,还有说是黑客攻击甚至是内部员工恶意破坏的。

\\

先说一下最早传出来的“数据库物理删除”,其实这个提法就很不专业,应该是第一个传播者,试图强调问题之严重和恢复之困难,所以用了一个普通电脑用户比较熟悉的“物理删除”的概念。实际上,任何一个网站的数据库,都分为本地高可用备份、异地热备、磁带冷备三道防线,相应的数据库管理员、操作系统管理员、存储管理员三者的权限是分离的,磁带备份的数据甚至是保存在银行的地下金库中的。从理论上而言,很难有一个人能把所有的备份数据都删除,更不用说这个绘声绘色的物理删除了。

\\

第二个则是黑客攻击和内部员工破坏的说法,这个说法能满足一些围观者猎奇的心理,因此也传播的比较快。但理性分析,可能性也不大。黑客讲究的是潜伏和隐蔽,做这种事等于是在做自杀性攻击。而内部员工也不太可能,我还是相信携程的运维人员的操守和职业素养,在刑法的威慑下,除非像“法航飞行员撞山”那种极个别案列,正常情况下不太可能出现人为恶意的可能性。

\\

从现象上看,确实是携程的应用程序和数据库都被删除。我分析,最大的可能还是运维人员在正常的批量操作时出现了误操作。我猜测的版本是:携程网被“乌云”曝光了一个安全漏洞,漏洞涉及到了大部分应用服务器和数据库服务器;运维人员在使用pssh这样的批量操作执行修复漏洞的脚本时,无意中写错了删除命令的对象,发生了无差别的全局删除,所有的应用服务器和数据库服务器都受到了影响。这个段子在运维圈子中作为笑话流传了很多年,没想到居然真的有这样一天。

\\

为什么恢复的如此缓慢?

\\

从上午11点传出故障,到晚上8点,携程网站一直没能恢复。所以很多朋友很疑惑:“为什么网站恢复的如此缓慢?是不是数据库没有备份了?”这也是那个“数据库物理删除”的说法很流行的一个根源。实际上这个还是普通用户,把网站的备份和恢复理解成了类似我们的笔记本的系统备份和恢复的场景,认为只有有备份在,很快就能导入和恢复应用。

\\

实际上大型网站,远不是像把几台应用和数据库服务器那么简单。看似很久都没有变化的一个网站,后台是一个由SOA(面向服务)架构组成的庞大服务器集群,看似简单的一个页面背后由成百上千个应用子系统组成,每个子系统又包括若干台应用和数据库服务器,大家可以理解为每一个从首页跳转过去的二级域名都是一个独立的应用子系统。这上千的个应用子系统,平时真正经常发布和变更的,可能就是不到20%的核心子系统,而且发布时都是做加法,很少完全重新部署一个应用。

\\

在平时的运维过程中,对于常见的故障都会有应急预案。但像携程这次所有系统包括数据库都需要重新部署的极端情况,显然不可能在应急预案的范畴中。在仓促上阵应急的情况下,技术方案的评估和选择问题,不同技术岗位之间的管理协调的问题,不同应用系统之间的耦合和依赖关系,还有很多平时欠下的技术债都集中爆发了,更不用说很多不常用的子系统,可能上线之后就没人动过,一时半会都找不到能处理的人。更要命的是,网站的核心系统,可能会写死依赖了这个平时根本没人关注的应用,想绕开边缘应用只恢复核心业务都做不到。更别说在这样的高压之下,各种噪音和干扰很多,运维工程师的反应也没有平时灵敏。

\\

简单的说,就算所有代码和数据库的备份都存在,想要快速恢复业务,甚至比从0开始重新搭建一个携程更困难。携程的工程师今天肯定是一个不眠夜。乐观的估计,要是能在24小时之内恢复核心业务,就已经非常厉害了。

\\

天下运维是一家。携程的同行加油,尽快度过难关!

\\

故障根源反思:黑盒运维之殇

\\

携程的这次事件,不管原因是什么,都会成为IT运维历史上的一个标志性事件。相信之后所有的IT企业和技术人员,都会去认真的反思,总结经验教训。但我相信,不同的人在不同的位置上,看到的东西可能是截然相反的,甚至可能会有不少企业的管理者受到误导,开始制定更严格的规章制度,严犯运维人员再犯事。在此,我想表明一下我的态度:这是一个由运维引发的问题,但真正的根源其实不仅仅在运维,预防和治理更应该从整个企业的治理入手。

\\

长久以来,在所有的企业中,运维部门的地位都是很边缘化的。企业的管理者会觉得运维部门是成本部门,只要能支撑业务就行。业务部门只负责提业务需求,开发部门只管做功能的开发,很多非功能性的问题无人重视,只能靠运维人员肩挑人扛到处救火,可以认为是运维部门靠自己的血肉之躯实现了业务部门的信息化。在这样的场景下,不光企业的管理者不知道该如何评价运维的价值,甚至很多运维从业者都不知道自己除了到处救火外真正应该关注什么,当然也没有时间和精力去思考。

\\

在上文的情况下,传统的运维人员实际上是所谓的“黑盒运维”,不断的去做重复性的操作,时间长了之后,只知道自己管理的服务器能正常对外服务,但是却不知道里面应用的依赖关系,哪些配置是有效配置、哪些是无效配置,只敢加配置,不敢删配置,欠的技术债越来越多。在这样的情况下,遇到这次携程的极端案列,需要完整的重建系统时候,就很容易一筹莫展了。

\\

对于这样的故障,我认为真正有效的根源解决做法是从黑盒运维走向白盒运维。和Puppet这样的运维工具理念一致,运维的核心和难点其实是配置管理,运维人员只有真正的清楚所管理的系统的功能和配置,才能从根源上解决到处救火疲于奔命的情况,也才能真正的杜绝今天携程这样的事件重现,从根本上解决运维的问题。

\\

从黑盒运维走向白盒运维,再进一步实现DevOps(开发运维衔接)和软件定义数据中心,就是所谓的运维2.0了。很显然,这个单靠运维部门自身是做不到的,需要每一个企业的管理者、业务部门、开发部门去思考。因此,我希望今天这个事件,不要简单的让运维来背黑锅,而是让大家真正的从中得到教训和启示。

\\

感谢郭蕾对本文的审校。

深入解析和反思携程宕机事件相关推荐

  1. 服务器系统日志6008,DELL服务器宕机事件6008

    在DELL服务器上安装了windows server 2008 r2 64位标准版,客户在该操作系统上安装了自己开发的视频监控软件.服务器在运行一段时间后,会出现如下情况:(事件ID6008) 1.机 ...

  2. 纪实:嵌入式Elasticsearch服务因为gc无法释放内存,导致宕机事件

    场景描述 我们电商服务中使用了Elasticsearch嵌入式服务,然后再一次错误代码提交后,导致elasticsearch服务检索了大量数据使得内存无法释放,最后服务发生stop-the-world ...

  3. Redis的KEYS命令引起宕机事件

    摘要: 使用 Redis 的开发者必看,吸取教训啊! 原文:Redis 的 KEYS 命令引起 RDS 数据库雪崩,RDS 发生两次宕机,造成几百万的资金损失 作者:陈浩翔 Fundebug经授权转载 ...

  4. 如何降低数据中心宕机事件的影响

    大多数人在生活或工作领域中都不希望出现连接中断的情况,尤其是在以数字生活方式为主的今天,所以数据中心基础设施变得越来越重要.对于许多消费者来说,他们希望自己的数字产品和服务能保持正常工作,所以当发生宕 ...

  5. 回顾2019年5个重大宕机事件

    任何时候发生网络服务中断,都会对全球业务造成极大的影响和破坏,而且还会导致收入和声誉的重大损失.尽管应用程序交付依赖于许多网络服务提供商(ISP),但它也越来越依赖于面向网络的服务的大型且复杂的生态系 ...

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

    摘要:谷歌服务器经历了短暂的宕机事件,持续大概27分钟,对部分地区的互联网用户造成了影响.此次事件的原因深究起来需要进入互联网络那深邃的.黑暗的角落. 译者注:本文中提到CloudFlare是一家总部 ...

  7. AWS 再次发生宕机事件,云时代下的我们该如何补救?

    屋漏偏逢连夜雨.据外媒 ZDnet 报道,美国东部时间上午 10:26 左右,AWS 网络再次开始出现严重的问题.根据 Outages 邮件列表(供 ISP 和网络运营商报告和跟踪重大互联网问题的中央 ...

  8. 宕机事件为何频发?云原生时代,需要什么样的运维保障体系?

    美联储支付系统宕机.亚马逊云服务宕机.国内 B 站等互联网服务平台宕机--近年来,全球范围内宕机事件频发,系统稳定性逐渐成为行业关注的焦点. 随着互联网服务深度融入生产生活,软件需要完成多样化的需求, ...

  9. 阿里云香港云服务器不知道算P几事故的史诗级宕机事件复盘

    上个周日12月18号,阿里云香港服务器发生了都不知道算 P 几事故的史诗级宕机事件,整个事件导致香港地区 C 区 ECS.OSS.EBS.RDS 等云服务大范围不可用,故障时间从 早上 8 点多一直持 ...

最新文章

  1. 【组队学习】【35期】李宏毅机器学习(含深度学习)
  2. 2016大一计算机基础操作题,2016大学计算机基础试题及答案
  3. mysql update 行迁移_Oracle行迁移和行链接详解
  4. 数据查询(1)-简单查询(芮)
  5. 一个简单的 Generic Factory 类
  6. TRUNCATE DELETE
  7. (二)Linux 权限
  8. codeforces 906C
  9. 在Sublime Text 2下面开发Sass
  10. 快速中值滤波利用VC++和OpenCV调用其封装的动态链接库出现的错误和处理
  11. oracle 基本dos命令,Oracle 常用 Dos命令
  12. 错误一例:expected expression before } token
  13. 朋友圈点赞图在线生成源码
  14. 华硕主板如何用u盘启动计算机,华硕主板怎么设置u盘启动
  15. Python入门_打印矩形
  16. SQL(oracle)常用命令
  17. 1688.item_get API接口
  18. 电容或电感的电压_如何通俗的理解电流,电压,电阻,电容和电感电工技术知识学习干货分享...
  19. 三角形面积的两种计算方法
  20. 如何将GPU中list类型的数据转移到CPU

热门文章

  1. LeetCode 23. Merge k Sorted Lists--Python解法--优先队列,分治法
  2. C++ CORE DUMP gdb 调试
  3. @ImportResource-SpringBoot使用xml配置Bean
  4. android中的Json一
  5. Android Studio编译好的apk放在哪里?
  6. python数据库pymysql_Python——数据库04 Python操作MySQL pymysql模块使用,python,04python,MySQLpymysql...
  7. php mysql两个表合并_php操作mysql两个数据库中表的数据同步
  8. xampp测试php代码,php用xampp测试
  9. 使用mysql_MySQL 的安装与使用(一)
  10. winform 让他间隔一段时间 执行事件 且只执行一次_Redis 事件机制详解