大型互联网应用基本可以认为就是一个熵增理论的最好例子
太复杂了 高度依赖运维
你以为看上去很稳定的一个系统 可能需要每个礼拜一跑一个脚本清一清数据,每个礼拜二再跑个脚本检查各个依赖,每个礼拜三再跑个别的什么脚本检查别的什么东西,每个月再定期更新乱七八糟依赖
然后降本了 故意的也可能无意的也可能 离职时候忘了交接一个运维的任务,或者交接的不清楚, 然后某个脚本没有跑,某个地方存储炸了,某个地方依赖过期了,导致连不上另外一个依赖,然后系统崩了
崩了之后重启还不一定有用,缓存没预热,系统没做好fail fast的处理,突如其来的海量请求直接往数据库压,然后数据库就死给你看,然后再尝试重启,再挂,这时候再想着给数据库做纵向升级,基本半天过去了
表面看上去固若金汤的系统,背后可能都是草台班子
别问我咋知道这么多,作为Azure MySQL的PM,负责的还是Maintenance的feature,看了太多客户的和我们自己的事故报告了。。。
<hr/>补充聊一下评论区非常热的两个点
- 自动跑这些脚本
- 大家有没有想过,这些脚本,可能本来就是某些自动化任务的产物,然后啥时候跑这个脚本,有时候理由说出来挺搞笑的,可能是为了某个feature去清理数据,但是又有可能影响生产,最后发现每周某一天这个feature用量比较少,就去跑一下这个脚本,跑之前检查下相关telemetry
- 还有些脚本,最常见了,出了个bug, 但是修bug又要排期,只好短期用个脚本workaround一下,发现这个workaround挺好,那这个bug就不修了吧,久而久之,这脚本就在那儿了
- 离职交接不够仔细
- 很多人觉得离职时候是一堆paper work签一下,我知道你有这些脚本了就ok了,但是问题在于,光知道了还不够,好一点的人会告诉你,为什么会有这个脚本,一般人就告诉你,什么情况下,跑哪个脚本,就ok了,没有演练,交接结束,等到出问题的时候,新人第一次跑这个脚本,嘎了,发现这脚本咋还重启机器啊?然后全部完蛋
上面这些都是大家摸鱼这么多年面对运维可能看到过的场景,草台班子确实很草台班子,但是没办法,这就是大型互联网应用的命,熵增不可避免
另外非常有趣的一件事,对于工具类,系统类应用(比如Oracle数据库,Visual Studio, 甚至于各种库),他们也有一堆屎山,但是这类应用出问题的概率小很多,因为这些应用实际上不是运维在守着,而是茫茫多Unit Test在守着,互联网应用由于要快速迭代,Unit Test数量显而易见是不如这些工具类系统类应用的。
<hr/>补充一个非常黑色幽默的彩蛋:刚刚阿里云的电销打电话给我来推荐阿里云套餐附带各种折扣了 |