20190121

一,历史回顾:20150528携程运维大事故

2015年5月28日上午11点开始,携程旅行网官方网站突然显示404错误页,App也无法使用,业务彻底中断。

据称是因为乌云网公布了携程的一个漏洞“携程旅游网服务器配置不当可导致官方邮件劫持”,携程修复后当天准备上线发布,但运维自动化系统有问题或者运维操作有问题,导致“发布不上去了,刚发就(根目录包括代码)被(物理)删”,虽然数据库还在,但应用都被删了,业务迟迟无法恢复。

当日下午,携程一度将流量切给了艺龙,但艺龙承受不了而雪崩宕机。

当晚19时许,离宕机过去8个小时后,携程旅行网手机APP首先恢复,但是提交订单仍然不稳定。

当晚22:45,携程服务全面恢复,至此,停服整整12个小时。

二,携程事故之后我们做了什么,最后落实了什么

当时我提出在Business Continuity Plan(BCP,业务持续计划)之外尽快落实Disaster Recovery Plan(DRP,灾难恢复计划)。

DCP的目标是:

  • 当IDC机房物理无法连接时,可快速异地重建生产系统。

它分为两个层级:

  • 代码和配置的灾难可恢复性;

  • 数据的灾难可恢复性。

时至今日其实通过以下做法间接达到了DCP的目标:

  • 代码和配置的灾难可恢复性:

    • Docker镜像:Web容器的配置都在Docker容器镜像里;

    • 私有分布式镜像仓库,能够做到在混合云多机房各处都有自动同步的镜像库;

    • 异地双活机制等于说异地备份了Nginx/DNS等服务配置信息;

    • CloudEngine(我们的研发协作平台)里保存了各种工程在不同环境里的应用属性(也是配置信息);

  • 数据的灾难可恢复性:

    • 异地备份:在iDB(我们的数据库自动化运维平台)的帮助下有数据库自动备份以及备份的可恢复性自动检查,并且做了异地备份;

    • 异地双活机制等于说异地同步了全量数据库。

三,20190120拼多多无门槛优惠券大事故

2019年1月20日凌晨1点到10点,整整9个小时,羊毛党徒们狂欢,从拼多多领取(而不是抢购)100元无门槛优惠券,据信拼多多损失高达数千万元。

据传,这个无门槛优惠券实际上对应于已过期的运营活动,但由于操作失误,导致凌晨又重新上线。

p.s.:

劵的来历:〃在拼多多官方的公告中指出此券为拼多多此前与江苏卫视《非诚勿扰》开展合作时,因节目录制需要特殊生成的优惠券类型,仅供现场嘉宾使用。除此之外,此种类型优惠券,从未在任何时候、以任何方式出现在平台正常的线上促销活动当中,甚至从未有任何线上入口。〃

四,拼多多事故对我们的启示,以及我们要做什么

运营规则,技术防护,风控预警,法律条款,电商行走江湖的四大护身法宝,缺一不可。

出了事儿不可怕,怕的是都没有人知道出事儿了。要不是当天上午有并发异常,拼多多技术团队也不会顺藤摸瓜发现被领走那么多券。

风控体系的建立,至关重要:

  • 我们已经上了业务保障平台和全链路追踪,能够实时监控第三方支付通道的活动,及时预警。但这还远远不够。

  • 应建立自动化的交易监控机制和风险监控模型,实时监控,及时预警;

  • 应通过分析欺诈行为特征创建反欺诈规则,对交易数据实时分析;

  • 应制定异常交易监测和处理的流程和制度;

  • 应依据已识别并确认的风险数据,建立黑名单数据库;

  • ……

每个电商都有规则漏洞,都有程序漏洞,无非是在多大范围内被黑产和赚客们薅羊毛。

风控体系包括对传统业务指标的监测和报警,至少能让我们发现系统潜在的漏洞,及时修补,而不是最后一个知道系统出事儿的人。

我们要把别人的历史当作自己的未来,这样才能知道过去人家错在哪里,我们现在应该怎么做。

欢迎关注云纵达摩院

再赠送旧文一篇,也是携程事故之后写的。

小伙伴们手滑集

郑昀 最后更新于2015/5/29


携程旅行网的技术团队今天注定是一个不眠之夜,我的猜测是自动化运维系统过于强大以至于误操作后覆水难收,加之历史悠久规模庞大各种新老系统交错,全面从新部署与平常迭代上线肯定不一样,难度系数更高。

这也就是为什么过去我反复强调审计历年来对我们做的企业内部安全审计非常重要,他们提出的意见,我们必须认真审视认真去落实。

为了警醒各位技术人员,下面列出本次携程误操作事件引发的各种手滑吐槽。

  • Rebuild:

    • 当年酷壳在亚马逊的时候,AWS的一个新人在工作第一天做熟悉开发环境自助培训时,他本来想连测试环境,结果连不上,老员工给了他一个配置,他没分清哪个是测试的,哪个是生产的,不小心联上了生产线数据库,把整个数据库给 Rebuild 了,导致全美 Netflix 停止服务数小时;

  • Recreate:

    • 某人用 hibernate 反向生成数据库的一张表,并且连的是测试库,结果一个配置没加,把所有的表都格式化掉并重新创建了一次。

  • UPDATE没有WHERE条件:

    • 十一年前,某人手写 SQL UPDATE 线上数据库,由于引号把 WHERE 子句截断,用户原创内容几乎全都被清空,不幸的是运维也出错了,备份程序停了半个月,于是全公司同事手工到搜索引擎快照中找回用户的文章。

    • 以前更新错误数据,结果手滑 where 条件还没写完呢,想动一下鼠标,结果点到执行。一下子把所有的采购单数据的某个金额给改了,后来 dba 立刻恢复我操作以前的数据,就这三五分钟的时间,客服那边就接到了超多投诉电话。

  • 配错了:

    • 有次做带宽调度算法,方向写错了,瞬间给一个 CDN 提供商搞了 100G 上下的带宽,持续 16 小时。给公司造成了近 20 万的带宽费用。某人至今最贵的bug。

  • 自己挖坑:

    • 某人曾把整个服务器全部抹掉了。事情是这样的,有一个硬盘是镜像备份,挂载的时候用 sda1 这样的名字,没有用 uuid。后来加了个硬盘,结果原来的数据盘成了 sda1,等于说从一个空盘做镜像。

    • 在高盛刚入职的时候一不小心把生产环境 compliance 数据库锁了,纽约 gsam 的 equity trading 停顿了15分钟,完了经理跟我说,没事儿,我闯过更大的祸。

  • 胆子太大

    • 好几年前刚开始学着做 windows 服务器管理,把几个 windows 服务禁用,结果造成有服务互相依赖启动不了,停机几十个小时。

  • 已然不知道该怎么说了:

    • 某年研发部所有电脑硬盘被偷,95%+的产品都丢了源代码,为了维护一个已经上线的产品不得已,挂 HttpHandler 来处理。

    • 某客户为了重新部署系统,将数据导出备份到移动硬盘,然后将 Raid 重新格式化,重新安装系统,当进行 Oracle 数据库重建,导入数据时发现,移动硬盘上的数据无法正确读取,文件缺失一半。

    • 曾经在 catch 里写过 system.exit。

    • drop 过生产环境数据库表的路过。

    • 刚入行时曾在代码里加过 system rm,然后测试环境里的大部分程序都失踪了,天真的以为是黑客干的。

    • 曾经把图片的地址都写成了“undefined”,上线后以为被 ddos 了。

  • rm -rf:

    • 血泪史参考《被小伙伴们吓哭了:可怕的命令》。

  • 理工科其他手滑方向:

    • 血泪史参考《理工宅之——那些年我们闯过的祸……系列》。

欢迎关注老兵笔记

中国IT史上两大严重事故对我们的警醒及预防措施的更多相关文章

  1. 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结

    本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言   MySQL作为开源技术的代表作之一,是 ...

  2. [转帖] 中国SaaS死或生之二: ERP两大邪术,尽出歪门邪路 ---- 挺好玩的

    中国SaaS死或生之二: ERP两大邪术,尽出歪门邪路   http://www.cniteyes.com/archives/33753   文章摘要:在数字化浪潮中,油腻ERP大叔的那些“歪门邪术” ...

  3. 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结

    史上最全的CSS hack方式一览 2013年09月28日 15:57:08 阅读数:175473 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我 ...

  4. 从史上八大MySQL事故中学到的经验

    本文列举了史上八大MySQL宕机事件原因.影响以及人们从中学到的经验,文中用地震级数来类比宕机事件的严重性和后果,排在最严重层级前两位的是由于亚马逊AWS宕机故障(相当于地震十级和九级). 一.Per ...

  5. HCNP学习笔记之史上最全华为路由器交换机配置命令大合集

    先来一张思科和华为命令的对照表: 史上最全华为路由器交换机配置命令大合集,熟练掌握下面的华为路由器交换机配置知识点,你只需花几分钟的时间就能明白华为路由器交换机配置.交换机的配置命令等等. 华为路由器 ...

  6. 史上最易懂的大数据 OTO

    史上最易懂的大数据 OTO http://network.51cto.com/art/201503/467068.htm 终于有人把O2O.C2C.B2B.B2C的区别讲透了 http://tech. ...

  7. Go 语言的下一个大版本:Go 2.0 被安排上了(全面兼容1.X,改进错误处理和泛型这两大主题)

    今年 8 月 Go 开发团队公布了 Go 2.0 的设计草案,包括错误处理和泛型这两大主题.现在备受瞩目的 Go 2.0 又有了新动向 —— 昨日 Go 开发团队在其官方博客表示,Go 2 已经被安排 ...

  8. Python实现十大经典排序算法(史上最简单)。

    十大排序算法(Python实现)一. 算法介绍及相关概念解读 算法分类十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn), ...

  9. Python实现十大经典排序算法(史上最简单)

    十大排序算法(Python实现)一. 算法介绍及相关概念解读 算法分类十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn), ...

随机推荐

  1. Nginx+Tomcat搭建高性能负载均衡集群

    一.       工具   nginx-1.8.0 apache-tomcat-6.0.33 二.    目标   实现高性能负载均衡的Tomcat集群: 三.    步骤   1.首先下载Nginx ...

  2. Project facet Java version 1.8 not supported JDK版本不对无法启动项目解决办法

    https://jingyan.baidu.com/article/6c67b1d69a59a02787bb1e30.html

  3. IP地址和MAC地址的关系

    IP地址是网络层的概念,而MAC地址是数据链路层的概念.IP地址在网络层上对不同的硬件地址类型进行了统一,从而提供网络互联的可能:而硬件地址在真正的数据传输中要用到.当应用程序把数据从源主机发送到目标 ...

  4. Android SlidingMenu 使用详解

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/36677279 很多APP都有侧滑菜单的功能,部分APP左右都是侧滑菜单~Slid ...

  5. ASP.NET Core 2 学习笔记(一)

    来势汹汹的.NET Core似乎要取代.NET Framework,ASP.NET也随之发布.NET Core版本.虽然名称沿用ASP.NET,但相对于ASP.NET确实有许多架构上的差异,可以说除了 ...

  6. GitHub 系列之「Git 进阶」

    1.用户名和邮箱 我们知道我们进行的每一次 commit 都会产生一条 log,这条 log 标记了提交人的姓名与邮箱,以便其他人方便的查看与联系提交人,所以我们在进行提交代码的第一步就是要设置自己的 ...

  7. (三)Maven使用入门之Hello World

    主要内容 编写POM 编写主代码 编写测试代码 打包和运行 到目前为止,已经大概了解并安装好了Maven,现在开始创建一个最简单的HelloWorld项目. 编写POM 就像Make的Makefile ...

  8. c# 如何找到项目中图片的相对路径

    c# 如何找到项目中图片的相对路径 string path = System.Environment.CurrentDirectory;//非Web程序if (System.Environment.C ...

  9. ELK---日志分析系统

    ELK就是一套完整的日志分析系统 ELK=Logstash+Elasticsearch+Kibana 统一官网https://www.elastic.co/products ELK模块说明 Logst ...

  10. JDBC知识详解

    一.相关概念 1.什么是JDBC JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它 ...