Spring入门——SpringCloud(三)Hystrix(熔断器)和 Ribbon(负载均衡)

Hystrix(熔断器)

什么是Hystrix(熔断器)

Hystrix是Netflix开源的一款容错框架,包含常用的容错方法:线程隔离、信号量隔离、降级策略、熔断技术。
熔断器,就是保险丝,就是当电流超过一定阈值时触发的保护装置。
Github主页
Spring入门——SpringCloud(三)Hystrix(熔断器)和 Ribbon(负载均衡)_第1张图片

在微服务架构中,用户请求可能会同时调用同一个微服务,当此服务发生故障时,则该线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞。
当Tomcat的服务并发量达到上限时,其他服务随之不可用,导致整个系统宕机,由一个服务的不可用导致整个系统的宕机
这就是所谓的雪崩效应
Spring入门——SpringCloud(三)Hystrix(熔断器)和 Ribbon(负载均衡)_第2张图片

解决雪崩问题,Hystrix(熔断器)主要依靠 线程隔离、服务降级、服务熔断来实现

参考文章

线程隔离

Hystrix为每个依赖服务调用分配一个小的线程池,在线程池占满的情况下,不会让请求再次访问服务,
而是将这个请求阻断,就像家里的保险丝一样当电流超过了阈值。自动熔断一样。

服务降级

优先保证核心服务,而非核心服务不可用或弱可用,当线程的熔断过多时,Hystrix会优先保证核心服务的可用,从而保证不会导致整个系统宕机的情况发生。

服务熔断

用户请求故障时,不会被阻塞,服务器会抛出异常,至少可以看到一个执行结果(例如返回友好的提示信息) 。服务降级虽然会导致请求失败,但是不会导致阻塞,而且最多会影响这个依赖服务对应的线程池中的资源,对其它服务没有响应。

具体过程

当线程池占满的情况下,用户请求再次请求服务的时候, Hystrix会将这个请求处于等待状态,当超过等待时间时,就会将这个请求熔断(抛出异常)。从而保证不会产生线程阻塞,达到保护服务的作用。

快速入门

添加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

编写启动类

Spring入门——SpringCloud(三)Hystrix(熔断器)和 Ribbon(负载均衡)_第3张图片

编写配置文件

熔断时间(默认为1秒)
Spring入门——SpringCloud(三)Hystrix(熔断器)和 Ribbon(负载均衡)_第4张图片

到这里我们就配置了熔断器了

当我们再次访问服务超过熔断时间时,服务就会失败,并抛出异常

负载均衡(Ribbon)

负载均衡 通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性
使用带有负载平衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性。负载平衡服务通常是由专用软件和硬件来完成。 主要作用是将大量作业合理地分摊到多个操作单元上进行执行,用于解决互联网架构中的高并发和高可用的问题。

当我们微服务的架构时,势必会做集群的处理,来保证服务的高可用,
这时就需要涉及到服务的分配,在SpringCloud中提供了一个负载均衡器
Ribbon,为我们实现了服务的分配

Ribbon主要的负载均衡策略

  1. 轮询负载均衡 (即每个服务轮流进行)
  2. 权重负载均衡 (按分配的比重进行,比重越大越可能进行)
  3. 随机负载均衡 (随机进行)

快速入门

Eureka内置了Ribbon(所以无需导依赖)
Spring入门——SpringCloud(三)Hystrix(熔断器)和 Ribbon(负载均衡)_第5张图片
在配置文件中添加

Ribbon默认的负载均衡策略是轮询
Spring入门——SpringCloud(三)Hystrix(熔断器)和 Ribbon(负载均衡)_第6张图片
这样Ribbon负载均衡策略就配置完毕了,当我们在做集群的时候,默认就会以轮询为负载均衡的策略

推荐阅读

负载均衡策略
熔断器技术解析

最后

个人博客: juhaozero的博客

你可能感兴趣的:(Spring,java,spring)