• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Spring Cloud Ribbon和Hystrix

武飞扬头像
VHong丶
帮助1

1.Ribbon介绍

Ribbon是一种用于构建分布式系统和客户端负载均衡的开源项目。它最初是由Netflix开发的,并于后来成为Spring Cloud生态系统的一部分。

Ribbon的主要功能是实现客户端的负载均衡,它可以在客户端请求服务时,将请求均匀地分发到多个服务提供者上,以实现请求的负载均衡和高可用性。以下是Ribbon的一些特点和功能:

  1. 负载均衡策略:Ribbon提供了多种负载均衡策略,包括随机、轮询、加权轮询等,可以根据实际需要选择适合的负载均衡算法。
  2. 服务发现:Ribbon可以与服务注册中心集成,自动发现和识别可用的服务提供者,并动态更新可用服务列表。常见的服务注册中心有Eureka、Consul等。
  3. 容错和故障转移:Ribbon支持容错和故障转移机制,当某个服务提供者出现故障或不可用时,它可以自动切换到其他可用的服务提供者,以确保请求的可用性。
  4. 定制化配置:Ribbon提供了灵活的配置选项,可以根据需求进行定制化配置,如超时设置、重试机制、连接池配置等。
  5. 与Spring Cloud集成:Ribbon作为Spring Cloud的一部分,可以与其他Spring Cloud组件(如Netflix Eureka、Feign等)无缝集成,进一步简化分布式系统的开发和管理。

总而言之,Ribbon是一个强大的客户端负载均衡工具,为分布式系统提供了可靠的负载均衡和故障转移能力。它可以与Spring Cloud等开源框架结合使用,以实现高性能和可伸缩的分布式架构。

下图展示了Eureka使用Ribbon时的大致架构:

学新通

 2.Load Balance负载均衡是什么?

简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的高可用 (HA)。
常见的负载均衡软件有Nginx,LVS,硬件有F5等。

3、Ribbon本地负载均衡客户端与Nginx服务端负载均衡区别是什么?


(1)Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求。即负载均衡是由服务端实现的。
(2)Ribbon本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

4.Ribbon的使用

Ribbon其实就是一个软负载均衡的客户端组件(消费者),它可以和其他所需请求的客户端结合使用,和Eureka结合只是其中的一个实例。
(1)在消费者引入下面依赖,可以忽略这一步

  1.  
    <!--可以忽略,因为spring-cloud-starter-netflix-eureka-client自带了spring-cloud-starter-ribbon引用-->
  2.  
    <dependency>
  3.  
    <groupld>org.springframework.cloud</groupld>
  4.  
    <artifactld>spring-cloud-starter-netflix-ribbon</artifactid>
  5.  
    </dependency>

(2)  使用RestTemplate进行Eureka Client(包括服务提供者以及服务消费者,在这里其实是服务消费者使用RestTemplate)之间的通信,为RestTemplate配置类添加@LoadBalanced注解即可,如下所示:

  1.  
    @Bean
  2.  
    @LoadBalanced
  3.  
    public RestTemplate restTemplate() {
  4.  
    return new RestTemplate();
  5.  
    }

主程序:

  1.  
    @SpringBootApplication
  2.  
    @EnableEurekaClient
  3.  
    //在启动该微服务的时候就能去加载我们的自定义Ribbon配置类,从而使配置生效
  4.  
    @RibbonClient(name="MICROSERVICECLOUD-DEPT")
  5.  
    public class DeptConsumer80_App{
  6.  
    public static void main(String[] args){
  7.  
    SpringApplication.run(DeptConsumer80_App.class, args);
  8.  
    }
  9.  
    }

5.Hystrix介绍

spring cloud 用的是 hystrix,是一个容错组件。
当自身 依赖的服务不可用时,服务自身不会被拖垮。防止微服务级联异常

Hystrix实现了 超时机制和断路器模式。

Hystrix是Netflix开源的一个类库,用于隔离远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。主要有以下几点功能:

  • 为系统提供保护机制。在依赖的服务出现高延迟或失败时,为系统提供保护和控制。防止雪崩。
  • 包裹请求:使用HystrixCommand(或HystrixObservableCommand)包裹对依赖的调用逻辑,每个命令在独立线程中运行。
  • 跳闸机制:当某服务失败率达到一定的阈值时,Hystrix可以自动跳闸,停止请求该服务一段时间。
  • 资源隔离:Hystrix为每个请求都的依赖都维护了一个小型线程池,如果该线程池已满,发往该依赖的请求就被立即拒绝,而不是排队等候,从而加速失败判定。防止级联失败。
  • 快速失败:Fail Fast。同时能快速恢复。侧重点是:(不去真正的请求服务,发生异常再返回),而是直接失败。
  • 监控:Hystrix可以实时监控运行指标和配置的变化,提供近实时的监控、报警、运维控制。
  • 回退机制:fallback,当请求失败、超时、被拒绝,或当断路器被打开时,执行回退逻辑。回退逻辑我们自定义,提供优雅的服务降级。
  • 自我修复:断路器打开一段时间后,会自动进入“半开”状态,可以进行打开,关闭,半开状态的转换。

6.Hystrix的使用

服务消费者

1) 引入Hystrix依赖

  1.  
     <dependency>
  2.  
        <groupId>org.springframework.cloud</groupId>
  3.  
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
  4.  
     </dependency>

2) 启动类加 @EnableHystrix

3) 在需要熔断的方法上加 @HystrixCommand

4) 设置降级方法,返回兜底数据

   
  1.  
    //调用方法超过一秒会触发熔断,调用降级方法
  2.  
        @HystrixCommand(fallbackMethod = "getOrderByIdFallback")
  3.  
        @Override
  4.  
        public Order getOrderById(Long id) {
  5.  
            Order order = orderMapper.selectById(id);
  6.  
            //改用Eureka后,调用时使用服务注册名称调用
  7.  
            ResponseEntity<Product> entity = restTemplate.getForEntity(
  8.  
                    "http://product-service/product/" order.getProductId(),
  9.  
                    Product.class);
  10.  
            order.setProduct(entity.getBody());
  11.  
            return order;
  12.  
        }
  13.  
     
  14.  
        /**
  15.  
          * 降级方法
  16.  
          * @param id
  17.  
          * @return
  18.  
          */
  19.  
        public Order getOrderByIdFallback(Long id) {
  20.  
            // 返回兜底数据
  21.  
            Order order = new Order();
  22.  
            return order;
  23.  
        }
学新通

熔断时间的设置(默认1s)

  1.  
     # 设置熔断时间
  2.  
     hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000

7.Hystrix的注意事项

使用Hystrix时,有一些注意事项需要考虑:

1. 针对关键服务:Hystrix的开销相对较高,因此不建议对所有的服务都应用Hystrix。应该重点关注关键的、容易出错的服务,以确保系统整体的稳定性。

2. 合理设置超时时间:在使用Hystrix时,需要适当设置超时时间。如果超时时间设置过短,可能会导致正常请求被短路,影响业务;如果超时时间设置过长,可能会导致请求长时间占用资源,影响系统的可用性。

3. 良好的线程池管理:Hystrix使用线程池来执行服务调用。因此,在使用Hystrix时,需要合理配置线程池的大小和参数,以免线程池过小导致请求阻塞,或者线程池过大导致资源浪费。

4. 监控和指标收集:Hystrix提供了用于监控和指标收集的功能,可以了解服务的运行情况和性能指标。在使用Hystrix时,建议配置并使用监控和指标收集功能,以便及时发现和解决潜在的问题。

5. 良好的降级策略:在Hystrix中,通过降级策略可以在服务故障时提供备用的响应。需要根据具体情况,定义合理的降级策略,以确保用户能够获得可接受的响应,同时避免过度降级导致用户体验下降。

6. 适当的重试机制:Hystrix提供了重试机制,可以在服务调用失败时自动进行重试。然而,过度重试可能会导致资源浪费和延迟增加。因此,需要根据具体情况设置适当的重试次数和重试策略。

综上所述,使用Hystrix时需要根据具体的业务需求和系统状况,合理配置和使用相关功能,并注意上述的注意事项,以确保系统的稳定性和性能。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfjjhbg
系列文章
更多 icon
同类精品
更多 icon
继续加载