@
gkiwi > 在用户那里,拉下来内容发现有一个字符被替换了。。
你这就是 bit flip ,被来自宇宙的高能射线击中了……
=====
看了全部评论,感觉还是我最猛:直接跑去机房把别人(不知道谁的)服务器给格了…
2010 年项目要上线,公司领导跟其他集团借了俩服务器,我们驱车从上海去宁波机房…到了机房,小工带着我们到了机柜面前,指着机柜下方的两台机器和我说就是这两俩,在确认之后我就开始干活儿了…
过了许久他回到了我身边,观察了一下,面色凝重的跟我说机器指错了……
====
再说说 bit flip 把我们数据库炸了:
基础设施在 AWS 新加坡…发现的过程就是业务几乎全部超时,而后发现 Aurora ( AWS 性能很强的 mysql 兼容数据库产品)实例 CPU 持续跑满…当时搞不懂问题出在哪,因为 slow query 会在执行完才会打印出来。
事后看 slow query ,它在更新一个有几千万行的表,整个表的每一行数据都被更新了,用了两个多小时,可是这个库我们是当 KV 库用的:读取和写入都会带上 where id=xxx ,不可能更新整表…
还好我们当时也遇到了些性能问题,线上会对超 1 秒的 sql 记下 sql 原始内容。
经过对比,我们发现业务里的日志:update a=1,b=2,c=3,… where id=xxx ,而 Aurora 里的 slow query:update a=1,b=2,c=#,… where id=xxx
3 被替换成了# ,而#之后的全被 Aurora 当成了注释,where 没起作用,把整个表更新了…
在当时,这种问题我曾在 dropbox 的一篇 blog 里看到过,说的就是因为 dropbox 的客户端太多了,样本足够大,所以他们也会偶尔发生这种类似问题,所以对这个问题下的结论就是“被宇宙射线击中了”,不怪任何人……
字符 3 的二进制:00110011
字符 # 的二进制:00100011