什么是高可用
高可用:描述的是一个系统在大部分时间都是可用的,即使在发生硬件故障或者系统升级的时候,服务仍然是可用的。
评判标准就是在所有的运行时间可用的时间占比高低,或者是某个功能请求成功的占比
哪些情况会导致系统不可用?
- 黑客攻击;
- 硬件故障,比如服务器坏掉。
- 并发量/用户请求量激增导致整个服务宕掉或者部分服务不可用。
- 代码中的坏味道导致内存泄漏或者其他问题导致程序挂掉。
- 网站架构某个重要的角色比如 Nginx 或者数据库突然不可用。
- 自然灾害或者人为破坏。
- ……
有哪些提高系统可用性的方法?
- 使用集群,减少单点故障
- 一台实例,会有另外一台实例顶上。
- 限流
- 流量控制(flow control),监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。
- 超时和重试机制设置
- 一旦用户请求超过某个时间的得不到响应,就抛出异常。一般结合重试机制,重试次数不宜过高。
- 否则可能导致响应速度慢甚至于请求堆积而让系统无法再处理请求。
- 如果要保证请求不可失败的场景不适用
- 熔断机制
- 系统统计当前一段时间内失败次数,如果近期失败率过高,让当前系统立即切换依赖其他备用服务。
- 常见的是Hystrix 和 Sentinel
- 异步调用
- 一般配合消息队列使用,请求之后立刻返回
- 具体业务的成功与否通过邮件或者短信进行异步通知
- 使用缓存
- 使用缓存缓存热点数据,避免大量请求直接落到数据库
- 配置监控告警
- 灰度发布
- 注意备份
- 使用合适的硬件
