1.8.1防错设计
2011年9月,一个网络配置多了一个斜杠,引发大面积的DNS宕机。
2012年1月,应业务人员要求,一个技术人员在生产环境里执行了一个脚本,清理过期账号。但由于业务人员给的数据有问题,导致这个脚本删除了一批真实用户的账号。
2013年2月,SSL证书忘记更新,证书过期导致存储服务大面积不可用。
2014年7月,在一个IaaSVMAgent的紧急发布中,工程师为了省时间,用了一个非常规的方法,结果IaaSVMAgent被当成PaaSAgent发布,引起大量用户的服务中断。
所以,向以下列举的三个精益制造案例学习,做好“防错设计”,能从根源上杜绝一大批故障和线上问题,达到“上医治未病”的效果。
1.Poka-yoke
Poka-yoke是精益制造(LeanManufacturing)领域的一个概念,意思是“防错”。Poka-yoke的概念最早是新乡重夫在丰田汽车引入的。
例如,笔者在欧洲国家自驾的时候,因为看不懂加油机器的文字,所以担心加错油,但马上发现,如果搞错了,那么加油管是插不进去的。柴油的加油管是插不进汽油车的加油口里的,汽油的加油管也插不进柴油车的加油口里。当时就觉得这个设计很好、很安全,能够防止出错。这就是一种典型的行为塑造约束(Behavior-ShapingConstraint)。
Poka-yoke的反面案例也有。美版初代XBox刚刚出来的时候,只支持110V的电源,插到国内的220V的电源上,就烧掉了。这就是防错设计没做好的后果。如果110V和220V的电源插座的形状是不一样的,那么就能避免这种问题了。
2.软件开发的Poka-yoke
软件开发也有Poka-yoke。拿支付系统来说,在预发环境做验证的人员在用小键盘输入“3”的时候,不小心触碰到了回车键,于是页面表单被提交了,放款成功。不巧的是,表单里面的手机号码是上一次操作填写的,虽然是一个测试账号的手机号,但有对应的线上真实用户。于是造成了一次资损。
这个故障的场景和汽车的一个Poka-yoke是类似的。很多自动挡汽车在行进中无法更换档位,这样就避免了在行进过程中,由于不小心碰了一下操纵杆档从D当变成了N档甚至是R档,造成事故。
3.支付系统防错设计的六类常见问题
防错设计的核心思想是:人总是会犯错的。人会手抖、会忘记事情、会看错……怎么针对这些问题在系统设计时进行加固,减少人犯错的可能,或者减少人犯错的后果严重性。防错设计和容错设计(FaultTolerance)不一样,容错设计更关注系统的错误,如网络问题、硬件问题等,而防错设计更关注人的错误。