什么是高可用?
系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。
这个难点或是重点在于“无中断”,要做到 7x24 小时无中断无异常的服务提供。
高可用的评价维度
在业界有一套比较出名的评定网站可用性的指标,常用 N 个 9 来量化可用性,可以直接映射到网站正常运行时间的百分比上:
科学方式:
一段时间内的停机影响请求量占比
停机时间的响应请求量/总的请求量
影响高可用
突发大流量
秒杀设计
硬件方面 等等
高可用手段
高可用是一个比较复杂的命题,基本上在所有的处理中都会涉及到高可用,所有在设计高可用方案也涉及到了方方面面。
服务冗余
为了防止一台机器因为软件或硬件问题导致不可用,需要部署多个服务器,单机房保证服务部署在不同的机架或机柜上,防止一台机架或机柜停电导致不可用。多台机器就会使服务冗余。
服务冗余的结果就是要做无状态化。所谓的无状态化就是要使冗余部署的服务是对等的,比如部署两台,请求进来通过网关不管传入哪一台服务器,都是不影响的。
负载均衡
在网关接收到请求时,需要转发,一般应用服务器有多台,如何合理的进行请求转发到不同的服务器使用的策略就是负载均衡策略,使用负载均衡可以使请求合理的分配到不同的服务器上进行处理。
做负载均衡的同时,也需要考虑做幂等设计,避免多次接受请求。
超时机制
如果请求等待时间过长,获取不到请求结果,需要设计一个超时等待的机制。
异步化设计: 做架构的异步化是提高吞吐量。
使用好处: 在不关心的数据和结果可以使用异步化来做。核心的流量采样同步来做,非核心的采用异步化来做。
服务限流熔断降级
降低服务的请求量,不同服务之间调用异常,会导致等待时间过久,需要做服务熔断。在某些场景下,某些服务访问量会突然飙升,为了降低服务器压力,会把某些冷门服务进行降级关闭,把资源分配到比较常用的服务上。
数据复制/缓存/sharding
数据复制可以保证数据的同步性,使用缓存可以是数据访问效率较快提高吞吐量
服务拆分
架构拆分可以降低应用的复杂度,进行服务治理也是。同时架构拆分还可以降低服务的压力
服务实时监控
更快的预先判断哪些服务可能会发生某些问题,在不可用之前进行监控改进。
开关控制
限流开关、业务开关等等