Skip to content

什么是高可用

高可用:描述的是一个系统在大部分时间都是可用的,即使在发生硬件故障或者系统升级的时候,服务仍然是可用的。

评判标准就是在所有的运行时间可用的时间占比高低,或者是某个功能请求成功的占比

哪些情况会导致系统不可用?

  1. 黑客攻击;
  2. 硬件故障,比如服务器坏掉。
  3. 并发量/用户请求量激增导致整个服务宕掉或者部分服务不可用。
  4. 代码中的坏味道导致内存泄漏或者其他问题导致程序挂掉。
  5. 网站架构某个重要的角色比如 Nginx 或者数据库突然不可用。
  6. 自然灾害或者人为破坏。
  7. ……

有哪些提高系统可用性的方法?

  • 使用集群,减少单点故障
    • 一台实例,会有另外一台实例顶上。
  • 限流
    • 流量控制(flow control),监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。
  • 超时和重试机制设置
    • 一旦用户请求超过某个时间的得不到响应,就抛出异常。一般结合重试机制,重试次数不宜过高。
    • 否则可能导致响应速度慢甚至于请求堆积而让系统无法再处理请求。
    • 如果要保证请求不可失败的场景不适用
  • 熔断机制
    • 系统统计当前一段时间内失败次数,如果近期失败率过高,让当前系统立即切换依赖其他备用服务。
    • 常见的是Hystrix 和 Sentinel
  • 异步调用
    • 一般配合消息队列使用,请求之后立刻返回
    • 具体业务的成功与否通过邮件或者短信进行异步通知
  • 使用缓存
    • 使用缓存缓存热点数据,避免大量请求直接落到数据库
  • 配置监控告警
  • 灰度发布
  • 注意备份
  • 使用合适的硬件

正在精进