阿里、携程接力两天的服务故障,沸腾了整个码农界。
看热闹都不怕事儿大。光纤被挖,引得异地双活被嘲讽,逼着支付宝最后有人出来打保票,年底我们一定搞完异地双活;线上服务被删更是报复论、Bug论频频,还出现了异司双活的崇拜,携程只是道了个歉,但是各种开人、睡人的小道消息也没停下。
热闹之余,人民群众也没闲着,纷纷忆苦思甜,言必称曾经。
这个说,“曾经我把数据库truncate了,老大当时不给解决方案只给目标,修了一晚上,期间各种惊心动魄,第二天恢复了竟然没人发现”。
那个说,“曾经有个新员工,没分清线上环境和测试环境,把线上数据库Rebuild了,导致某网站下线几小时”。(注:此次携程下线8个小时,据公开资料显示,其每宕机一秒会损失人民币5000元)
。。。
就像说起苦日子,都是自己小时候家里穷,你说你吃过糠我就说挖过树皮。事实上,大多数互联网服务都是7x24的,线上问题肯定是天天有。@TimYang 更是写过一篇黑天鹅来表达这种见怪不怪。
这些苦又有什么可说呢?只是用来在自己遇到问题的某一天,聊以自慰么?
我们经常说,“吃一堑,长一智”,而我在每个团队里都在说的是,“真正聪明的人,可以从别人的问题里学到东西”。在我看来,更重要的其实在后面,后来又发生了什么?
依携程现在流言四出的状况,公关已然疯掉,明确的事故报告是很难了。但这不妨碍我们思考,要是发生在自己身上会发生什么?如果分析出来原因是程序Bug,如果原因是人为操作失误,如果是故意操作,结果会有区别么?我会在文后回答这个问题。
@左耳朵耗子 说得很直接
“技术上出故障是必然的。能否体现一个公司是技术公司,重要看这几点:1)故障的恢复是否有技术含量,2)公司对故障的处理方式,如果是通过加更多的流程,或是通过加更多的权限管控,或是通过处罚犯错误的人,或是上升到员工意识形态上,而不是去用更好的技术来解决,那么这个公司不会是个技术公司。”
但是遗憾的是,增加流程基本上算是大多数国产公司的首选,来个层层审批,更有甚者,来个线下审批什么的,让你一夜回到有纸办公的原始社会。
说一个前几天的故事。
我们服务升级,灰度部署一台机器后,把一个存储集群搞挂了。这件事的直接原因,是改了一行代码,没有压测就上了线。
服务最后通过降级扶住了,但是大家还是各出了一身汗,于是开会总结。总结的目的肯定是,如何避免同类事情的再次发生?有人提建议说,增加产品经理来做最后一级上线审批吧?
我当然是拒绝的。
为什么?我当然也知道增加审批的好处。首先,后续措施如果是加流程,那其实在暗示整个事情的发生受累于流程缺失,其他原因可以不再深究。
其次,再加一道审批,说明以后也不怕出问题了,因为最大的责任总会落在最后一个人身上,即使后面还是问题不断。
最后一点,对领导更有交待,如果你只是说Fix了一个服务的Bug,总有可能显得对问题不太上心,听起来也不太可靠。比较而言,增加流程就让人放心多了。
但是,我们聚在一起是为了做事,而不是为逃避责任不是吗?但是但是,人又是懒惰的。Larry Wall说,“好的程序员有三个宝贵品德,懒惰、没耐心和骄傲”。这话经过了一个又一个优秀的程序员的验证。
你要做事,又很懒惰。那除了让事情更快更好地完成,似乎别无他法。
加流程让事情更快了么?明显没有。每次服务上线多一层沟通,沟通意味着要协商另一个人的时间,然后你向他解释当前的情况。如果对方再不了解背景,那就足以让你崩溃死机了。
加流程让事情更好了么?没有。它对真正问题毫无益处,不幸的是,它还让整件事情变得更坏了。问题的根本原因在加流程的掩盖下蒙混过关,然后蠢蠢欲动在未来的某一天重新爆发。到了那时候,你依然需要分析整个事情,不同的是已经有了惯例,而这个惯例又会带来新的流程。
这就像纸尿裤。一个小孩尿了裤子,可以给他穿上纸尿裤。但是,健康成年人有穿的么?更危险的还在于,你不知道什么时候可以脱下来,因为是别人给你穿的,别人才不管你什么时候可以自禁了。
这也是很多公司为什么流程越来越重的原因,取消一个流程比增加一个流程要难得多。如果你能证明不需要一个流程也许在最开始就可以通过证明不增加它了。
回到总结会,我们又继续讨论了下去。经过复盘确认,当时的情况是,压测环境创建耗时费力,开发进度一再推迟下,经过团队讨论觉得没有问题,于是就跳过了压测步骤。
为什么可以跳过?因为整个技术团队都讨论了,评估这个压测可以不做(为什么我后文会讲)。这也是我拒绝产品经理审核的一个原因,因为他肯定没有技术了解整个服务,而风险管控最大的依据在于技术团队的评估。如果技术评估没有风险,他再来也是不会对结果有所改变的。
为什么决定这个压测不做了呢?因为我们两个负责人(本来也只有两个人),其中看了一眼文档(你没有看错),然后跟对方说似乎有个性能改进。另一个听到对方这么说,于是也看了一眼文档,下意识觉得那肯定是妥妥的了嘛。
这是什么鬼?思维惰性导致的循环依赖啊。实际上,只要再看一眼源代码,就知道不应该做这个改动了。但是两个人都没有去看,真是群愚的又一个例子。
选择不做压测,还有个原因,压测过程迟迟不能开展,而服务又着急上线。压测进展慢,因为压测没有计划,且在功能回归之后才进行。压测环境部署没有自动化,全部服务部署一次需要近十个小时,再跑完压测基本需要额外一天。而服务着急上线,是因为服务交付日期延迟了一周又一周。归根到底,整个团队研发效率的低下,已经导致完整流程跑不完了。
所以最后会议的决定变成了:
- 确定压测步骤的必要性,再少的代码改动都不可以绕过;
- 明确上线责任,而不是让责任继续分散,开发人员自己需要对新版本性能负责;
- 提前制定压测计划,在服务开发完后立即进行压测,与功能测试同时进行;
- 自动化压测环境部署,我们在云上构建服务,主机初始化和服务部署都使用脚本或管理工具自动化;
就在本文截稿之时,经过运维同事的努力,我们从零完整部署基准压测环境(支持100w同时在线)的时间,已经缩短到两小时以内。整个压测回归可以在三个小时内搞定。压测再也不是一个负担了。
当然研发效率的提高也在改进中,这是一个更大的话题稍后有机会再展开。
从这方面看,我们算一个技术公司么?我觉得是的,因为这样的公司里,不管遇到什么问题,技术的总会归技术。因为我们都相信,技术问题都可以通过技术解决。这句话也是对开始问题的回复。
所以亲爱的兄弟姐妹们,那个故障之后,你们得到的是流程还是技术改进呢?你们还好么?
相关推荐
在电子工程领域,特别是在工业自动化和电力传动系统中,逆变器故障...这份“电子功用-在逆变器故障之后多绕组感应电机的削减操作”的资料文档将详细阐述这些概念和技术,为相关领域的工程师和技术人员提供宝贵的指导。
**故障描述及处理办法:** 经过多次可恢复的门故障之后,电梯可能会进入不可恢复的故障状态。此时需要彻底检查门系统的各个部件,找出根本原因并进行修复。 #### SCIC无法获得SDIC信号 (0316) **故障代码:** Door_...
5. 预防性维护:在处理完故障之后,还应进行预防性维护和定期检查,以降低类似故障再次发生的概率。这包括对轨道电路的各个部件进行定期的清洁、润滑、紧固等操作,以及对轨道电路的状态进行监控。 6. 轨道电路故障...
求当单条连入ISP 的线路出现故障之后,访问互联网的流量自动切换到另一备份线路上,从而实现网络接 入的可靠性和故障的快速恢复。由于此需求被越来越多的公司所关注和应用,故在此对这一需求的解决方 案进行分析与...
在排除可能由编码器或电缆引起的故障之后,参考西门子数控系统手册提供的详细诊断步骤成为关键。具体来说,检查SMC30的参数p0405设置,确保编码器与正确的接口连接,例如X520或X23。对于不带R信号的方波编码器,需要...
有时候工程师处理了故障之后只是简单的做了一下汇报,并没有一些故障处理过程的记录,以及故障处理的详细时间记录,这样对需要追溯以前的具体情况的时候就束手无策了。 划分故障等级 故障级别 故障说明 故障处理第...
之后,可以使用监督学习(如支持向量机、决策树、神经网络等)或无监督学习(如聚类算法)构建故障诊断模型。 5. **故障诊断与预测**:基于选定的特征和构建的模型,可以对齿轮箱的故障进行诊断,即判断当前设备...
当S7-1200 PLC出现“IO设备故障”报警,但在实际检查中所有IO模块都显示正常时,这通常意味着存在一些非直观的问题需要深入诊断。以下是一些可能的原因和处理方法: 1. **通信问题**:尽管IO模块状态良好,但通信...
液压故障诊断是指对机械设备液压系统的运行状态进行判断,是正常或非正常,是否发生了液压故障,并且当液压系统发生故障之后,以确定液压设备发生故障的部位及产生故障的性质和原因。 液压故障诊断的过程包括三个...
之后,他们会查阅相关的故障码列表,找到对应的名称和故障描述,然后按照制造商提供的指导方针进行故障排查和修复。 由于电梯安全的重要性,对于故障码的正确解读和应用至关重要。故障排查不仅要求维护人员具备专业...
在确定故障之后,如何处理这些问题同样重要。电源故障是常见问题之一,必须确保电源供应的稳定性和足够的供电能力。清洁和防尘是维护计算机硬件的日常工作,定期清理可以防止灰尘积累导致散热不良和硬件故障。更换...
有时候工程师处理了故障之后只是简单的做了一下汇报,并没有一些故障处理过程的记 录,以及故障处理的详细时间记录,这样对需要追溯以前的具体情况的时候就束手无 策了。 2. 划分故障等级 "故障级别 "故障说明 ...
几次经历之后便有了收集整理所有电脑故障的想法,于是这个汇集了个人、报刊、网络的故障大全诞生了。本人水平有限,难免有疏漏之处,望提出指正!也欢迎同行提供稿件,我们共同进步! 常见系统故障 电脑小技巧 启动...
在确定系统存在故障之后,正交超平行空间的定向扩展成为关键步骤。通过扩展方向上带空间与正交超平行空间的交集情况,可以实现故障的隔离,即确定发生故障的特定子系统或部件。此策略将故障检测精确到了子系统或部件...
5. 测试电梯运行:在故障排除之后,需要进行电梯的安全测试和功能测试,确保电梯恢复正常安全运行。 在处理电梯故障时,安全永远是第一位的。因此,故障码的解读和处理需要由经过专门培训的技术人员来完成。同时,...
在了解了仪表自动化设备常见的故障之后,接下来介绍维护技术措施: 1. 周期性维护技术 周期性维护技术是一种预防性维护策略,旨在通过定期检查和保养设备,以预防故障的发生。在实施周期性维护时,需要重视安全仪表...
PLC模块在发生故障时,可以通过两种方式发出报警:一种是在数控机床产生故障后发出警报,另一种是在检测到数控机床故障之后发出警报。故障诊断时,可以依据PLC输入/输出状态梯形图来分析故障原因,并找到解决方法。 ...