2019/09/01 Understanding High Availability

什么是高可用

高可用(High Availability,HA)简单来说,就是用户在任何时间访问系统都能获得正确的结果。如果系统不具有高可用性,那么意味着在某一个时刻用户无法使用系统或服务,用户体验会不好,更有可能使公司丢掉商业机会,造成损失,所以企业对高可用系统的重要性越来越重视,同时也提出一系列衡量高可用系统的标准,比如:按停机时间计算。

一年 365 天,如果系统能够在 99% 的时间里提供服务,那么意味着系统一年之中停机时间不能超过 87.6 小时。
如果要保证 3 个 9 可用,停机时间不能超过 8.76 小时。
如果是 4 个 9 则停机时间不能超过 53 分钟。
如果是 5 个 9 则停机不能超过 6 分钟。

停机时间可以从一个方面反应出系统的可用性,但是在高峰期停机 6 分钟和在低峰期停机 6 分钟造成的影响是不一样的,所以我们又提出通过估算停机时的请求量/一年的总请求量的比值来进行评估。不管使用何种评估方式,我们都可以对我们系统的高可用性有一个大致的了解。如果想要提高系统的可用性,那么就需要在系统的架构设计中进行改进。

如何实现高可用

1.服务冗余

5 个 9 的服务可用性是非常具有挑战的,因为我们的系统是软件,这些软件会有 bug ,而软件又是运行在计算机硬件上的,硬件也会出现故障,所以单一系统出现问题是无法避免的。为了解决单点问题,就必须将我们的服务冗余,进行集群,从而保证集群中任何节点出现故障都不影响系统整体的可用性。

2.负载均衡

服务冗余固然可以消除单点故障的影响,但是仅仅冗余部署是不够的,必须要有一套监控机制来保证。服务部署多份,那么如何将请求分配到不同的节点,保证不会出现某个节点接受请求过大而另一些节点请求过少,或者当一个节点故障之后不会再有请求被分配到故障节点,这就需要使用负载均衡技术。

3.幂等

当一个节点的请求处理失败,负载均衡会将请求路游到另外的节点上进行重试,为了保证系统不会因为多次请求导致数据不一致,我们还需要保证幂等性。

4.无状态及动态扩容缩容

当请求不断增多,集群压力过大,如果有富裕的硬件资源,我们需要增加服务节点,当请求减少,我们需要减少服务节点,回收多余的硬件资源。为了能够动态的扩容和缩容,服务必须是无状态的,否则每个节点都是不一样的,那么处理起来就会非常困难。

5.限流、降级、熔断

有时在很短的时间内我们的系统资源无法支撑海量的请求,为了保证系统可用,我们需要对系统进行限流,降级或熔断处理。限流就是当请求数量超过系统的处理能力时,丢弃一部分请求以保证一部分请求能够正常处理。降级就是当系统资源不足时,将一部分边缘服务使用默认处理或是停掉,以保证核心服务资源可用。熔断是当一个服务请求处理缓慢时,使用服务的默认行为,防止因为单个服务缓慢导致整个系统雪崩。

6.服务拆分

将服务拆分,按照服务等级施行不同策略的保障措施。

7.服务监控

从平均响应延时或异常条数来进行实时监控,需要有对日志实时采集和分析的能力。

8.热部署或热切换

在不停机的情况下进行服务更新或状态修改,比如使用配置中心。

9.异地容灾

不管是应用还是数据,异地部署都是有效的手段。比如,同城不同机房,异地多个机房等。