dubbo集群容错和服务降级

集群容错
什么是容错机制? 容错机制指的是系统在一定范围内允许或包容犯错情况的发生。举个简单例子,我们在电脑上运行一个程序,有时候会出现无响应的情况,然后系统会弹出一个提示框让我们选择,是立即结束还是继续等待,然后根据我们的选择执行对应的操作,这就是“容错”。
在分布式架构下,网络、硬件、应用都可能发生故障,由于各个服务之间可能存在依赖关系,如果一条链路中的其中一个节点出现故障,将会导致雪崩效应。为了减少某一个节点故障的影响范围,所以我们才需要去构建容错服务,来优雅的处理这种中断的响应结果。
Dubbo提供了6种容错机制,分别如下

  1. failsafe 失败忽略异常

  2. failover(默认) 失败后重试其他服务器; 重试次数(retries)默认为2

  3. failfast 失败以后立即抛出异常

  4. failback 失败自动恢复,记录日志并定时重试

  5. forking 并行调用多个服务,一个成功立即返回 forks 设置并行数

  6. broadcast 广播,任意一台报错,则执行的方法报错
    配置方式如下,通过cluster方式,配置指定的容错方案

    <dubbo:reference id=“helloService”
    interface=“com.test.dubbo.IHello”
    registry=“zookeeper” version=“2”
    cluster=“failover” retries=“2”
    />

服务降级
降级的目的是为了保证核心服务可用。
降级可以有几个层面的分类: 自动降级和人工降级; 按照功能可以分为:读服务降级和写服务降级;

  1. 对一些非核心服务进行人工降级,在大促之前通过降级开关关闭那些推荐内容、评价等对主流程没有影响的功能
  2. 故障降级,比如调用的远程服务挂了,网络故障、或者RPC服务返回异常。 那么可以直接降级,降级的方案比如设置默 认值、采用兜底数据(系统推荐的行为广告挂了,可以提前准备静态页面做返回)等等
  3. 限流降级,在秒杀这种流量比较集中并且流量特别大的情况下,因为突发访问量特别大可能会导致系统支撑不了。这个时候可以采用限流来限制访问量。当达到阀值时,后续的请求被降级,比如进入排队页面,比如跳转到错误页(活动太火爆,稍后重试等)

dubbo的降级方式: Mock
Mock测试
1、客户端增加TestMock类实现IHello接口(要对哪个服务做降级就实现哪个接口)如下:
在这里插入图片描述

2、配置文件中接口声明中增加moke配置如下:

<dubbo:reference id="helloService"
                     interface="com.test.dubbo.IHello"
                     registry="zookeeper" version="2"
                     cluster="failover" retries="2"
                     mock="com.test.dubbo.TestMock"  timeout="1000"
                     />

3、通过超时异常来模拟服务异常超时的场景。设置timeout 为1 访问服务肯定会超时 ,超时后将执行TestMock中的实现 来降级。当服务端故障解除以后(timeout设置为1000),调用过程将恢复正常
如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhangxm_qz/article/details/86519741