IT系统由多得数不清的硬件、数据(包括代码和配置信息)组成,天然就有脆弱性。服务器会因为主板和内存故障而停机。硬盘会损坏。网卡或网络交换机会发生硬件故障。网络传输会有延时。运营商提供的线路会出现掉线。系统运行时内存会不足。数据集会超出队列的处理能力。数据流会出现故障或速度太慢。第三方提供的服务会不符合性能与质量承诺。交付的应用会有代码缺陷。超过预期数量的用户会导致系统不可访问。中间件会出现配置错误。黑客会试图服务的IP地址。黑客还可能猜破了管理员的密码,植入了后门程序。木马程序会用占用内存和网络带宽。一个系统的崩溃会产生多米诺骨牌效应,影响到其它系统。开发人员会在代码中插入善意的彩蛋等等。 一个好的应用系统必须明确自己对用户的服务目标,运维团队不仅要具有能力处理预先假设的故障情况,还要通过寻找替代服务来保证系统始终在线。当一个节点出现故障,不要去排查原因,直接停掉它然后启用一个新的实例替代它。这称为快速恢复。要让故障频繁发生,越早发生越好,这称为频繁故障。 为实现上述目标,应推广自动化运维,不断挑战系统的所有弱点,进行测试甚至是攻击,根据运维成本的预算目标构建并不断完善与风险相匹配的运维工具环境。这里要转变两个观念。首先不要把服务器当作宠物来看待,而要当作牲畜来看待。宠物是有名字的,而牲畜是没有名字的。不要在意服务器的主机名或IP地址。其次,不要关注平均故障间隔时间指标,而要关注平均故障修复时间指标,通过更新技术持续降低平均故障修复时间。