Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

熔断降级

根源

  • 高并发架构下,各种微服务存在依赖关系

    • 如果某项服务出现延迟或响应过慢,依赖它的其他服务也会一直等待,出现请求堆积和资源占用,从而扩散到所有微服务,引发雪崩效应
  • 基本的处理手段

    • 给http请求设置超时时间,避免请求堆积
    • 用限流算法限制并发数
    • 熔断——错误率过高时就先不调用,同时按间隔试探,成功则恢复正常
    • 降级——在流量过大时,主动放弃一些次要服务,让其返回统一的不可用结果,从而缓解系统压力

熔断

  • 概念

    • 当某个服务出问题时,暂时断开这个服务一段时间,防止整个服务被拖垮
  • 熔断例子

    • Spring Cloud组件 Hystrix
    • 熔断触发条件
      • 检测到10秒内,服务请求的失败率超过50%
    • 之后每隔5秒重新尝试,如果服务可达则恢复正常

降级

  • 概念

    • 暂时关闭部分服务,优先保障核心服务可用
  • 降级方式

    • 延迟服务
      • 把一些写操作先缓存起来,等服务平稳后再执行
    • 关闭功能
      • 对某个子模块禁止访问
  • 降级例子

    • Spring Cloud组件 Hystrix
    • 降级触发条件
      • 方法抛出 HystrixBadRequestException
      • 方法调用超时
      • 熔断器开启拦截调用
      • 线程池或队列或信号量已满