永不停机总归是聊聊不现实的。那么,用方在可操作性的法论范围内,怎样把影响降到最小,知道而影响又该怎么衡量呢?聊聊 MTBF是指两次相邻的系统失效(服务故障)之间的工作时间长度。也可以叫它无故障时间 或 失效间隔。用方这个值越大,法论说明系统的知道故障率越低,系统越可靠。聊聊因此,用方我们通常希望这个时间间隔越大越好。法论 MTTR是知道指从出现故障到修复中间的时间长度。也叫做修复时间。聊聊这个值越低,用方说明故障越容易恢复,法论系统可维护性越好。因此,我们通常希望这个时间间隔越小越好。 因此,系统可用性可以量化为: MTBF / (MTBF + MTTR) 示例:系统的可用性要求 99.999% ,那么,按一年365天来算: 全年允许的宕机时间只有5分钟多一点。 全年宕机5分钟?从上一部分可以知道,我们的目的,是要尽可能的增大系统的无故障运行时间,同时,在发生故障时,尽可能迅速的完成恢复。 故障的发生多种多样,经过了这么多年的研发前辈的踩坑,我们可以将其分类汇总,并给出分析和对应的方案。 最不应该犯的错,但是感觉很多人都没少犯。 原因也很简单,要不就是格式错了,要不就是配置的数据不对,而且错误的配置还被直接发到了线上,直接导致业务异常,云服务器甚至宕机。 解决方案主要是两部分:变更管控 + 配置灰度 人为BUG往往是系统异常的罪魁祸首。coder? 不,请叫我buger ~ 虽然最是常见,但这一部分又是相对最容易应对的。 解决方案有两个方面: 把控研发质量 + 测试质量: 业务高速发展,云服务器提供商系统被水平垂直拆分,越来越复杂,几乎没有哪个系统可以独立存在,总归会有依赖。 然而,依赖系统在整个业务流程中占比很重,但我们自己又无法把控,因此,服务的依赖治理,是可用性保障中的非常重要的一环。 解决方案包括: 依赖梳理+指标约定+故障解决 让业务按我们预先计划的线路增长是不切实际的。吭哧瘪肚做个需求想让它涨10%,结果没涨反而掉了,当你不注意的时候,突然来了一波上涨,都是很常见的事~ 应对方法有两个方面: 流量规律预估 + 异常流量防护 上述的流量预估其实属于容量预估的一个方面,除此之外,还有缓存容量、底层数据存储容量、服务器容量、带宽容量等等。 应对方案有四个方面: 容量规划+限流降级+冗余+全链路压测 相比于动则百万造价的大型服务器,普通计算机以及docker的稳定性要大打折扣。因此,宕机是难免的事,除了服务器,还有交换机甚至是光纤抖动都有可能发生。 而应对方案有两个方面:分散+冗余: 越是重要的系统,对高可用的要求越高。而高可用的治理,会很考验整个技术团队的技术沉淀。如果后面大家遇到对系统可用性非常敏感的情况,希望本文可以对大家的思路和着手点有所帮忙。Part One 可用性概念一览
概念一:MTBF (mean time between failure)
概念二:MTTR (mean time to repair)
Part Two 高可用的服务器租用保障
Level1: 配置修改出错
Level2: 代码BUG
Level3: 依赖服务故障
Level4: 突发流量和流量洪峰对应不足
Level5: 容量预估不足
Level6: 硬件甚至整个机房故障
Part Three 总结