大厂用的Hystrix到底有什么优点?

Spring Cloud入门-Hystrix断路器(Hoxton版本) 由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档还有更多面试复习笔记分享如下《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!ava开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**[外链图片转存中…(img-I45r5FNk-1713394250029)] 阅读详情

为什么需要hystrix

hystrix官网地址github

  • Hystrix同样是netfix公司在分布式系统中的贡献。同样的也进入的不维护阶段。不维护不代表被淘汰。只能说明推陈出新技术在不断迭代。曾今的辉煌曾经的设计还是值得我们去学习的。
  • 在分布式环境中,服务调度是特色也是头疼的一块。在服务治理章节我们介绍了服务治理的功能。前一课我们也介绍了ribbon、feign进行服务调用。现在自然的到了服务监控管理了。hystrix就是对服务进行隔离保护。以实现服务不会出现连带故障。导致整个系统不可用

image-20210414145650113

  • 如上图所示,当多个客户端进行服务调用Aservice时,而在分布式系统中Aservice存在三台服务,其中Aservice某些逻辑需要Bservice处理。Bservice在分布式系统中部署了两台服务。这个时候因为网络问题导致Aservice中有一台和Bservice的通信异常。如果Bservice是做日志处理的。在整个系统看来日志丢了和系统宕机比起来应该无所谓了。但是这个时候因为网络通信问题导致Aservice整个服务不可用了。有点得不尝试。

image-20210414153046542

  • 在看上图 。 A–>B–>C–>D 。此时D服务宕机了。C因为D宕机出现处理异常。但是C的线程却还在为B响应。这样随着并发请求进来时,C服务线程池出现爆满导致CPU上涨。在这个时候C服务的其他业务也会受到CPU上涨的影响导致响应变慢。

特色功能

Hystrix是一个低延迟和容错的第三方组件库。旨在隔离远程系统、服务和第三方库的访问点。官网上已经停止维护并推荐使用resilience4j。但是国内的话我们有springcloud alibaba。

Hystrix 通过隔离服务之间的访问来实现分布式系统中延迟及容错机制来解决服务雪崩场景并且基于hystrix可以提供备选方案(fallback)。

  • 对网络延迟及故障进行容错
  • 阻断分布式系统雪崩
  • 快速失败并平缓恢复
  • 服务降级
  • 实时监控、警报

99.9 9 30 = 99.7 % u p t i m e 0.3 % o f 1 b i l l i o n r e q u e s t s = 3 , 000 , 000 f a i l u r e s 2 + h o u r s d o w n t i m e / m o n t h e v e n i f a l l d e p e n d e n c i e s h a v e e x c e l l e n t u p t i m e . 99.99^{30} = 99.7\% \quad uptime \\ 0.3\% \quad of \quad 1 \quad billion \quad requests \quad = \quad 3,000,000 \quad failures \\ 2+ \quad hours \quad downtime/month \quad even \quad if \quad all \quad dependencies \quad have \quad excellent \quad uptime. 99.9930=99.7%uptime0.3%of1billionrequests=3,000,000failures2+hoursdowntime/monthevenifalldependencieshaveexcellentuptime.

  • 上面试官网给出的一个统计。在30台服务中每台出现异常的概览是0.01%。一亿个请求就会有300000失败。这样换算下每个月至少有2小时停机。这对于互联网系统来说是致命的。

image-20210414164135471

  • 上图是官网给出的两种情况。和我们上章节的类似。都是介绍服务雪崩的场景。

项目准备

  • 在openfeign专题中我们就探讨了基于feign实现的服务熔断当时说了内部就是基于hystrix。当时我们也看了pom内部的结构在eureka中内置ribbon的同时也内置了hystrix模块。

  • 虽然包里面包含了hystrix 。我们还是引入对应的start开启相关配置吧。这里其实就是在openfeign专题中的列子。在那个专题我们提供了PaymentServiceFallbackImpl、PaymentServiceFallbackFactoryImpl两个类作为备选方案。不过当时我们只需指出openfeign支持设置两种方式的备选方案。今天我们
        
        <!--hystrix-->     <dependency>         <groupId>org.springframework.cloud</groupId>         <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>     </dependency>
        
        演示下传统企业没有备选方案的情况会发生什么灾难。

接口测试

  • 首先我们对payment#createByOrder接口进行测试。查看下响应情况
        
        image-20210415103254641
  • 在测试payment#getTimeout/id方法。
        
        image-20210415103254641
        
        *   现在我们用jemeter来压测payment#getTimeOut/id这个接口。一位需要4S等待会照成资源消耗殆尽问题。这个时候我们的payment#createByOrder也会被阻塞。
        
        image-20210415103254641
        
        *   spring中默认的tomcat的最大线程数是200.为了保护我们辛苦的笔记本。这里我们将线程数设置小点。这样我们更容易复现线程被打满的情况。线程满了就会影响到payment#createByOrder接口。
        
        image-20210415103018785
  • 上面我们压测的是payment的原生接口。如果压测的是order模块。如果没有在openfeign中配置fallback。那么order服务就会因为payment#getTimeOut/id接口并发导致线程满了从而导致order模块响应缓慢。这就是雪崩效应。下面我们从两个方面来解决雪崩的发生。

业务隔离

  • 上面的场景发生是因为payment#createByOrder 和payment#getTimeOut/id同属于payment服务。一个payment服务实际上就是一个Tomcat服务。同一个tomcat服务是有一个线程池的。 每次请求落到该tomcat 服务里就会去线程池中申请线程。获取到线程了才能由线程来处理请求的业务。就是因为tomcat内共享线程池。所以当payment#getTimeOut/id并发上来后就会抢空线程池。导致别的借口甚至是毫不相关的接口都没有资源可以申请。只能干巴巴的等待资源的释放。
  • 这就好比上班高峰期乘坐电梯因为某一个公司集中上班导致一段时间电梯全部被使用了。这时候国家领导过来也没办法上电梯。
  • 我们也知道这种情况很好解决。每个园区都会有专用电梯供特殊使用。
  • 我们解决上述问题也是同样的思路。进行隔离。不同的接口有不同的线程池。这样就不会造成雪崩。

线程隔离

  • 还记得我们上面为了演示并发将order模块的最大线程数设置为10.这里我们通过测试工具调用下order/getpayment/1这个接口看看日志打印情况
        
       
  • 我们接口调用的地方将当前线程打印出来。我们可以看到一只都是那10个线程在来回的使用。这也是上面为什么会造成雪崩现象。
 @HystrixCommand(
            groupKey = "order-service-getPaymentInfo",
            commandKey = "getPaymentInfo",
            threadPoolKey = "orderServicePaymentInfo",
            commandProperties = {
                    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1000")
            },
            threadPoolProperties = {
                    @HystrixProperty(name = "coreSize" ,value = "6"),
                    @HystrixProperty(name = "maxQueueSize",value = "100"),
                    @HystrixProperty(name = "keepAliveTimeMinutes",value = "2"),
                    @HystrixProperty(name = "queueSizeRejectionThreshold",value = "100")

            },
            fallbackMethod = "getPaymentInfoFallback"
    )
    @RequestMapping(value = "/getpayment/{id}",method = RequestMethod.GET)
    public ResultInfo getPaymentInfo(@PathVariable("id") Long id) {
        log.info(Thread.currentThread().getName());
        return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id, ResultInfo.class);
    }
    public ResultInfo getPaymentInfoFallback(@PathVariable("id") Long id) {
        log.info("已经进入备选方案了,下面交由自由线程执行"+Thread.currentThread().getName());
        return new ResultInfo();
    }
  @HystrixCommand(
            groupKey = "order-service-getpaymentTimeout",
            commandKey = "getpaymentTimeout",
            threadPoolKey = "orderServicegetpaymentTimeout",
            commandProperties = {
                    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "10000")
            },
            threadPoolProperties = {
                    @HystrixProperty(name = "coreSize" ,value = "3"),
                    @HystrixProperty(name = "maxQueueSize",value = "100"),
                    @HystrixProperty(name = "keepAliveTimeMinutes",value = "2"),
                    @HystrixProperty(name = "queueSizeRejectionThreshold",value = "100")

            }
    )
    @RequestMapping(value = "/getpaymentTimeout/{id}",method = RequestMethod.GET)
    public ResultInfo getpaymentTimeout(@PathVariable("id") Long id) {
        log.info(Thread.currentThread().getName());
        return orderPaymentService.getTimeOut(id);
    } 
  • 这里演示效果不好展示,我就直接展示数据吧。
并发量在getpaymentTimeoutgetpaymentTimeout/{id}/getpayment/{id}
20三个线程打满后一段时间开始报错可以正常响应;也会慢,cpu线程切换需要时间
30同上同上
50同上也会超时,因为order调用payment服务压力会受影响
  • 如果我们将hystrix加载payment原生服务就不会出现上面第三条情况。为什么我会放在order上就是想让大家看看雪崩的场景。在并发50的时候因为payment设置的最大线程也是10,他本身也是有吞吐量的。在order#getpyament/id接口虽然在order模块因为hystrix线程隔离有自己的线程运行,但是因为原生服务不给力导致自己调用超时从而影响运行的效果。这样演示也是为了后续引出fallback解决雪崩的一次场景模拟吧。
  • 我们可以在payment服务中通过hystrix设置fallback。保证payment服务低延迟从而保证order模块不会因为payment自己缓慢导致order#getpayment这种正常接口异常。
  • 还有一点虽然通过hystrix进行线程隔离了。但是我们在运行其他接口时响应时间也会稍长点。因为CPU在进行线程切换的时候是有开销的。这一点也是痛点。我们并不能随心所欲的进行线程隔离的。这就引出我们的信号量隔离了。

信号量隔离

  • 关于信号量隔离这里也就不演示了。演示的意义不是很大
 @HystrixCommand(
            commandProperties = {
                    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1000"),
                    @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_STRATEGY,value = "SEMAPHORE"),
                    @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_SEMAPHORE_MAX_CONCURRENT_REQUESTS,value = "6")
            },
            fallbackMethod = "getPaymentInfoFallback"
    ) 
  • 我们如上配置表示信号量最大为6 。 表示并发6之后就会进行等待。等待超时时间未1s。
措施优点缺点超时熔断异步
线程隔离一个调用一个线程池;互相不干扰;保证高可用cpu线程切换开销√√√
信号量隔离避免CPU切换。高效在高并发场景下需要存储信号量变大×√×
  • 除了线程隔离、信号量隔离等隔离手段我们可以通过请求合并、接口数据缓存等手段加强稳定性。

服务降级

触发条件

  • 程序发生除HystrixBadRequestException异常。
  • 服务调用超时
  • 服务熔断
  • 线程池、信号量不够

  • 在上面我们的timeout接口。不管是线程隔离还是信号量隔离在条件满足的时候就会直接拒绝后续请求。这样太粗暴了。上面我们也提到了fallback。
  • 还记的上面我们order50个并发的timeout的时候会导致getpayment接口异常,当时定位了是因为原生payment服务压力撑不住导致的。如果我们在payment上加入fallback就能保证在资源不足的时候也能快速响应。这样至少能保证order#getpayment方法的可用性。
        
       
        
        *   但是这种配置属于实验性配置。在真实生产中我们不可能在每个方法上配置fallback的。这样愚蠢至极。
            
        *   hystrix除了在方法上特殊定制的fallback以外,还有一个全局的fallback。只需要在类上通过@DefaultProperties(defaultFallback = "globalFallback")来实现全局的备选方案。一个方法满足触发降级的条件时如果该请求对应的HystrixCommand注解中没有配置fallback则使用所在类的全局fallback。如果全局也没有则抛出异常。
            
            ###  不足
            
            *   虽然DefaultProperties 可以避免每个接口都配置fallback。但是这种的全局好像还不是全局的fallback。我们还是需要每个类上配置fallback。笔者查阅了资料好像也没有
            *   但是在openfeign专题里我们说了openfeign结合hystrix实现的服务降级功能。还记的里面提到了一个FallbackFactory这个类吗。这个类可以理解成spring的BeanFactory。这个类是用来产生我们所需要的FallBack的。我们在这个工厂里可以生成一个通用类型的fallback的代理对象。代理对象可以根据代理方法的方法签名进行入参和出参。
            *   这样我们可以在所有的openfeign地方配置这个工厂类。这样的话就避免的生成很多个fallback。 美中不足的还是需要每个地方都指定一下。关于FallBackFactory感兴趣的可以下载源码查看或者进主页查看openfeign专题。

服务熔断

 @HystrixCommand(
            commandProperties = {
                    @HystrixProperty(name = "circuitBreaker.enabled",value = "true"),  //是否开启断路器
                    @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),   //请求次数
                    @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"),  //时间范围
                    @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60"), //失败率达到多少后跳闸
            },
            fallbackMethod = "getInfoFallback"
    )
    @RequestMapping(value = "/get", method = RequestMethod.GET)
    public ResultInfo get(@RequestParam Long id) {
        if (id < 0) {
            int i = 1 / 0;
        }
        log.info(Thread.currentThread().getName());
        return orderPaymentService.get(id);
    }
    public ResultInfo getInfoFallback(@RequestParam Long id) {

        return new ResultInfo();
    } 
  • 首先我们通过circuitBreaker.enabled=true开启熔断器
  • circuitBreaker.requestVolumeThreshold设置统计请求次数
  • circuitBreaker.sleepWindowInMilliseconds 设置时间滑动单位 , 在触发熔断后多久进行尝试开放,及俗称的半开状态
  • circuitBreaker.errorThresholdPercentage 设置触发熔断开关的临界条件
  • 上面的配置如果最近的10次请求错误率达到60% ,则触发熔断降级 , 在10S内都处于熔断状态服务进行降级。10S后半开尝试获取服务最新状态
  • 下面我们通过jmeter进行接口http://localhost/order/get?id=-1进行20次测试。虽然这20次无一例额外都会报错。但是我们会发现一开始报错是因为我们代码里的错误。后面的错误就是hystrix熔断的错误了。一开始试by zero 错误、后面就是short-circuited and fallback failed 熔断错误了

  • 正常我们在hystrix中会配置fallback , 关于fallback两种方式我们上面降级章节已经实现了。这里是为了方便看到错误的不同特意放开了。

image-20210421163842061

  • 在HystrixCommand中配置的参数基本都是在HystrixPropertiesManager对象中。我们可以看到关于熔断器的配置有6个参数。基本就是我们上面的四个配置

服务限流

  • 服务降级我们上面提到的两种隔离就是实现限流的策略。

请求合并

  • 除了熔断、降级、限流意外hystrix还为我们提供了请求合并。顾名思义就是将多个请求合并成一个请求已达到降低并发的问题。
  • 比如说我们order有个接个是查询当个订单信息order/getId?id=1 突然有一万个请求过来。为了缓解压力我们集中一下请求每100个请求调用一次order/getIds?ids=xxxxx 。这样我们最终到payment模块则是10000/100=100个请求。下面我们通过代码配置实现下请求合并。

HystrixCollapser

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface HystrixCollapser {
    String collapserKey() default "";

    String batchMethod();

    Scope scope() default Scope.REQUEST;

    HystrixProperty[] collapserProperties() default {};
} 
属性含义
collapserKey唯一标识
batchMethod请求合并处理方法。即合并后需要调用的方法
scope作用域;两种方式[REQUEST, GLOBAL] ;

REQUEST : 在同一个用户请求中达到条件将会合并  
GLOBAL : 任何线程的请求都会加入到这个全局统计中 |
| HystrixProperty[] | 配置相关参数 |

image-20210422094851902

  • 在Hystrix中所有的properties配置都会在HystrixPropertiesManager.java中。我们在里面可以找到Collapser只有两个相关的配置。分别表示最大请求数和统计时间单元。
 @HystrixCollapser(
            scope = com.netflix.hystrix.HystrixCollapser.Scope.GLOBAL,
            batchMethod = "getIds",
            collapserProperties = {
                    @HystrixProperty(name = HystrixPropertiesManager.MAX_REQUESTS_IN_BATCH , value = "3"),
                    @HystrixProperty(name = HystrixPropertiesManager.TIMER_DELAY_IN_MILLISECONDS, value = "10")
            }
    )
    @RequestMapping(value = "/getId", method = RequestMethod.GET)
    public ResultInfo getId(@RequestParam Long id) {
        if (id < 0) {
            int i = 1 / 0;
        }
        log.info(Thread.currentThread().getName());
        return null;
    }
    @HystrixCommand
    public List<ResultInfo> getIds(List<Long> ids) {
        System.out.println(ids.size()+"@@@@@@@@@");
        return orderPaymentService.getIds(ids);
    } 
  • 上面我们配置了getId会走getIds请求,最多是10S三个请求会合并在一起。然后getIds有payment服务在分别去查询最终返回多个ResultInfo。

  • 我们通过jemeter进行getId接口压测,日志中ids的长度最大是3 。 验证了我们上面getId接口的配置。这样就能保证在出现高并发的时候会进行接口合并降低TPS。
  • 上面我们是通过请求方法注解进行接口合并处理。实际上内部hystrix是通过HystrixCommand

工作流程

  • 官网给出的流程图示,并配备流程说明一共是9部。下面我们就翻译下。
  • ①、创建HystrixCommand或者HystrixObservableCommand对象
        
        *   HystrixCommand : 用在依赖单个服务上
        *   HystrixObservableCommand : 用在依赖多个服务上
  • ②、命令执行,hystrrixCommand 执行execute、queue ; hystrixObservableCommand执行observe、toObservable
方法作用
execute同步执行;返回结果对象或者异常抛出
queue异步执行;返回Future对象
observe返回Observable对象
toObservable返回Observable对象
  • ③、查看缓存是否开启及是否命中缓存,命中则返回缓存响应
  • ④、是否熔断, 如果已经熔断则fallback降级;如果熔断器是关闭的则放行
  • ⑤、线程池、信号量是否有资源供使用。如果没有足够资源则fallback 。 有则放行
  • ⑥、执行run或者construct方法。这两个是hystrix原生的方法,java实现hystrix会实现两个方法的逻辑,springcloud已经帮我们封装了。这里就不看这两个方法了。如果执行错误或者超时则fallback。在此期间会将日志采集到监控中心。
  • ⑦、计算熔断器数据,判断是否需要尝试放行;这里统计的数据会在hystrix.stream的dashboard中查看到。方便我们定位接口健康状态
  • ⑧、在流程图中我们也能看到④、⑤、⑥都会指向fallback。 也是我们俗称的服务降级。可见服务降级是hystrix热门业务啊。
  • ⑨、返回响应

HystrixDashboard

  • hystrix 除了服务熔断、降级、限流以外,还有一个重要的特性是实时监控。并形成报表统计接口请求信息。
  • 关于hystrix的安装也很简单,只需要在项目中配置actutor和hystrix-dashboard两个模块就行了
 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency> 
  • 启动类上添加EnableHystrixDashboard 就引入了dashboard了。 我们不需要进行任何开发。这个和eureka一样主需要简单的引包就可以了。

  • 就这样dashboard搭建完成了。dashboard主要是用来监控hystrix的请求处理的。所以我们还需要在hystrix请求出将端点暴露出来。
  • 在使用了hystrix命令的模块加入如下配置即可,我就在order模块加入
@Component
public class HystrixConfig {
    @Bean
    public ServletRegistrationBean getServlet(){
        HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
        registrationBean.setLoadOnStartup(1);
        //注意这里配置的/hystrix.stream  最终访问地址就是 localhost:port/hystrix.stream ; 如果在配置文件中配置在新版本中是需要
        //加上actuator  即 localhost:port/actuator
        registrationBean.addUrlMappings("/hystrix.stream");
        registrationBean.setName("HystrixMetricsStreamServlet");
        return registrationBean;
    }
} 
  • 然后我们访问order模块localhost/hystrix.stream 就会出现ping的界面。表示我们order模块安装监控成功。当然order也需要actuator模块
  • 下面我们通过jmeter来压测我们的熔断、降级、限流接口在通过dashboard来看看各个状态吧。

  • 上面的动画看起来我们的服务还是很忙的。想想如果是电商当你看着每个接口的折线图像不像就是你的心跳。太高的你就担心的。太低了就没有成就高。下面我们看看dashboard的指标详情

image-20210422163536850

  • 我们看看我们服务运行期间各个接口的现状。

image-20210422161504688

聚合监控

  • 上面我们通过新建的模块hystrix-dashboard 来对我们的order模块进行监控。但是实际应用中我们不可能只在order中配置hystrix的。
  • 我们只是在上面为了演示所以在order配置的。现在我们在payment中也对hystrix中配置。那么我们就需要在dashboard中来回切换order、payment的监控数据了。
  • 所以我们的聚合监控就来了。在进行聚合监控之前我们先将payment也引入hystrix。注意上面我们是通过bean方式注入hystrix.stream 的 。 访问前缀不需要actuator

新建hystrix-turbine

pom

<!--新增hystrix dashboard-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
        </dependency> 
  • 主要就是新增turbine坐标,其他的就是hystrix , dashboard等模块,具体查看结尾处源码

yml

spring:
  application:
    name: cloud-hystrix-turbine

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:7001/eureka
  instance:
    prefer-ip-address: true

# 聚合监控

turbine:
  app-config: cloud-order-service,cloud-payment-service
  cluster-name-expression: "'default'"
  # 该处配置和url一样。如果/actuator/hystrix.stream 的则需要配置actuator
  instanceUrlSuffix: hystrix.stream 

启动类

启动类上添加EnableTurbine注解

源码: https://gitee.com/zxhTom/cloud-framework-root

作者:烟花散尽13141
链接:https://blog.youkuaiyun.com/u013132051/article/details/116135782
来源:csdn

补充

如何学习java ,分享两个万能学习的资料库:

1、书籍:

codeGoogler/ProgramBooks

2:视频教程:

程序员必读Java书籍SpringBoot、Spring、Mybatis、Redis、RabbitMQ、SpringCloud、高并发(持续更新)

刷完 200 道题尽到头条后,我飘了!

觉得不错的小伙伴记得转发关注哦,后续会持续更新精选技术文章!

Java高级架构面试知识点:基于-Hystrix-信号量机制实现资源隔离(2) 关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。 阅读详情

相关推荐

C# 8. 在新窗口中使用chart控件波形移动显示

1. 添加新窗口 在Form1中新建button控件,名称为buttonStartWaveDisp,这样单击就能调出Form2窗口 在Form1中增加如下: private void buttonStartWaveDisp_Click(object sender, EventArgs e) { if((form2 == null) || (form2.IsDisposed == true)) { form2 = new Form2();

TrueLink的博客 1432

springCloud--Hystrix

hystrix很好使用,但是现在已经停止更新了,最新使用sentinel。 概念 Hystrix 是 Netflix 开源的一款容错系统,能帮助使用者码出具备强大的容错能力和鲁棒性的程序。 Hystrix 具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包(request collapsing,即自动批处理,译者注),以及监控和配置等功能。 相关的一些概念 服务熔断 服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时...

weixin_43921491的博客 382

别再乱选保护板了!手把手教你用ABLIC S-8254A为3/4串锂电池组DIY安全保护电路

本文详细介绍了如何使用ABLIC S-8254A保护集成电路为3/4串锂电池组DIY安全保护电路。从选型策略、电路搭建到功能验证,手把手教你实现可靠的充放电保护系统,适用于无人机、电动工具等场景,确保锂电池组的安全使用。

weixin_42525264的博客 187

Hystrix-让GPT告诉你使用方式

当下的微服务架构中,一个重要的问题就是服务之间的调用会产生大量的延迟和错误,从而影响整个应用程序的性能和可靠性。为了解决这个问题,Netflix公司开发了一个名为Hystrix的库,它提供了一种实现容错的机制,可以在分布式系统中帮助处理不可避免的延迟和故障。Hystrix通过使用隔离技术、断路器模式、资源池等技术,为分布式系统提供了高可用、高性能的解决方案。

qq_37761711的博客 1038

阿里云百炼平台创建智能体-上传文档

阿里云百炼智能体-上传文档文件

weixin_43930851的博客 1355

DAC8568 Controller

DAC8568 ControllerDAC8568 简介串行接口三级目录 DAC8568 简介 PIN Description Name Description LDAC‾\overline{LDAC}LDAC load DACs SYNC‾\overline{SYNC}SYNC 低电平有效,电平触发控制, 该输入为输入数据的帧同步信号. 当SYNC为低,使能DAC内输入移位寄存器,并在随后的所有时钟沿采样数据。 在第32个时钟之后,DAC更新输出。 若不到32个时钟SYNC被置高(即

u010170039的博客 5128

hystrix简单介绍

hystrix-javanica 是在 1.3.13 版本之后添加的 基于注解来使用 hystrix,因为java注解使用起来比较方便,而且对hystrix的api做了封装。对于微服务治理组件之一,服务熔断、限流组件,现在常用的是Sentinel,对于hystrix不是太了解。而对于一个组件来说,其提供的功能很重要,但是提供的使用方式也很重要。学习成本越低,使用越方便,则越容易推广。最终的稳定版本是 1.5.18。除了 引入了 hystrix-core以外,还引入了 hystrix-javanica。

htydowd的博客 1052

ESD放电模式以及电源箝位 (power clamp )电路

由于ESD电压具有很快的上升速度(其ESD脉冲上升时间约在10ns左右),Vrc端的电压因为RC延迟效应无法跟得上VDD端的ESD电压上升速度,Vrc端的为低电位导致反相器工由于ESD电压具有很快的上升速度(其ESD脉冲上升时间约在10ns左右),Vrc端的电压因为RC延迟效应无法跟得上VDD端的ESD电压上升速度,Vrc端的为低电位导致反相器工作将输出端Vout电压上拉到高电位。从而Vg端的高电位触发导通了NMOS元件(Mesd)的晶体管,因而ESD电流便经由Mesd而泄放掉。由于晶体管Mesd的栅极导通

DOG_BITE_DOG的博客 2万+

详解Hystrix

一文讲明白微服务的容错机制,以及hystrix的详细使用。

BugMan的博客 6617

Dev-C++使用技巧2(亲测)(更改字体和颜色、自动保存、快捷键选项、一键排版)

更改字体和颜色 顶部菜单栏->工具->编辑器选项。 更改字体 当前选项卡->显示,字体word有的基本都有,华文楷体、宋体,幼圆之类。西文字体默认字体Consloas就不错,中文的话幼圆、新宋体都挺不错。 幼圆效果: 新宋体效果: 更改颜色 当前选项卡->语法,分别单击图中的部分,然后在左边修改前景颜色就可以了。需要直接显示的修改前景颜色,背景颜色设为白色;需要选中显示的修改背景颜色,前景设为白色。 自动保存 我们有时候忘记保存或者电脑突然关机,可能会丢失代码。

魔神之云的博客 2万+

【异常】OpenClaw认证 Please carry the API secret key in the ‘Authorization‘ field of the request header

OpenClaw助手Agent因401认证异常导致业务中断的排查方案。该异常由大模型API鉴权全量失败触发,主要根因包括API凭证配置错误、密钥过期、账号权限不足或请求格式不规范。解决方案分四级:优先校验并修正API密钥;排查账号状态与调用权限;检查请求格式规范;最后排查网络或服务商问题。建议建立密钥生命周期管理机制,定期监控额度,使用专用API密钥以规避类似问题。该异常属于凭证配置类故障,不影响系统稳定性。

奶爸的编程之路,也就一周冷个三天 462

各个大厂喜欢用的Hystrix到底有什么优点?

为什么需要hystrixHystrix 官网地址 Github:https://github.com/Netflix/Hystrix/Hystrix同样是netfix公司在分布式系统中的贡...

独行侠梦的博客 462

【工具插件类教学】Unity翻书效果插件Book-Page Curl Pro教程

特征: • 从左到右和从右到左翻页 • 与画布缩放器 配合使用 • 可配置的自动翻转脚本 • 支持向页面 添加 UI 元素 • 支持透明页面 • 适用于“世界空间”画布

纯技术流日常开发商业开发记录总结等 3671

java基础:Hystrix深度解析:微服务容错机制的设计与实践

在分布式系统中,服务依赖关系错综复杂,单个服务故障可能引发连锁反应导致整体崩溃。Hystrix作为Netflix开源的容错框架,通过熔断、降级、隔离等机制为微服务架构提供了稳定保障。本文将从原理、实现和实战角度深入剖析Hystrix的核心机制。

weixin_43290370的博客 985

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

2023年最新java大厂面试真题剖析:如何设计一个高并发系统?

又逢金三银四面试季,正逢bat等大厂,大厂面试真题层出不穷,下面给大家深度剖析2023年春招大厂都问到了哪些问题,是以一个什么样的方式提出问题的呢。上面每个大厂的面试真题都会包含有面试官的心理分析,以及标准的答案解析,文章长度有限,没有将所有的都总结出来给大家,大家如果最近面试,需要突击面试的朋友可以点赞支持一下获取。

jjc4261的博客 188

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

互联网大厂 Java 求职面试:从 Spring Boot 到微服务的挑战与思考

本文通过互联网大厂的Java面试场景,展示了面试官与候选人之间的互动,涵盖了Spring Boot、微服务等技术点,并对面试问题进行了详细解答,帮助读者理解相关知识。

Cdasdas的博客 161

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

大厂必备Spring全攻略:springboot/SpringCloud alibaba/微服务等

毋庸置疑,Spring 早已成为 Java 后端开发事实上的行业标准,无数的公司选择 Spring 作为基础的开发框架,大部分Java 后端程序员在日常工作中也会接触到 Spring ,因此,如何用好 Spring ,也就成为 Java 程序员的必修课之一。 spring学习思维笔记(因为画面有限,又被压缩,需要原图,可以见文末获取哦) 刚面试完阿里的朋友告诉我,spring是每个大厂面试必备的知识面,所以今天给大家分享有关spring的相关资料,内容包括spring、springboot、SpringM

qwe123147369的博客 553

2021年SpringCloud 精选大厂面试题-【附详细答案】

1. 微服务是什么? 微服务与微服务架构 微服务的优缺点 2. 微服务之间是如何独立通讯的 微服务通信机制 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。 围绕业务能力组织服务、自动化部署、智能端点、对语言及数据的去集中化控制。 将组件定义为可被独立替换和升级的软件单元。 以业务能力为出发点组织服务的策略。 倡导谁开发,谁运营的开发运维一体化方法。 RESTful HTTP协议是微服务架构中最常用的通讯机制...

mike_jun的博客 2527

后端大厂面试总结大全

1、首先,通过BeanDefinitionReader 读取指定的配置文件生成bean的定义信息,然后到完整的bean定义信息(BeanDefinition对象),注意这里只是存储bean的定义信息,还没有实例化bean对象;就像工厂里面一样,原材料已经准备好了,但是还没有进行生产,原材料就是beanDefinition,生产就是实例化。2、在 BeanDefinition 和 完整BeanDefinition 中间通过一个后置增强器,可以对bean的定义信息进行统一修改,只需要实现 BeanFactory

zouyang920的博客 426

2019年中总结,400道一线大厂高频精选面试题合集(JVM+Spring+RabbitMQ+Mybatis+Redis+分布式+微服务)...

Java 集合 1.ArrayList 和 Vector 的区别。 2.说说 ArrayList,Vector, LinkedList 的存储性能和特性。 3.快速失败 (fail-fast) 和安全失败 (fail-safe) 的区别是什么? 4.hashmap 的数据结构。 5.HashMap 的工作原理是什么? 6.Hashmap 什么时候进行扩容...

xingduan5153的博客 1605

大厂Java面试汇总(2026年面试真题答案解析)

以上就是有关程序员面试专题的一些总结,面试不仅考的是技术还有心态,只要你有足够的技术支撑,心态要好,拿到offer肯定不在话下。先不要把它想得很困难,自己给自己设置槛!希望大家都可以拿到心仪offer,走向升职、跳槽、涨薪、赢娶白富美之路!因为篇幅有限制,在此只截图展示了手册部分内容。想获取完整Java架构师面试手册的小伙伴可以点击下方名片获取。

m0_50180963的博客 963

凭借一份《Java面试核心知识点》成功拿下了阿里、字节、小米等大厂的offer(1)

引领完成Docker的安装、部署、管理和扩展,让其经历从测试到生产的整个开发生命周期,深入了解Docker适用于什么场景。并且这本Docker的学习权威指南介绍了其组件的基础知识,然后用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。

2401_84024148的博客 654

2022年最新java大厂面试真题剖析:如何设计一个高并发系统?

上面每个大厂的面试真题都会包含有面试官的心理分析,以及标准的答案解析,文章长度有限,没有将所有的都总结出来给大家,大家如果最近面试,需要突击面试的

Park33的博客 303

Java大厂面试高频技术点深度解析与避坑指南

Java作为企业级开发的主流语言,其技术栈的深度和广度直接影响开发者的职业发展。从JVM内存模型到并发编程原理,再到分布式系统设计,这些核心技术构成了Java工程师的能力矩阵。理解AQS实现原理、掌握G1与ZGC的区别等底层知识,不仅能提升系统性能,更是大厂面试的必考内容。在高并发场景下,合理使用缓存策略和分布式事务解决方案(如Seata的AT模式)可以显著提升系统稳定性。通过真实案例(如Full GC调优)和工具链(如Arthas)的实践,开发者能够快速定位和解决线上问题。对于准备大厂面试的候选人,建议重

weixin_34320724的博客 299

大厂Java面试核心考察与实战解析

Java作为企业级开发的主流语言,其技术栈深度与工程实践能力是面试的核心考察点。从JVM内存模型、垃圾回收机制到多线程并发编程,这些底层原理直接影响系统性能表现。以G1收集器为例,通过Region分区设计和Mixed GC机制,能有效降低大内存场景下的停顿时间。在微服务架构盛行的当下,服务拆分原则与分布式事务解决方案成为高频考点,TCC模式通过Try-Confirm-Cancel三阶段保证强一致性。同时,Spring框架的循环依赖解决机制和分布式ID生成方案等实战经验,都是衡量Java工程师技术深度的关键维

weixin_30615767的博客 565
上一篇: HashMap的负载因子为什么默认是0.75?这篇文章告诉你答案
下一篇: Github重磅教程,从0到1,边学边实战!
84696zuoguwz
博客等级 码龄5年 12粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值