33屏蔽非核心故障(降级熔断)

240 阅读3分钟

1.如何应对高峰流量

  • 流量高峰可能会出现的问题

    • 依赖的资源和服务不可用,导致服务整体宕机(一损俱损)

      • 降级+熔断
    • 系统承载能力,出现拒绝服务的情况(500)

      • 使用限流
  • 解决方案

    • 采取降级、熔断以及限流的方案

2.雪崩是如何发生的

  • 系统运行时需要消耗资源的,

    • CPU、内存等系统资源

    • 执行业务逻辑的时候,需要的线程资源

      • 定义了线程池处理HTTP请求
      • RPC线程池(保证客户端与服务端长连接线程)
  • 可以看出往往是由于一个小服务的阻塞,导致整体链路响应时间变长->导致资源不释放→线程池堆积的未处理请求增加

  • 这种由于一个小节点的宕机导致的整体宕机(雪崩)

  • 分布式系统中最怕不是一个服务或者组件宕机(监控宕机),响应缓慢(监控服务响应时长 95分位 99分位... 过滤掉敏感数据)

    • 使用熔断和降级
    • 监测一个服务的响应时间异常时,切断调用服务联系,让服务快速返回失败,释放本次请求持有的资源
  • 慢比宕机更可怕(监测服务时长,观察用户体验,也观察服务情况)

3.熔断机制是如何做的

  • 类似电路中保护机制,当电路超负荷运转的时候,保险丝会自动断开,保证整体电路不受影响

  • 当调用失败次数超过一定的阈值后,后续请求直接返回错误

  • 具体实现

    • 维护一个熔断有限状态机

      • 关闭调用远程调用
      • 半打开
      • 打开
    • 当调用失败的次数累积到一定的阈值时,熔断状态从关闭态切换到打开态

    • 当熔断处于打开状态时,启动一个超时计时器,当计时器超时后,状态切换到半打开态(定时探活)\

    • 累计一定的成功次数后,状态切换到关闭态\

  • 不仅是微服务需要熔断机制,redis客户端等都需要(避免单个节点异常)

\

4.降级机制要如何做

  • 降级是比熔断更大的概念

  • 站在整体系统负载的角度上,放弃部分非核心功能和服务

  • 实现方式(只针对非核心)

    • 开关限流(apollo),存储在配置中心中,不重启服务快速降级远程服务
    • 降级限流
  • 场景

    • 数据库压力大的时候,返回静态数据
    • 增大轮训时间
    • 将同步写操作转换成异步写操作
  • 需要对降级开关进行演练,保证开关的可用性

5.总结

  • 每一个请求就会占用系统资源(内存(对象,redis连接)、磁盘(磁盘读写,mysql连接)、网络带宽.....),针对每个请求(API,内存RPC)统计时间,超时就是释放资源

  • 将服务分级:主流程核心服务,主流程非核心服务,分批次的熔断和降级

  • 池的作用

    • 预加载资源,避免资源的频繁创建和销毁
    • (漏斗)有限流的作用,避免无限的使用计算机资源(将超出计算机处理能力的请求搁置或放弃)
  • 熔断是在糟糕的情况下保证不再恶化的手段(微博榜单崩了,直接返回网络开小差)