谈谈互联网的一些高可用设计手段
1.什么是高可用
任何人在任何时间任何地点访问我们的任何服务都可以得到响应结果。
为什么需要高可用
评估方式
传统方式:
image科学方式
一段时间内的停机影响请求量占比
停机时间的响应请求量/总的请求量
影响高可用
1.突发大流量
2.秒杀设计
3.硬件方面
等等
微服务高可用设计手段
1.服务冗余
为了防止一台机器因为软件或硬件问题导致不可用,需要部署多个服务器,单机房保证服务部署在不同的机架或机柜上,防止一台机架或机柜停电导致不可用。多台机器就会使服务冗余。
服务冗余的结果就是要做无状态化。所谓的无状态化就是要使冗余部署的服务是对等的,比如部署两台,请求进来通过网关不管传入哪一台服务器,都是不影响的。
2.负载均衡
在网关接收到请求时,需要转发,一般应用服务器有多台,如何合理的进行请求转发到不同的服务器使用的策略就是负载均衡策略,使用负载均衡可以使请求合理的分配到不同的服务器上进行处理。
做负载均衡的同时,也需要考虑做幂等设计,避免多次接受请求。
3.超时机制
如果请求等待时间过长,获取不到请求结果,需要设计一个超时等待的机制。
异步化设计: 做架构的异步化是提高吞吐量。
使用好处: 在不关心的数据和结果可以使用异步化来做。核心的流量采样同步来做,非核心的采用异步化来做。
4.服务限流熔断降级
降低服务的请求量,不同服务之间调用异常,会导致等待时间过久,需要做服务熔断。在某些场景下,某些服务访问量会突然飙升,为了降低服务器压力,会把某些冷门服务进行降级关闭,把资源分配到比较常用的服务上。
5. 数据复制/缓存/sharding
数据复制可以保证数据的同步性,使用缓存可以是数据访问效率较快提高吞吐量
6. 架构拆分/服务治理
架构拆分可以降低应用的复杂度,进行服务治理也是。同时架构拆分还可以降低服务的压力
做服务实时监控
更快的预先判断哪些服务可能会发生某些问题,在不可用之前进行监控改进。
如何避免或者降低服务出现故障。
进行服务分级
image image image image高可用案例
- 如何无缝停止线上服务
网关层具备热切换能力
可以热开关切换: 假设设计晚上八点后,不接受服务需要进行升级,可以通过判断每个业务层是否有打印日志判断是否还在处理旧的服务,如果没有,则可以关闭网关层进行热切换服务。也可以通过前端部分,设置超时时间,在八点05秒,进行热开关切换。
网关层不具备热切换能力
防火墙限制只出不进 ,IPTABLES
热开关:
可以设置一个全局配置变量,在网关层判断是否为1,平时为0. 为1时,表示开启热开关,不接收请求。