栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

每日一练进击大厂【DAY14】Dubbo

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

每日一练进击大厂【DAY14】Dubbo


文章目录
  • 一、什么是Dubbo
  • 二、Dubbo的服务注册与发现的流程图
  • 三、Dubbo核心配置
  • 四、Dubbo启动时如果依赖的服务不可用会怎样
  • 五、Dubbo负载均衡策略
  • 六、Dubbo与Feign区别
  • 七、Dubbo整合常用注解
  • 八、Dubbo SPI机制
  • 九、Dubbo中的SPI和JAVA的SPI区别
  • 十、Dubbo集群容错模式
  • 十一、怎么设计一个RPC框架
  • 十二、Dubbo的注册中心集群挂掉,发布者和订阅者之间还能通信吗
  • 总结


一、什么是Dubbo

       Dubbo是阿里巴巴开源的基于java的高性能RPC分布式服务框架。
       Dubbo提供的基础能力包括:面向接口代理的高性能RPC调用、智能容错和负载均衡、服务自动注册和发现、高度可扩展能力、运行期流量调度、可视化的服务治理与运维。

       Rpc:rpc是远程过程调用,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

二、Dubbo的服务注册与发现的流程图

三、Dubbo核心配置
  • dubbo:service 服务配置
    服务提供方配置

 
  • dubbo:reference 引用配置
    服务消费方配置

 
 
  • dubbo:protocol 协议配置

  • dubbo:application 应用配置
    生产者和消费者均需要配

  • dubbo:module 模块配置
  • dubbo:registry 注册中心配置
    生产者和消费者均需要配

  • dubbo:monitor 监控中心配置
  • dubbo:provider 提供方配置

  • dubbo:consumer 消费方配置

  • dubbo:method 方法配置

	
 
  • dubbo:argument 参数配置
四、Dubbo启动时如果依赖的服务不可用会怎样

       Dubbo缺省会在启动时检查依赖的服务是否可用,如果不可用则会抛出异常,阻止spring初始化完成,
默认check=“true”,可以通过设置 check="false"关闭检查,在启动的时候不检查服务是否可用,也就不会抛出异常。


五、Dubbo负载均衡策略
  • Random LoadBalance 随机,按权重设置随机概率(默认)
  • RoundRobin LoadBalance 轮询,按公约后的权重设置轮询比率
  • LeastActive LoadBalance 最少活跃调用数,相同活跃数的随机
  • ConsistenHash LoadBalance 一致性Hash,相同参数的请求总是发到同一提供者
  • ShortestResponseLoadBalance 最短响应优先 + 加权随机
六、Dubbo与Feign区别

       Dubbo支持多传输协议(Dubbo、Rmi、http、redis等),可以根据业务场景选择最佳的方式。Feign基于Http传输协议,短连接,不适合高并发的访问。
       Dubbo支持4种负载均衡算法,而且算法里面引入权重。Feign只支持N种策略,轮询,随机,RespinseTime加权。负载均衡算法是Client级别的。
       Dubbo支持多种容错策略,也引入的重试次数,超时等配置参数。Feign利用熔断机制来实现容错的,处理方式不一样。

七、Dubbo整合常用注解
  • @DubboService:就是服务暴露的注解,想要暴露什么服务就在接口实现类上加上该注解
  • @EnableDubbo:作用是在服务提供方扫描@DubboService注解,在服务消费者扫描@DubboReference注解的属性并且进行属性的依赖注入。
  • @DubboReference:在消费方添加该注解表示引用该服务。
八、Dubbo SPI机制

       SPI是一种服务发现机制,其实就是将结构的实现类写入配置当中,在服务加载的时候将配置文件读出,加载实现类,这样就可以在运行的时候,动态的帮助接口替换实现类,Dubbo的SPI其实是对java的SPI进行了一种增加,可以按需加载实现类之外,增加了IOC和AOP的特性,还有自适应扩展机制。
SPI在Dubbo应用很多,包括协议扩展,集群扩展,路由扩展,序列化扩展等。

Dubbo对于文件目录的配置分为了三类:

  • META-INF/services/ 目录:该目录下的 SPI 配置文件是为了用来兼容 Java SPI
  • META-INF/dubbo/ 目录:该目录存放用户自定义的 SPI 配置文件
  • META-INF/dubbo/internal/ 目录:该目录存放 Dubbo 内部使用的 SPI 配置文件
九、Dubbo中的SPI和JAVA的SPI区别

       JAVA SPI:在查找扩展实现类的时候遍历SPI的配置文件并且将实现类全部实例化。
       Dubbo SPI:对Dubbo进行扩展,不需要改动Dubbo源码;延迟加载,可以一次只加载自己想要加载的扩展实现;增加了对扩展点IOC和AOP的支持,一个扩展点可以直接setter注入其它扩展点;Dubbo的扩展机制能很好的支持第三方IOC容器,默认支持Spring Bean。

十、Dubbo集群容错模式
  • Failover Cluster:默认提供了重试的容错机制,如果基于Dubbo进行服务间通信出现异常,服务消费者会对服务提供者集群中其他的节点发起重试,确保这次请求成功,默认的额外重试次数是2次。
  • Failfast Cluster:快速失败策略,服务消费者只发起一次请求,如果请求失败,直接把错误抛出去。通常用于非幂等性的写操作,比如新增记录。
  • Failsafe Cluster:失败安全策略,如果出现服务通信异常,直接把这个异常吞掉不做任何处理。通常用于写入审计日志等操作。
  • Failback Cluster:失败自动恢复策略,后台记录失败请求,然后通过定时任务来对这个失败的请求进行重发。通常用于消息通知操作。
  • Forking Cluster:并行调用多个服务策略,就是把这个消息广播给服务提供者集群,只要有任何一个节点返回就表示请求执行成功。通常用于实时性要求较高的读操作,但需要浪费更多服务资源,可通过forks=2来设置最大并行数。
  • Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错,通常用于通知所有提供者更新缓存或日志等本地资源消息。
  • Available Cluster:调用目前可用的实例(只调用一个),如果当前没有可用的实例,则抛出异常。通常用于不需要负载均衡的场景。
十一、怎么设计一个RPC框架

       首先我们需要一个注册中心,去管理消费者和提供者的节点信息,这样才会有消费者和提供者才可以去订阅服务,注册服务。
       当有了注册中心后,可能会有多个provider节点,那么我们肯定会有一个负载均衡模块来负责节点的调用,至于用户指定路由配置可以是一个额外的优化点。
       具体的调用肯定会需要牵扯到通信协议,所以需要一个模块来对通信协议进行封装,网络传输还要考虑序列化。
       当调用失败后怎么去处理,所以我们还需要一个容错模块,来负责失败情况的处理。
       其实做完这些一个基础的模型就已经搭建好了,我们还可以有很多的优化点,例如请求数据的监控,配置信息的处理,日志信息的处理等。

十二、Dubbo的注册中心集群挂掉,发布者和订阅者之间还能通信吗

       可以的,启动Dubbo时,消费者会从zookeeper拉取注册的生产者的地址接口等数据,缓存在本地,每次调用时,按照本地存储的地址进行调用。


总结

不要慌,不要慌,太阳下了有月光。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1021638.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号