Dubbo服务治理之服务降级

本文介绍了如何在服务出现故障时通过服务降级来保证核心业务的运行,详细讲解了Dubbo的集群容错模式如Failfast、Failsafe、Failback等,并展示了如何在服务提供端和消费端配置。同时,结合Hystrix进行服务降级的细粒度处理,当服务超时时返回备用响应,以减少系统资源占用。通过示例展示了如何在服务消费端使用HystrixCommand注解实现服务熔断和降级。
摘要由CSDN通过智能技术生成

可视化服务降级处理

当短时间内服务出现网络故障时,或者我们希望让程序以最大的算力去保证核心业务的运行,对于非核心业务暂时屏蔽调用,我们可以采用服务降级的方式来实现这一服务治理。

屏蔽:表示消费方对该服务的方法调用都直接返回 null 值,不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。

容错 :表示消费方对该服务的方法调用在失败后,再返回 null 值,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。

禁止: 表示消费方服务直接被禁止,外界无法访问该服务。

image-20210715112046057

集群容错

当部署了集群模式时,为了实现服务的高可用,我们希望某台服务器的宕机不影响其他服务器的使用。这个时候可以采用dubbo的cluster属性来实现。

cluster属性值及作用

属性值效果
Failfast Cluster快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
Failsafe Cluster失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
Failback Cluster失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
Forking Cluster并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。
Broadcast Cluster广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。

cluster使用

在服务提供端使用

<dubbo:service cluster="failsafe" />

在服务消费端使用

<dubbo:reference cluster="failsafe" />

整合hystrix实现服务降级细处理

当我们不希望只返回用户一个null对象时,我们希望当出现超时响应问题时能够返回一个简单的响应。从而达到不占用系统资源的目的。

服务熔断和服务降级

服务熔断是在一定时间内错误访问次数达到阈值时,服务将启动熔断服务,在阈值未恢复时将不会在访问原来的接口,转而访问预先设置的熔断类。

服务降级是当服务错误访问时,服务为了提升用户体验或者保护服务接口的正常运行,为我们的接口增加一个保护层,从而将访问转到余下设置的熔断类中去处理。

hystrixspringcloud的一个子组件,当然也允许我们配合dubbo一起使用,如果想对hystrix有更深的了解,可以参阅官方文档也可以查看关于springcloud-hystrix的博客

这里对dubbo简单整合hystrix做一个示例

  1. 先在服务提供端随机抛出异常用于测试

    @Component
    @Service(methods = {@Method(name = "hello",timeout = 1000)})
    public class ProviderServiceImpl implements ProviderService {
    
     @Override
     public String hello(String name) {
    	 //随机抛出异常
         if (Math.random()>0.5){
             throw new RuntimeException(); 
         }
         return new Message().toString();
     }
    }
    
  2. 服务消费端导入依赖

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

    注意:注意与springboot版本号对应关系

  3. 主启动类加入@EnableHystrix注解启用hystrix

    @SpringBootApplication
    @EnableDubbo
    public class ConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class, args);
        }
    }
    
  4. 为接口方法添加注解设置服务容错方法

    @Component
    public class ConsumerServiceImpl implements ConsumerService {
    
        /**
         * 负载均衡策略
         */
        @Reference(loadbalance = "random")
        private ProviderService providerService;
    
        @Override
        @HystrixCommand(fallbackMethod = "world")
        public String hello(String name) {
            return providerService.hello(name);
        }
        
        public String world(String name){
            return "哦那恭喜";
        }
    }
    

    启动服务即可使用。

关于服务降级应该放在哪个位置的描述

服务降级只需要放在我们需要放置的地方,如果我们希望服务降级在消费者端做,只需要在消费端配置相应配置即可。

如果我们希望服务降级放在服务端做,同样只需要在服务提供端增加相对应配置即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值