中国IT史上两大严重事故对我们的警醒及预防措施
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史上两大严重事故对我们的警醒及预防措施的更多相关文章
- 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结
本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言 MySQL作为开源技术的代表作之一,是 ...
- [转帖] 中国SaaS死或生之二: ERP两大邪术,尽出歪门邪路 ---- 挺好玩的
中国SaaS死或生之二: ERP两大邪术,尽出歪门邪路 http://www.cniteyes.com/archives/33753 文章摘要:在数字化浪潮中,油腻ERP大叔的那些“歪门邪术” ...
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
史上最全的CSS hack方式一览 2013年09月28日 15:57:08 阅读数:175473 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我 ...
- 从史上八大MySQL事故中学到的经验
本文列举了史上八大MySQL宕机事件原因.影响以及人们从中学到的经验,文中用地震级数来类比宕机事件的严重性和后果,排在最严重层级前两位的是由于亚马逊AWS宕机故障(相当于地震十级和九级). 一.Per ...
- HCNP学习笔记之史上最全华为路由器交换机配置命令大合集
先来一张思科和华为命令的对照表: 史上最全华为路由器交换机配置命令大合集,熟练掌握下面的华为路由器交换机配置知识点,你只需花几分钟的时间就能明白华为路由器交换机配置.交换机的配置命令等等. 华为路由器 ...
- 史上最易懂的大数据 OTO
史上最易懂的大数据 OTO http://network.51cto.com/art/201503/467068.htm 终于有人把O2O.C2C.B2B.B2C的区别讲透了 http://tech. ...
- Go 语言的下一个大版本:Go 2.0 被安排上了(全面兼容1.X,改进错误处理和泛型这两大主题)
今年 8 月 Go 开发团队公布了 Go 2.0 的设计草案,包括错误处理和泛型这两大主题.现在备受瞩目的 Go 2.0 又有了新动向 —— 昨日 Go 开发团队在其官方博客表示,Go 2 已经被安排 ...
- Python实现十大经典排序算法(史上最简单)。
十大排序算法(Python实现)一. 算法介绍及相关概念解读 算法分类十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn), ...
- Python实现十大经典排序算法(史上最简单)
十大排序算法(Python实现)一. 算法介绍及相关概念解读 算法分类十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn), ...
随机推荐
- Day1 《机器学习》第一章学习笔记
<机器学习>这本书算是很好的一本了解机器学习知识的一本入门书籍吧,是南京大学周志华老师所著的鸿篇大作,很早就听闻周老师大名了,算是国内机器学习领域少数的大牛了吧,刚好研究生做这个方向相关的 ...
- 你不知道的JavaScript--Item24 ES6新特性概览
ES6新特性概览 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代 ...
- Java 保留两位小数填坑
下面直接上代码: DecimalFormat df1 = new DecimalFormat("#.00");DecimalFormat df2 = new DecimalForm ...
- Python 三级菜单 增强版
需要实现的功能是:三级菜单1.从文本内读出选项2.查询每一级的选项,并能对选项进行增/删/改功能3.每一级可以退出程序或者返回上一层 2018-5-14 更新内容 思路 实现过程中的BUG及解决方案: ...
- 一支烟的时间导致他错失女神,Python查看撤回消息,力挽狂澜!
2011年1月21日 微信(WeChat) 是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的免费应用程序,由张小龙所带领的腾讯广州研发中心产品团队打造 .在互联网飞速发展的下.民 ...
- Python bytes数据类型
Python3 中文本是Unicode, 由str类型表示. 二进制数据由bytes类型表示(如视频文件). Python3 不会以任意隐式的方式 滥用str和bytes, 所以不能拼接字符串和字节包 ...
- ApplicationContextAware 接口的作用
接口说明:当一个类实现了这个接口之后,这个类就可以方便地获得 ApplicationContext 中的所有bean.换句话说,就是这个类可以直接获取Spring配置文件中,所有有引用到的bean对象 ...
- bzoj 2510 弱题 矩阵乘
看题就像矩阵乘 但是1000的数据无从下手 打表发现每一行的数都是一样的,只不过是错位的,好像叫什么循环矩阵 于是都可以转化为一行的,O(n3)->O(n2)*logk #include< ...
- Feature Preprocessing on Kaggle
刚入手data science, 想着自己玩一玩kaggle,玩了新手Titanic和House Price的 项目, 觉得基本的baseline还是可以写出来,但是具体到一些细节,以至于到能拿到的出 ...
- 电梯调度二——曹玉松&&蔡迎盈
电梯初步版本 经过去实际大楼的调查和一周的学习,初步完成了电梯的制作,但是这个版本的电梯功能并不是很全面,而且界面有待于改善,现在做出了测试版本,稍后进一步跟进新的版本,现在的版本初步完成的是电 ...