背景
一个web 系统的主要能力大部分情况由服务端提供,保障服务的高可用性是重要的架构环节。本文旨在说明高可用服务的使用场景、设计重点以及实践方式
使用场景
高可用指的是系统具备高度的可用性,尽量减少停工实践
停工原因:
- 服务器故障。如服务器宕机、机房网络问题等
- 访问量突增,导致服务器压力过大。
- 时间和访问量可以预见,如秒杀、售票等
- 时间和访问量不可以预计,如突发性社会事件
高可用性应关注,即使灾难发生,系统依然可以使用。
设计重点
- 面对机房故障。可以考虑在多台机器上部署服务
- 主从方式。主服务提供服务,从服务检测主服务,一旦发生问题,切到从服务
- 多机多工方式。部署到多台机器上,通过负载均衡,发现某一台机器故障,自动切换到其他服务
- 业务层面。
- 大系统小做。细粒度化服务,某业务发生问题,也不会影响其他业务。但是开发成本上升。
- 有损服务。延迟服务,保证核心服务正常。如微信抢红包,用户更关心是否抢到了,但是否已入账就不是那么关键,可以放到异步队列中处理
- 柔性可用。在正常服务与停工之间增加状态:部分可用。如果压力上来,可以将不必要的服务关闭
- 快速拒绝。当负载过高时可以直接返回服务繁忙。客户端面对重试应提供必要重试措施,或者没有收到服务器请求之前应不再发起请求。也可以在 nginx 层直接拒绝,同一 ip 发起多起请求。
网友评论