Dubbo复习
2021-05-17 00:36:50 2 举报
AI智能生成
Dubbo原理
作者其他创作
大纲/内容
服务端发布和处理流程
服务端发布流程
1、ServiceConfig调用export()方法进入发布流程
1、对ServiceConfig的属性进行合法性校验
2、加载所有注册中心,可以同时注册到多个注册中心
3、将参数封装为URL
4、如果未指定是远程服务则也要导出本地服务
5、获取通过Javassist生成的Invoker对象
6、export(invoker),将元数据信息推送到注册中心
2、选择Protocol调用export(Invoker)
1、本地服务暴露为InjvmProtocol
2、远程服务为暴露为RegistryProtocol
3、调用DubboProtocol的export(Invoker)
1、生成DubboExport对象
2、缓存对象到exportMap中
3、开启NettyServer进行监听
服务端处理流程
1、NettyServer监听到消息后发给Dubbo内部业务线程池
2、DubboProtocol.connected()方法处理请求,根据URL里面的参数创建Invocation对象
3、从exportMap中取出对应的DubboExport对象调用invoker(invocation)方法
4、调用invoker方法后返回CompletableFuture对象,进行异步处理
消费方订阅和调用流程
消费方订阅流程
1、ReferenceConfig调用init()方法进入订阅流程
1、检查mock
2、如果是是本地引用,生成本地引用Invoker对象
3、不是本地引用,为注册中心的每个服务生成Invoker对象
4、使用Javassist创建Invoker的代理对象
2、选择Protocol调用refer()
1、本地服务暴露为InjvmProtocol
2、远程服务为暴露为RegistryProtocol
3、建立路由规则链
4、订阅服务提供者地址
1、为每个提供者的URL生成一个DubboInvoker对象
2、与服务提供者建立连接
3、使用装饰模式封装Filter责任链
4、缓存到invokerMap中,添加到Invoker列表
5、包装容错机制到Invoker对象
消费方调用流程
1、调用接口方法被invoker的代理对象拦截,调用Invoker的invoke()方法
2、根据请求参数创建invocation对象
3、使用invocation对象发起远程请求
4、对返回结果进行处理:异步/同步
服务降级和mock
服务降级
流程
1、服务提供者注册降级信息到zookeeper
2、服务消费者订阅降级信息
3、MockClusterInvoker发起远程调用时检查URL执行降级策略
降级策略
force:return
fail:return
消费端mock
1、消费方设置mock实现类
2、远程服务调用失败时则再获取mock类的Invoker对象
3、调用mock类的代理Invoker对象的invoke()方法
线程模型和线程池策略
线程池模型
all
direct
message
execution
connection
线程池策略
FixedThreadPool
线程数默认200
默认队列SynchronousQueue(不存元素)
队列个数设置小0,使用无界的LinkedBlockingQueue
队列个数设置大于0,使用有界的LinkedBlockingQueue
LimitedThreadPool
核心线程数默认0
默认最大线程数200
EagerThreadPool
核心线程数默认0
默认最大线程数200
空闲60秒回收
CachedThreadPool
核心线程数默认0
默认最大线程数200
空闲60秒回收
并发控制
服务消费端
使用Synchronize实现等待超时机制
使用AtomicInteger原子类CAS更新并发线程数
服务提供端
使用AtomicInteger原子类CAS更新并发线程数
分层结构
Service和Config层
提供方发布服务:ServiceConfig
代理消费方接口:ReferenceConfig
Proxy代理层
对服务消费端接口进行代理,本地调用转换为远程调用
对服务提供方实现类进行代理,把服务实现类转换为Wrapper类,使用Javassist减少反射调用
Registry服务注册中心层
服务提供方把服务注册到注册中心
消费者启动时去注册中心获取服务提供方的地址列表
Cluster路由层
路由规则
负载均衡
集群容错
Monitor监控层
Protocol远程调用层
Exchange信息交换层
Transport网络传输层
Serialize序列化层
远程调用概要
服务暴露过程
1、ServiceConfig通过ProxFactory的getInvoker()方法生成一个Invoker对象
2、通过DubboProtocol的export()方法将Invoker对象转换为Exporter对象
服务引用过程
1、ReferenceConfig通过refer()方法为注册中心的每个服务生成Invoker实例
2、通过ProxFactory将Invoker转换为客户端需要的接口
基本原理
适配器原理
1、动态编译生成Protocol$Adaptive
2、Protocol$Adaptive根据URL中的参数选择对应的实现类
获取适配器对象采用了缓存的双重检查
增强SPI
JDK标准SPI的缺点
一次性实例化所有扩展点的实现
扩展点加载失败,异常信息不友好
不支持IOC和AOP
SPI的IOC
SPI的AOP
Javassist
集群容错和负载均衡策略
集群容错
Failover
Failfast
Failsafe
Failback
Forking
Broadcast
负载均衡策略
随机策略
轮训策略
最少活跃数
一致性hash
泛化调用
0 条评论
下一页