本文主要是介绍dubbo experience,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
网络、netty 相关
https://juejin.cn/post/6844903704668160008
https://www.cnblogs.com/awan-note/p/14391973.html
https://www.cnblogs.com/awan-note/p/14595967.html
rpc 框架对比普通http 调用的区别
rpc 长连接
Rpc和Http的区别 - 知乎
dubbo 结构,整个过程。实现rpc 协议的一种方式。原理。
dubbo spi
java spi:就是约定一个目录,根据接口名去那个目录找到文件,文件解析得到实现类的全限定名,然后循环加载实现类和创建其实例。
缺点:
Java SPI 在查找扩展实现类的时候遍历 SPI 的配置文件并且将实现类全部实例化,假设一个实现类初始化过程比较消耗资源且耗时,但是你的代码里面又用不上它,这就产生了资源的浪费。
所以说 Java SPI 无法按需加载实现类。
因此 Dubbo 就自己实现了一个 SPI,让我们想一下按需加载的话首先你得给个名字,通过名字去文件里面找到对应的实现类全限定名然后加载实例化即可。
Dubbo 就是这样设计的,配置文件里面存放的是键值对。
dubbo spi 配置如图:
java spi 配置如图:
参考:阿里面试真题:Dubbo的SPI机制_敖丙-CSDN博客_dubbo spi
dubbo 的服务暴露机制
(阿里面试官:你知道Dubbo的服务暴露机制么?_敖丙-CSDN博客)
服务暴露的全流程:
1. 从代码的流程来看
- 第一步是检测配置,如果有些配置空的话会默认创建,并且组装成 URL 。
- 第二步是暴露服务,包括暴露到本地 的服务和远程 的服务。
- 第三步是注册服务至注册中心。
2. 对象构建转换的角度看
- 第一步是将服务实现类转成 Invoker。
- 第二部是将 Invoker 通过具体的协议转换成 Exporter。
根据配置,将配置内容委托给解析类,本质上就是生成了Spring 的BeanDefinition,然后利用Spring 最终创建对应的对象。
底层执行doExport() 方法,
dubbo 服务引用过程:字节面试:dubbo的服务引用过程_敖丙-CSDN博客_dubbo服务引入
dubbo 服务调用过程:面试杀手锏之Dubbo服务调用过程_敖丙-CSDN博客_dubbo调用流程
dubbo 一系列
- 基础知识
- dubbo 作用
- 透明化调用
- 负载均衡、容错机制
- 服务自动注册与发现
- 核心功能
- Remoting:网络通信框架
- Cluster:服务框架
- Registry:服务注册
- dubbo 作用
- 架构设计
- 核心组件
provider
consumer
registry
monitor
container - 注册与发现流程
- container 负责启动、加载、运行provider
- provider 在启动时,向注册中心注册自己提供的服务
- consumer 在启动时,向注册中心订阅自己所需的服务
- registry 返回服务提供者列表给消费者,如有变更,注册中心基于长连接推送变更数据给消费者
- consumer 从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果失败,再选另一台
- provider 和consumer 在内存中累计调用次数和调用时间,定时没分钟发送一次统计数据到监控中心monitor
- dubbo 整体分层
- service(接口服务)与业务逻辑相关,根据provider 和consumer 的业务,设计对应的接口和实现
- config(配置层)对外配置接口,以 ServiceConfig 和 ReferenceConfig 为中心
- porxy(服务代理层)
- registry(服务注册层)
- cluster(路由层)
- monitor(监控层)
- protocal(远程调用层)
- exchange(信息交换层)
- transport(网络传输层)
- serialize(数据序列化层)
- dubbo monitor 实现原理
感觉不重点? - dubbo 和spring cloud 的关系
dubbo 侧重于服务的调用、流量分发、流量监控和熔断
dubbo 定位服务治理
spring cloud 诞生于微服务架构时代,考虑微服务治理方方面面
spring cloud 是为了打造一个生态 - dubbo 和spring cloud 的区别
- dubbo 使用netty 的nio 框架,基于tcp 协议传输,配合hession 序列化完成rpc 通信
- Spring Cloud 是基于 Http 协议 Rest 接口调用远程过程的通信
但是rest 相比rpc 更为灵活
- dubbo 和dubbox 的区别
dubbox 是当当网基于dubbo 做的,加了服务可restful 调用,更新了开源组件等
- 核心组件
- 注册中心
- dubbo 有哪些注册中心
- multicast
- zk。采用zk 的watch 机制来实现数据变更。
- redis。采用key/map 存储,key 存储服务名和类型,map 中的key 存储服务url,value 存服务的过期时间。基于redis 的发布/订阅模式通知数据变更。
- simple
-
Dubbo 的注册中心集群挂掉,发布者和订阅者之间还能通信么?
可以通讯。启动 Dubbo 时,消费者会从 Zookeeper 拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用。
- dubbo 有哪些注册中心
-
集群
-
dubbo 集群有哪些负载均衡策略【4 种】。(默认为 Random 随机调用)
- Random LoadBalance: 随机选取提供者策略,有利于动态调整提供者权重。截面碰撞率高,调用次数越多,分布越均匀。
- RoundRobin LoadBalance: 轮循选取提供者策略,平均分布,但是存在请求累积的问题。
-
LeastActive LoadBalance: 最少活跃调用策略,解决慢提供者接收更少的请求。使慢的提供者收到更少请求。
-
ConstantHash LoadBalance: 一致性 Hash 策略,使相同参数请求总是发到同一提供者,一台机器宕机,可以基于虚拟节点,分摊至其他提供者,避免引起提供者的剧烈变动。
-
dubbo 集群容错方案【6 种】(默认的容错方案是 Failover Cluster)
- Failover Cluster:失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。
- Failfast Cluster:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
- Failsafe Cluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
- Failback Cluster:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
- Forking Cluster:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=”2″ 来设置最大并行数。
- Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错 。通常用于通知所有提供者更新缓存或日志等本地资源信息。
-
- 配置
(关于xml 命名空间、spring schema 都是啥东西:https://www.cnblogs.com/mesopotamia/p/4948861.html)- dubbo 配置文件如何加载到spirng 中的
(感觉不重要) - dubbo 超时设置有哪些实现方式
- provider 端设置(推荐服务端配置更多,因为提供者必消费者更了解服务的特性)
- consumer 端设置(如果consumer 设置了,以consumer 端配置为准,即优先级高)
- 服务调用超时怎么办
- 默认重试两次(如何实现的)
- dubbo 配置文件如何加载到spirng 中的
- 通信协议
- dubbo 默认使用什么通信框架
netty - 支持哪些协议
- dubbo:单一长连接,NIO 异步通讯,适合大并发、小数据量、消费者远大于服务提供者。传输协议tcp,异步hession 序列化。(默认)
- rmi
- webservice
- http
- hessian
- memcache
- redis。基于redis 实现的rpc 协议
- dubbo 默认使用什么通信框架
- 设计模式
- 工厂模式
- 装饰器模式
- 观察者模式
- 动态代理模式
- 运维管理
- 服务上线怎么兼容旧版本
使用版本号过渡,不同版本的服务注册到注册中心,版本号不同的服务相互间不引用 - dubbo 支持服务降级吗
通过 dubbo:reference 中设置 mock=“return null”
也可以设置mock = "true",然后跟接口同一个路径下实现一个mock 类,命名规则是“接口名称 + Mock” 后缀。然后在Mock 类中实现自己的降级逻辑 - 如何优雅停机
通过JDK 的ShutdownHook 来完成的
- 服务上线怎么兼容旧版本
- SPI
- dubbo spi 和java spi 的区别
- jdk
- 一次性加载所有的扩展实现
-
dubbo
-
对 Dubbo 进行扩展,不需要改动 Dubbo 的源码
-
延迟加载,可以一次只加载自己想要加载的扩展实现。
-
增加了对扩展点 IOC 和 AOP 的支持,一个扩展点可以直接 setter 注入其它扩展点。
-
Dubbo 的扩展机制能很好的支持第三方 IoC 容器,默认支持 Spring Bean。
-
- jdk
- dubbo spi 和java spi 的区别
-
其他。。。。。。
-
dubbo 支持分布式事务吗
不支持,可以通过tcc-transaction 框架实现。通过dubbo 的隐式传参功能,避免对业务代码的入侵。 -
dubbo 对结果进行缓存
在Reference 标签添加个true
-
Dubbo面试题(2020最新版) - 云+社区 - 腾讯云
线程模型 | Apache Dubbo
既然有 HTTP 请求,为什么还要用 RPC 调用? - 知乎
(spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制 - 搬砖的小学生 - 博客园
重点:Dubbo面试题(2020最新版) - 云+社区 - 腾讯云
https://juejin.cn/post/6844904149679603725
https://www.bilibili.com/read/cv4188272
https://www.136.la/jingpin/show-26588.html
dubbo spi 机制
这篇关于dubbo experience的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!