Dubbo -- dubbo高级特性(序列化 地址缓存 超时与重试机制 多版本:灰度发布 负载均衡 集群容错策略 服务降级)

Posted CodeJiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dubbo -- dubbo高级特性(序列化 地址缓存 超时与重试机制 多版本:灰度发布 负载均衡 集群容错策略 服务降级)相关的知识,希望对你有一定的参考价值。

文章目录

1. Dubbo – 分布式系统的相关概念(大型互联网项目架构目标 集群和分布式 架构演进)、Dubbo概述(Dubbo的概念和架构)、Dubbo快速入门(Zookepper的安装:注册中心中心)

2. Dubbo – Dubbo快速入门代码编写

3.Dubbo – dubbo-admin 的安装 介绍 使用

4. Dubbo – dubbo高级特性(序列化 地址缓存 超时与重试机制 多版本:灰度发布 负载均衡 集群容错策略 服务降级)

本节代码讲解得案例

1. dubbo高级特性


1.1 序列化

tips:因为生产者和消费者都会用到pojo,建议把新一个一个模块,用来存放pojo,然后在生产者和消费者中引入pojo模块即可。


1.2 地址缓存

注册中心挂了,服务是否可以正常访问?

  • 可以,因为dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心。
  • 当服务提供者地址发生变化时,注册中心会通知服务消费者。


1.3 超时与重试机制

  • 服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。
  • 在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩
  • dubbo 利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。
  • 使用timeout属性配置超时时间,默认值1000,单位毫秒。
  • 设置了超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。
  • 如果出现网络抖动,则这一次请求就会失败。Dubbo 提供重试机制来避免类似问题的发生。 通过 retries 属性来设置重试次数。默认为 2 次。

超时连接失败后的截图

说明:


/**
* timeout = 3000 当前服务在连接3s后就会超时
* retries = 5 如果上一次没有连接成功,则会重试,加上第一次连接,一共尝试6次。
* 所以最多 3 * (5 + 1) = 18 秒后就会发生TimeOut(超时)错误。
*/
@Reference(timeout = 3000, retries = 5) 

注意:如果发布者和消费者都配置了 超时与重试,则消费者的配置会覆盖发布者的配置。但是根据业务的逻辑性来说,超时与重试 配置在发布者这里会更加合理一些


1.4 多版本

  • 灰度发布:当出现新功能时,会让一部分用户先使用新功能,用户反馈没问题时,再将所有用户迁移到新功能。
  • dubbo 中使用version 属性来设置和调用同一个接口的不同版本

1.4.1 灰度发布图示

刚开始服务提供者的版本是1.0

后面发布了一个新版本(2.0)的服务提供者,我们不着急将服务消费者全部迁移过去


1.4.2 version 属性示例


启动项目,访问测试 http://localhost:8080/dubbo/hello.do


1.5 负载均衡

负载均衡策略(4种)

  • Random :按权重随机(权重值默认值为0),默认值。按权重设置随机概率。

  • RoundRobin :按权重轮询。

  • LeastActive:优先调用活跃,相同活跃数的随机。 每次访问都去看一下调用服务提供者的服务所需要的时间,然后选择上一次花费时间最少的去调用。

  • ConsistentHash:一致性 Hash,相同参数的请求总是发到同一提供者。比如这里可以根据id参数去选择服务提供者。

示例:

消费者这里选择负载均衡策略。

如果记不住就去查看下面这个类
org.apache.dubbo.rpc.cluster.loadbalance.AbstractLoadBalance;




1.6 集群容错策略

集群容错模式

  • Failover Cluster:失败重试。默认值。当出现失败,重试其它服务器 ,默认重试2次,使用 retries 配置。一般用于读操作 。
  • Failfast Cluster :快速失败,只发起一次调用,失败立即报错。通常用于写操作。
  • Failsafe Cluster :失败安全,出现异常时,直接忽略。返回一个空结果。
  • Failback Cluster :失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
  • Forking Cluster :并行调用多个服务器,只要一个成功即返回。
  • Broadcast Cluster :广播调用所有提供者,逐个调用,任意一台报错则报错。

示例:可以在消费者选择集群容错模式。



1.7 服务降级

在服务器压力过大的时候,可以选择服务降级来减少某些服务占用的资源,从而使得更多的资源分配给核心业务(比如这里的 支付服务)

示例:可以在 服务消费者 来进行服务降级


调用该服务后,不会报错,只会返会null



以上是关于Dubbo -- dubbo高级特性(序列化 地址缓存 超时与重试机制 多版本:灰度发布 负载均衡 集群容错策略 服务降级)的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo 分布式系统中的相关概念 Dubbo概述 Dubbo高级特性

Dubbo 分布式系统中的相关概念 Dubbo概述 Dubbo高级特性

2-高级特性

Dubbo3高级特性「框架与服务」自定义Dubbo服务容器及扩展容器实现分析

Dubbo3高级特性「框架与服务」 服务分组及服务分组聚合实现

Dubbo3高级特性「框架与服务」Dubbo3客户端和服务端的泛化调用机制体系