目前业界有两种衡量系统可用性的方式,一个是时间维度,一个是请
求维度,我们先来看这两个维度的计算公式。
这两个公式很简单,我们得深入进去,一一来看。
我们先来看时间维度的系统可用性。用一句话来概括:时长维度,是从故障角度出发对系统
稳定性进行评估。
这类计算方式我们最常见,毕竟你的系统在一段时间里不出现故障,就说明它很稳定嘛!不
过,在真实的使用场景中,怎么样才算是可用时长,什么情况下又是不可用时长,这个是怎
么定义的呢?
时间维度:Availability = Uptime / (Uptime + Downtime)
请求维度:Availability = Successful request / Total request
我们知道,一个人如果发烧了,体温一般会超过 37.5 度,那如果这个人的体温正好达到这
个温度,是不是代表他一定是生病了呢?依据生活经验,我们知道不一定。为什么呢?因为
我们判断一个人是否发烧生病,不是只看这一次、一时的体温,还要看他体温是不是持续超
过 37.5 度。
所以,这里就涉及到一个测量方法和判定方法的问题,包含三个要素:一个是衡量指标,比
如体温就是衡量指标;第二个是衡量目标,达到什么目标是正常,达不到就是异常,低于
37.5 度算正常,超过 37.5 度就是异常,但是单次测量不能说明问题,我们可以多次测量,
比如 6 次中有至少 4 次低于 37.5 度才算正常,转化成比例的话就是 67%;第三个是影响
时长,比如持续超过 12 小时。
对应到系统上,我们也会用一系列的标准和判定逻辑来说明系统是否正常。比如,系统请求
状态码为非 5xx 的比例,也就是请求成功率低于 95%,已经连续超过 10 分钟,这时就要
算作故障,那么 10 分钟就要纳入 Downtime(宕机时间),如果达不到这个标准,就不
算作故障,只是算作一般或偶然的异常问题。
这里同样有三个要素:衡量指标,系统请求状态码;衡量目标,非 5xx 占比,也就是成功
率达到 95%;影响时长,持续 10 分钟。
因此,只有当问题达到一定影响程度才会算作故障,这时才会计算不可用时长,也就是上面
公式中的 Downtime。同时,我们还要求一个周期内,允许的 Downtime,或者说是系统
的“生病时间”是有限的,用这个有限时间来约束系统稳定性。
针对时长维度的稳定性计算方式的弊端,就是稳定性只与故障发生挂钩。
这就需要第二种衡量方式了,也就是从请求维度来衡量系统可用性。
用一句话来说,请求维度,是从成功请求占比的角度出发,对系统的稳定性进行评估。
请求维度的系统可用性同样包含三个关键要素,第一个衡量指标,请求成功率;第二个衡量
目标,成功率达到 95% 才算系统运行正常;第三个是统计周期,比如一天、一周、一个月
等等,我们是在一个统计周期内计算整体状况,而不是看单次的。
你看,这种方式对系统运行状况是否稳定监管得更为严格,不会漏掉任何一次问题的影响,
因为它对系统整体运行的稳定性判定,不仅仅会通过单次的异常影响进行评估,还会累计叠
加进行周期性的评估。
到这里,我们就总结出一条至关重要的经验了:故障一定意味着不稳定,但是不稳定,并不
意味着一定有故障发生。
在 SRE 实践中,通常会选择第二种,也就是根据成功请
求的比例来衡量稳定性:
Availability = Successful request / Total request
在 SRE 中就是设定稳定性衡量标准的 SLI 和 SLO 的过程。
具体来看下这两个概念。SLI,Service Level Indicator,服务等级指标,其实就是我们选
择哪些指标来衡量我们的稳定性。而 SLO,Service Level Objective,服务等级目标,指
的就是我们设定的稳定性目标,比如“几个 9”这样的目标。
SLI 和 SLO 这两个概念你一定要牢牢记住,接下来我们会反复讲到它们,因为落地 SRE 的
第一步其实就是“选择合适的 SLI,设定对应的 SLO”。
我们以电商交易系统中的一个核心应用“购物车”为例,给它取名叫做 trade_cart。
trade_cart 是以请求维度来衡量稳定性的,也就是说单次请求如果返回的是非 5xx 的状态
码,我们认为该次请求是成功的;如果返回的是 5xx 状态码,如我们常见的 502 或 503,
我们就判断这次请求是失败的。
但是,这个状态码只能标识单次请求的场景。我们之前讲过,单次的异常与否并不能代表这
个应用是否稳定,所以,我们就要看在一个周期内,所有调用次数的成功率是多少,以此来
确定它是否稳定。比如我们给这个“状态码返回为非 5xx 的比例”设定一个目标,如果大
于等于 99.95%,我们就认为这个应用是稳定的。
在 SRE 实践中,我们用 SLI 和 SLO 来描述。“状态码为非 5xx 的比例”就是 SLI,“大于
等于 99.95%”就是 SLO。说得更直接一点,SLO 是 SLI 要达成的目标。