1、Dubbo体系结构

2、Dubbo容错机制

Dubbo集群容错架构图

各节点关系:

  • 这里的Invoker是Provider的一个可调用Service的抽象,Invoker封装了Provider地址及Service接口信息。
  • Directory代表多个Invoker,可以把它看成List,但与List不同的是,它的值可能是动态变化的,比如注册中心推送变更。
  • Cluster将Directory中的多个Invoker伪装成一个Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个。
  • Router负责从多个Invoker中按路由规则选出子集,比如读写分离,应用隔离等。
  • LoadBalance负责从多个Invoker中选出具体的一个用于本次调用,选的过程包含了负载均衡算法,调用失败后,需要重选。

2.1 集群容错模式

Failover Cluster
  • 失败自动切换,当出现失败,重试其它服务器。(缺省)
  • 通常用于读操作,但重试会带来更长延迟。
  • 可通过retries="2"来设置重试次数(不含第一次)。
Failfast Cluster
  • 快速失败,只发起一次调用,失败立即报错。
  • 通常用于非幂等性的写操作,比如新增记录。
Failsafe Cluster
  • 失败安全,出现异常时,直接忽略。
  • 通常用于写入审计日志等操作。
Failback Cluster
  • 失败自动恢复,后台记录失败请求,定时重发。
  • 通常用于消息通知操作。
Forking Cluster
  • 并行调用多个服务器,只要一个成功即返回。
  • 通常用于实时性要求较高的读操作,但需要浪费更多服务资源。
  • 可通过forks="2"来设置最大并行数。
Broadcast Cluster
  • 广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持)
  • 通常用于通知所有提供者更新缓存或日志等本地资源信息。
<dubbo:service retries="2" />
<dubbo:reference retries="2" />
<!-- 单一方法配置重试次数 -->
<dubbo:reference><dubbo:method name="findFoo" retries="2" />
</dubbo:reference><!-- 配置集群容错模式 -->
<dubbo:service cluster="failsafe" />
<dubbo:reference cluster="failsafe" />

3、Dubbo服务降级

综述:
Dubbo服务降级主要包含两点:屏蔽(mock=force,Dubbo-admin配置)和容错(mock=fail,Mock)。

使用Dubbo时,可能会遇到以下问题:

1)多个服务之间可能由于服务没有启动或者网络不通,调用中会出现远程调用失败;

  1. 服务请求过大,需要停止部分服务以保证核心业务的正常运行;

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

还可以改为 mock=fail:return+null 表示消费方对该服务的方法调用在失败后,再返回 null值,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。

以上两个问题可以使用Dubbo的服务降级来实现;
即:在服务宕掉或者并发数太高导致的RpcException异常时,进行友好的处理或者提示,而不是内部报错导致系统不可用。

查看dubbo的官方文档,可以发现有个mock的配置,mock只在出现非业务异常(比如超时,网络异常等)时执行。mock的配置支持两种,一种为boolean值,默认的为false。如果配置为true,则缺省使用mock类名,即类名+Mock后缀;另外一种则是配置返回默认字符串,如:”return null”或者"return 123456",可以很简单的忽略掉异常。

/**接口定义*/
public interface IUser {public void addUser(User u);public User getUserById(int id);}/**实现类*/
public class UserImpl implements IUser {private static List<User> USER_LIST = new ArrayList<User>();static{for(int i=0;i<10;i++){User u = new User();u.setAddress("address"+i);u.setId(i);u.setName("name"+i);USER_LIST.add(u);}}public void addUser(User u) {USER_LIST.add(u);System.out.println("total:"+USER_LIST.size());}public User getUserById(int id) {for(int i=0;i<USER_LIST.size();i++){if(USER_LIST.get(i).getId() == id){return USER_LIST.get(i);}}return null;}
}public class IUserMock implements IUser {@Overridepublic void addUser(User u) {throw new RuntimeException("add user fail!");}@Overridepublic User getUserById(int id) {return null;}
}
<dubbo:reference id="iUser" interface="com.dubbosample.iface.IUser"  timeout="10000" check="false" mock="true"><dubbo:reference id="iUser" interface="com.dubbosample.iface.IUser"  timeout="10000" check="false" mock="return null">

以上配置还可以在dubbo-admin界面中配置

分别是屏蔽和容错:

其中屏蔽只能在dubbo-admin中配置,不能在dubbo配置文件里配置

屏蔽:force.mock (即:屏蔽请求,直接返回某个值,如上面的字符串,mock=“return 123456”);

容错:fail.mock (即:允许请求,在请求失败的时候,再返回某个值,如:mock=“fail:return 123456”);

4、Dubbo服务限流

Dubbo限流主要依赖Sentinel(哨兵)中间件一起使用

服务提供端限流:
对服务提供方的限流可分为服务提供方的自我保护能力和服务提供方对服务消费方的请求分配能力这两个维度。
QPS & 定向限流

服务消费端限流:
对服务提供方的限流可分为对控制并发线程数,和服务降级两个维度。

详见:
https://yq.aliyun.com/articles/624053?utm_content=m_1000013383

拓展:
https://blog.csdn.net/world_snow/article/details/79080314

5、Dubbo负载均衡

dubbo有四种负载均衡的方式:

1)RandomLoadBalance:加权随机算法(默认)

2)LeastActiveLoadBalance:最小活跃负载均衡

3)ConsistentHashLoadBalance:一致性hash负载均衡

4)RoundRobinLoadBalance:加权轮询负载均衡

6、Dubbo结果缓存

https://dubbo.apache.org/zh-cn/docs/user/quick-start.html

7、

Dubbo 常见服务治理策略相关推荐

  1. Go微服务架构实战 中篇:6. 微服务治理策略

    Go微服务架构实战-[公粽号:堆栈future] Go微服务架构实战目录 1. 微服务架构上篇 1. grpc技术介绍 2. grpc+protobuf+网关实战 3. etcd技术介绍 4. 基于e ...

  2. Dubbo——SpringBoot集成Dubbo(@Autowired和@Reference的区别、Dubbo的服务治理)

    Dubbo--原生API实现远程调用_Strine的博客-CSDN博客 在上一篇文章中我们讲了如何使用原生API发起远程调用,显然这种方式肯定是非常麻烦的,因此我们这里就讲如何使用SpringBoot ...

  3. 阿里云开发者学院电子书《Dubbo分布式服务治理实战》重磅来袭!

    简介:Dubbo 是阿里巴巴开源的高性能分布式 RPC 服务治理框架,已经捐献给 Apache 开源组织,最新的版本是 3.0.在阿里巴巴.工行.电信.银联.中国人寿.网易.滴滴.当当等互联网公司中大 ...

  4. 分布式面试 - 如何基于 dubbo 进行服务治理、服务降级、失败重试以及超时重试?

    分布式面试 - 如何基于 dubbo 进行服务治理.服务降级.失败重试以及超时重试? 面试题 如何基于 dubbo 进行服务治理.服务降级.失败重试以及超时重试? 面试官心理分析 服务治理,这个问题如 ...

  5. kali linux网络扫描~目标识别及常见服务扫描策略

    理论知识 标志信息是指一些主机或服务响应的欢迎信息或版本信息 SNMP(简单网络管理协议)是由一组网络管理的标准组成,包含一个应用层协议和一组资源对象 SNMP能够支持网络管理系统,用以检测连接到网络 ...

  6. 面试系列26 如何基于dubbo进行服务治理、服务降级、失败重试以及超时重试

    (1)服务治理 1)调用链路自动生成 一个大型的分布式系统,或者说是用现在流行的微服务架构来说吧,分布式系统由大量的服务组成.那么这些服务之间互相是如何调用的?调用链路是啥?说实话,几乎到后面没人搞的 ...

  7. 史上最强Dubbo面试28题答案详解:核心功能+服务治理+架构设计等

    1.Dubbo是什么? Dubbo 是一个分布式.高性能.透明化的 RPC 服务框架,提供服务自动注册.自动发现等高效服务治理方案, 可以和 Spring 框架无缝集成. RPC 指的是远程调用协议, ...

  8. (微服务) Dubbo服务治理

    1.dubbo的底层是依赖spring的. 2.dubbo的作用就是给消费端提供接口. 3.dubbo各个节点说明: Provider          ----------------------- ...

  9. 全面容器化之后,来电科技如何实现微服务治理?

    作者:汤长征.十眠 MSE 服务治理帮助我们系统以很低的成本无侵入的方式快速实现了全链路灰度能力,进一步提升了我们系统的稳定性,让我们新需求的迭代上线更加地安心. -来电科技架构师 汤长征 来电科技自 ...

最新文章

  1. TSR交通标志检测与识别
  2. 互联网巨头终极战场:得开发者得天下
  3. 智源社区 2021 AI 大调查开启!
  4. java中椭圆类_Java中的Graphics2D类基本使用的教程
  5. When 多模态 meets 信息抽取
  6. 数据库和数据挖掘领域的会议和期刊
  7. php如何制定跳转到app原生页面,js实现界面向原生界面发消息并跳转功能
  8. 5G基站功耗,到底有多大?
  9. Windows下安装配置jdk
  10. 架构师技术文档:Redis+Nginx+Dubbo+Spring+ 架构师精选视频
  11. OpenStack Queens 女王新神器 — 卷多重挂载
  12. php退款申请源码,PHP实现微信申请退款功能
  13. javafx 通过 css 去掉 tableView 滑动条
  14. 视频行为识别检测综述
  15. MAC使用Charles,代理后,部分网页无法打开(您的连接不是私密连接)的解决方法
  16. Euclid最大公因数算法及其扩展求逆元
  17. 电视android已停止运行是什么意思,com.android.systemui已停止是什么意思 怎么解决...
  18. 信息论小课堂:纠错码(海明码在信息传输编码时,通过巧妙的信道编码保证有了错误能够自动纠错。)
  19. Springboot接入华为云短信平台
  20. Wordpress建站流程-最新手把手详细教程

热门文章

  1. php基础教程 第一步 环境配置及helloworld
  2. python3.6字典有序_为什么从Python 3.6开始字典有序并效率更高
  3. 年轻人也太禁不起诱惑了吧?
  4. 为什么每个理发店门口都有彩色的柱子?你不知道吧
  5. 当女朋友生气了而你却没发现 !!!
  6. 用MATLAB三步完成机器人搭建
  7. 为什么离开学校后,学习能力直线下降?
  8. html表格在页面间距,在CSS中设置单元格和单元格间距?
  9. 父类可以调用子类的方法吗_python类的继承、多继承及查找方法顺序
  10. python总结函数图像_PIL使用小结(crop和paste函数)