Dubbo【Dubbo高级特性(重试机制、多版本 、负载均衡 、集群容错 、服务降级、服务限流原理 、结果缓存) 】(三)-全面详解(学习总结---从入门到深化)

 

目录

Dubbo高级特性_重试机制

Dubbo高级特性_多版本 

Dubbo高级特性_负载均衡 

Dubbo高级特性_集群容错 

Dubbo高级特性_服务降级

Dubbo高级特性_服务限流原理 

Dubbo高级特性_结果缓存


Dubbo高级特性_重试机制

重试机制 

 超时问题:

如果出现网络抖动,则会出现请求失败。

如何解决

Dubbo提供重试机制来避免类似问题的发生。 

重试机制配置

@Service(timeout = 3000,retries = 2)

注意:

Dubbo在调用服务不成功时,默认会重试2次。

实时效果反馈

1. Dubbo技术中如何设置服务重试次数_____。 

A service

B Reference

C timeout

D retries

Dubbo高级特性_多版本 

Dubbo提供多版本的配置,方便我们做服务的灰度发布,或者是解 决不兼容的问题。 

 

 灰度发布(金丝雀发布):

当出现新功能时,会让一部分用户先使用新功能,用户反馈没 问题时,再将所有用户迁移到新功能。

版本迁移步骤

1 在低压力时间段,先升级一半提供者为新版本

2 再将所有消费者升级为新版本

3 然后将剩下的一半提供者升级为新版本 

多版本配置 

老版本服务提供者配置

@Service(version = "1.0.0")
public class OrderServiceImpl implements
IOrderService {
public CommonResult findByUserId(Long id) {
        CommonResult<Orders> commonResult = new CommonResult();
        // 返回结果编码
        commonResult.setCode(200);
        // 返回结果描述
        commonResult.setMessage("success");
        // TODO 模拟数据库操作
        // 数据
        Orders orders = new Orders();
        orders.setId(1L);
        orders.setUserId(2L);
        orders.setPrict(12.5);
        orders.setMobile("1888888888");
        orders.setAddress("北京");
        orders.setPay_method(1);
        commonResult.setData(orders);
        return commonResult;
   }
}

新版本服务提供者配置

@Service(version = "2.0.0")
public class OrderServiceImpl implements IOrderService {
public CommonResult findByUserId(Long id) {
        CommonResult<Orders> commonResult = new CommonResult();
        // 返回结果编码
        commonResult.setCode(200);
        // 返回结果描述
        commonResult.setMessage("success");
        // TODO 模拟数据库操作
        // 数据
        Orders orders = new Orders();
        orders.setId(1L);
        orders.setUserId(2L);
        orders.setPrict(12.5);
        orders.setMobile("1888888888");
        orders.setAddress("北京");
        orders.setPay_method(1);
        commonResult.setData(orders);
        return commonResult;
   }
}

新版本服务消费者配置

@Reference(version = "2.0.0")
private IOrderService iOrderService;// 订单服务

如果不需要区分版本,可以按照以下的方式配置 :

@Reference(version = "*")
private IOrderService iOrderService;// 订单服务

实时效果反馈

1. Dubbo技术中如何设置服务多版本。

A timeout

B retries

C version

D group

2. Dubbo技术如何配置多版本不需要区分版本号。

A version("1.0.0")

B version("2.0.0")

C version("3.0.0")

D version("*")

Dubbo高级特性_负载均衡 

Dubbo是一个分布式服务框架,能避免单点故障和支持服务的横向扩容。一个服务通常会部署多个实例。 

问题: 订单服务生产者会出现单点故障。 

 

 如何从多个服务 Provider 组成的集群中挑选出一个进行调用, 就涉及到一个负载均衡的策略。

Dubbo内置负载均衡策略

1、RandomLoadBalance:随机负载均衡,随机的选择一个,默认负载均衡。

2、RoundRobinLoadBalance:轮询负载均衡。

3、LeastActiveLoadBalance:最少活跃调用数,相同活跃数的随机。

4、ConsistentHashLoadBalance:一致性哈希负载均衡,相同参数的请求总是落在同一台机器上。 

负载均衡策略配置 

如果不指定负载均衡,默认使用随机负载均衡。我们也可以根据自己的需要,显式指定一个负载均衡。

 生产者服务

@Service(timeout = 3000,retries = 3,loadbalance = "roundrobin")

消费者服务

@Reference(timeout = 2000,loadbalance = "roundrobin"

参数:

  • random:随机负载均衡
  • leastactive:最少活跃调用数,相同活跃数的随机
  • roundrobin:轮询负载均衡
  • consistenthash:一致性哈希负载均衡

查看负载均衡配置

编辑器中快速按2下Shift 

 选择实现类

复制名字

 

实时效果反馈

1. Dubbo技术中如何设置轮询负载均衡。

A random

B leastactive

C roundrobin

D consistenthash

2. Dubbo技术默认的负载均衡策略是__。 

A random

B leastactive

C roundrobin

D consistenthash

Dubbo高级特性_集群容错 

集群容错模式

Dubbo框架为服务集群容错提供了一系列好的解决方案,在此称为 dubbo服务集群容错模式。 

容错模式

Failover Cluster:失败重试。默认值。当出现失败,重试其它服务器,默认重试2次,使用 retries配置。一般用于读操作

Failfast Cluster : 快速失败,只发起一次调用,失败立即报错。通常用于写操作。

Failsafe Cluster : 失败安全,出现异常时,直接忽略。返回一个空结果。日志不重要操作。 Failback Cluster : 失败自动恢复,后台记录失败请求,定时重发。非常重要的操作。

Forking Cluster:并行调用多个服务器,只要有一个成功即返回。

Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。 同步要求高的可以 使用这个模式。

集群容错配置 

在消费者服务配置

@Reference(cluster = "failover")
private IOrderService iOrderService;

查找容错配置

编辑器快速按2下Shift

查看实现类

查看模式名字 

实时效果反馈

1. Dubbo技术中如何设置服务快速失败的集群容错模式。

A Failover

B Failfast

C Failsafe

D Failback 

Dubbo高级特性_服务降级

什么是服务降级

 服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量 对一些服务和页面有策略的降级,以此释放服务器资源以保证核心 任务的正常运行。

 两种场景:

  • 当下游的服务因为某种原因响应过慢,下游服务主动停掉一些不太重要的业务,释放出服务 器资源,增加响应速度!
  • 当下游的服务因为某种原因不可用,上游主动调用本地的一些降级逻辑,避免卡顿,迅速返 回给用户!

为什么需要降级 

当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心 服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即 使是有损服务。 

服务降级方式

第一种

mock=force:return null

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

 第二种

mock=fail:return null

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

服务降级演示

@Reference(timeout = 2000,mock = "force:return null")
private IOrderService iOrderService;

 实时效果反馈

1. Dubbo技术中服务降级解决_____问题。

A 、保证服务质量

B 、服务雪崩

C 、服务不可用

D 、保证核心服务可用

2. Dubbo技术中服务降级____配置服务降级。

A 、timeout

B 、version

C 、cluster

D 、mock

Dubbo高级特性_服务限流原理 

 生活中的限流

春运,一项全人类历史上最大规模的迁移活动,抢火车票一直是每年跨年以后的热点话题。

限流算法 

漏桶算法

 原理:

漏桶算法思路很简单,水(请求)先进入到漏桶里,漏桶以一 定的速度出水,当水流入速度过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。

令牌桶算法

 原理:

令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令 牌,而如果请求需要被处理,则需要先从桶里获取一个令牌, 当桶里没有令牌可取时,则拒绝服务。

漏桶 vs 令牌桶的区别

漏桶的天然特性决定了它不会发生突发流量,就算每秒1000个请求到来,那么它对后台服务输出的访问速率永远恒定。而令牌桶则不同,其特性可以“预存”一定量的令牌,因此在应对突发流量的时候可以在短时间消耗所有令牌,其突发流量处理效率会比漏桶高,但是导向后台系统的压力也会相应增多。 

实时效果反馈

1. 限流技术主要解决_____问题。

A 响应速度快 

B 提高用户体验

C 节省带宽

D 保护系统

2. 限流算法中_____算法具有应对突发性的流量。

A 漏桶算法

B 令牌桶算法

C 滑动窗口

D 计数器

Dubbo高级特性_结果缓存

结果缓存,用于加速热门数据的访问速度,Dubbo提供声明式缓存,以减少用户加缓存的工作量。 

Dubbo提供了三种结果缓存机制:

lru: 基于最近最少使用原则删除多余缓存,保持最热的数据被缓存-—..._

threadlocal: 当前线程缓存,比如一个页面渲染,用到很多portal,每个portal都要去查用户信 息,通过线程缓存,可以减少这种多余访问。

jcache: 与JSR107集成,可以桥接各种缓存实现。 

配置缓存

@Reference(cache="lru")

测试结果缓存 

在服务提供者工程中添加原子类操作

private AtomicInteger index = new AtomicInteger();

原子的方式将当前值加1

  Orders orders = new Orders();
        orders.setId(1L);
        orders.setUserId(2L);
        orders.setPrict(12.5);
        orders.setMobile("1888888888");

  Integer callCount = index.getAndIncrement();
        orders.setAddress("北京" +callCount);
        orders.setPay_method(1);
        commonResult.setData(orders);
        return commonResult;

在服务消费者使用cache属性

 @Reference(cache= "lru")

实时效果反馈

1. Dubbo技术中结果缓存机制主要解决_____问题。

A 安全性

B 高可用

C 响应慢

D 服务雪崩

2. Dubbo技术中如何配置结果缓存lru机制。

A @Service(cache="lru")

B @Reference(cluster="lru")

C @Reference(timeout="lru")

D @Reference(cache="lru")

猜你喜欢

转载自blog.csdn.net/m0_58719994/article/details/131425437
今日推荐