集群容错
什么是容错机制? 容错机制指的是系统在一定范围内允许或包容犯错情况的发生。举个简单例子,我们在电脑上运行一个程序,有时候会出现无响应的情况,然后系统会弹出一个提示框让我们选择,是立即结束还是继续等待,然后根据我们的选择执行对应的操作,这就是“容错”。
在分布式架构下,网络、硬件、应用都可能发生故障,由于各个服务之间可能存在依赖关系,如果一条链路中的其中一个节点出现故障,将会导致雪崩效应。为了减少某一个节点故障的影响范围,所以我们才需要去构建容错服务,来优雅的处理这种中断的响应结果。
Dubbo提供了6种容错机制,分别如下
- failsafe 失败忽略异常
- failover(默认) 失败后重试其他服务器; 重试次数(retries)默认为2
- failfast 失败以后立即抛出异常
- failback 失败自动恢复,记录日志并定时重试
- forking 并行调用多个服务,一个成功立即返回 forks 设置并行数
- broadcast 广播,任意一台报错,则执行的方法报错
配置方式如下,通过cluster方式,配置指定的容错方案
<dubbo:reference id=“helloService”
interface=“com.test.dubbo.IHello”
registry=“zookeeper” version=“2”
cluster=“failover” retries=“2”
/>
服务降级
降级的目的是为了保证核心服务可用。
降级可以有几个层面的分类: 自动降级和人工降级; 按照功能可以分为:读服务降级和写服务降级;
- 对一些非核心服务进行人工降级,在大促之前通过降级开关关闭那些推荐内容、评价等对主流程没有影响的功能
- 故障降级,比如调用的远程服务挂了,网络故障、或者RPC服务返回异常。 那么可以直接降级,降级的方案比如设置默 认值、采用兜底数据(系统推荐的行为广告挂了,可以提前准备静态页面做返回)等等
- 限流降级,在秒杀这种流量比较集中并且流量特别大的情况下,因为突发访问量特别大可能会导致系统支撑不了。这个时候可以采用限流来限制访问量。当达到阀值时,后续的请求被降级,比如进入排队页面,比如跳转到错误页(活动太火爆,稍后重试等)
dubbo的降级方式: Mock
Mock测试
1、客户端增加TestMock类实现IHello接口(要对哪个服务做降级就实现哪个接口)如下:
2、配置文件中接口声明中增加moke配置如下:
3、通过超时异常来模拟服务异常超时的场景。设置timeout 为1 访问服务肯定会超时 ,超时后将执行TestMock中的实现 来降级。当服务端故障解除以后(timeout设置为1000),调用过程将恢复正常
如下: