码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SpringCloud Hystrix熔断之线程池


    服务熔断

    雪崩效应:是一种因服务提供者的不可用导致服务调用者的不可用,并导致服务雪崩的过程。

    服务熔断:当服务提供者无法调用时,会通过断路器向调用方直接返回一个错误响应,而不是长时间的等待,避免服务雪崩。

    实际情景

    项目中使用的是服务消费者Feign、熔断器Hystrix。

    前端同时发起20次请求,后台的接口被调用了20次。每一次调用接口,都会在内部通过Feign进行服务消费,调用其他的服务提供者。

    同时还使用了Feign自带的Hystrix,进行服务熔断。

    经过测试,发现每次调用超过10次后,有些请求就被Hystrix瞬间熔断,并不是超时而触发的熔断。

    隔离策略


    Hystrix有两种隔离方式:信号量和线程池。
    线程池隔离:对每个command创建一个自己的线程池,执行调用。通过线程池隔离来保证不同调用不会相互干扰和每一个调用的并发限制。
    信号量隔热:对每个command创建一个自己的计数器,当并发量超过计数器指定值时,直接拒绝。使用信号量和线程池的一个区别是,信号量没有timeout机制
    线程池实现
      HystrixThreadPool是hystrix中的线程池实现,每个线程池有一个threadkey作为key。在创建HystrixCommand时需要创建一个该命令使用的线程池的threadkey。
      Hystrix线程池(HystrixThreadPool)底层使用JDK ThreadPoolExecutor实现线程管理,其实际就是封装了JDK ThreadPoolExecutor。

    服务隔离

    Hystrix使用舱壁模式实现服务的隔离,使得服务之间不会产生影响,就算某个服务出现延迟过高的情况,也不会拖累其他服务。

    Hystrix的服务隔离有线程池隔离和信号量隔离。

    如果采用线程池隔离,Hystrix为每个依赖提供一个小的线程池(或信号)(默认10个线程),如果线程池已满调用将被立即拒绝。

    解决方法

    扩大Hystrix线程池的大小。可以通过设置依赖线程池默认大小,提高并发处理能力。

     
    
    1. hystrix:
    2. threadpool:
    3. default:
    4. coreSize: 100 #线程池默认的大小
    5. command:
    6. default:
    7. execution:
    8. timeout:
    9. enabled: true #启用超时机制
    10. isolation:
    11. thread:
    12. timeoutInMilliseconds: 20000 #超时时间
    13. feign:
    14. hystrix:
    15. enabled: true #开启feign自带的hystrix

  • 相关阅读:
    【PySide6】QChart笔记(一)—— 用QDateTimeAxis作为x轴绘制多条折线图
    Vue笔记十:Vuex状态管理
    阻塞队列BlockingQueue 源码解析(ArrayBQ和LinkedBQ)
    【含面试题】MySQL表字段值转换为小写(或大写)的java代码实现
    因JVM OOM而进行JVM 垃圾回收器调优更换的一次案例 -ParallelGC和ConcMarkSweepGC
    React常用hooks总结
    深度学习——卷积层+填充和步幅(笔记)
    Oracle Analytics BIEE 操作方法(六)数据格式1:百分比
    【MySQL】必知必会知识点
    Windows 10系统下如何搭建轻量级目标检测NanoDet-plus环境?
  • 原文地址:https://blog.csdn.net/WXF_Sir/article/details/126351435
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号