系统出了故障,我们又一次掉进了坑里,好不容易爬出了坑,拍拍尘土继续前行,却忘了回头看看这个坑当初为啥我们就没看见。每一次入坑出坑的过程都有或大或小的代价,值得我们回头看看。

系统故障

每一次系统故障多是因为程序运行失败或错误,偶尔也会有因为环境问题,比如:机器掉电、硬件故障、虚拟机错误等。但即便是环境原因引发的系统故障,也是因为程序编写考虑不足导致的。曾经就碰到因为硬盘故障导致服务假死(挂起)引发的系统故障,这就是程序的编写并未考虑硬盘 I/O 阻塞导致的挂起问题。

实际上,现今程序运行环境的可靠性并不如我们想象的高,而程序员很容易忽视这一点。之所以容易忽视是在于平时的开发、调试中我们很难遇到这些环境故障,而在一个部署规模稍大的分布式系统中这样的环境故障就比较常见了。

互联网企业多采用普通的 PC Server 作为服务器,这类服务器的可靠性大约在三个 9,换言之就是出故障的概率在千分之一。而实际在服务器上,出问题概率最高的可能是机械硬盘。

Backblaze 2014 年发布的硬盘统计报告指出,根据对其数据中心 38000 块硬盘(共存储 100PB 数据)的统计,消费级硬盘头三年出故障的几率是 15%。

而在 Google 这种百万级服务器规模的部署级别上,几乎每时每刻都有硬盘故障发生。因而在开发大规模的分布式程序系统时,面向失败设计(Design For Failure)是一个最基础的出发点。

延伸阅读

学习是年轻人改变自己的最好方式-Java培训,做最负责任的教育,学习改变命运,软件学习,再就业,大学生如何就业,帮大学生找到好工作,lphotoshop培训,电脑培训,电脑维修培训,移动软件开发培训,网站设计培训,网站建设培训学习是年轻人改变自己的最好方式