Dubbo
2020-06-16 10:07:36 0 举报
AI智能生成
Dubbo
作者其他创作
大纲/内容
负载均衡策略
泛化调用原理?
注册中心
注册中心技术选型?
一致性协议
Paxos
按公示问题数可分为
Basic Paxos
Muti Paxos
为了提高效率
角色
Proposer
Acceptor
Learner
ZAB
在Leader选举时节点状态
LOOKING
Leader选举阶段
OBSERVING
不参与投票
FOLLOWING
参与投票
LEADING
ZAB协议的四个阶段
1. 选举阶段
2. 发现阶段
3. 同步阶段
只有当Quorum都同步完成,准Leader才会成为真正的Leader
4. 广播阶段
基于Java的ZAB实现
1. Fast Leader Election
2. Recovery Phase 崩溃恢复,需要解决一下2个问题
保证示例1. Leader产生了proposal,发给Follower之后,只有自己COMMIT。新Leader必须保证这个P也必须COMMIT
保证示例2. Leader产生了Proposal,在宕机之前没有Follower看到这个Proposal。则该Server恢复之后也必须丢失这个P
3. Broadcast Phase 消息广播
简化的2PC
简单的2PC不能处理Leader失效的情况,因此增加了Recovery模式
选举步骤
投票
接受选票
处理选票
统计
QA
1. Paxos和Zab的区别?Zab相比Paxos有什么优点?
Paxos的一致性达不到Zab要求看,Paxos不关心请求之间的逻辑顺序
2. ZK可以通过增加节点,提升集群性能吗?
3. Raft和ZAB之间的区别?
文献
ZooKeeper学习第七期--ZooKeeper一致性原理
zab paper
Raft
文献
Raft 一致性算法论文译文
寻找一种易于理解的一致性算法(扩展版)
架构
服务暴露过程
流程图
文献
dubbo剖析:一 服务发布
过程
1. 通过NamespaceHandlerSupport和DubboBeanDefintionParser实现配置文件解析ServiceBean
2. 通过监听Spring事件触发服务发布过程
3. 遍历注册中心URL,暴露远程服务,JavassistProxyFactory创建Invoker;
4. 通过RegistryProtocol将Invoker发布成Dubbo服务;
5. 最终有ServiceConfig维护所有发布的Exporter与服务URL到本地内存
2. 通过监听Spring事件触发服务发布过程
3. 遍历注册中心URL,暴露远程服务,JavassistProxyFactory创建Invoker;
4. 通过RegistryProtocol将Invoker发布成Dubbo服务;
5. 最终有ServiceConfig维护所有发布的Exporter与服务URL到本地内存
服务引用
流程图
文献
Dubbo原理和源码解析之服务引用
dubbo剖析:二 服务引用
过程
1、引用配置及配置初始化
该部分以Spring配置及ReferenceBean为入口,主要在ReferenceConfig中进行。
ReferenceConfig依赖RegistryProtocol完成了 "服务引用者注册"、"服务提供者订阅"和"Invoker创建" 的工作;
ReferenceConfig依赖JavassistProxyFactory完成了 "代理对象生成" 的工作;
2、注册中心订阅 & Invoker生成与获取
该部分主要由RegistryDirectory和FailfastCluster实现。
通过ReferenceConfig调用RegistryDirectory的subscribe方法,触发了对服务提供者url的订阅及监听,在监听过程中RegistryDirectory借助DubboProtocol完成了Invoker的创建工作,并保存了服务引用url和Invoker的关系;
通过ReferenceConfig调用FailfastCluster的join方法,完成了对Invoker对象的获取;
3、生成代理对象
该部分主要由JavassistProxyFactory完成。
以ReferenceConfig调用JavassistProxyFactory的getProxy方法为入口,传入Invoker;
新创建了InvokerInvocationHandler,并使用dubbo自己的动态代理工具Proxy最终生成代理对象T ref;
该部分以Spring配置及ReferenceBean为入口,主要在ReferenceConfig中进行。
ReferenceConfig依赖RegistryProtocol完成了 "服务引用者注册"、"服务提供者订阅"和"Invoker创建" 的工作;
ReferenceConfig依赖JavassistProxyFactory完成了 "代理对象生成" 的工作;
2、注册中心订阅 & Invoker生成与获取
该部分主要由RegistryDirectory和FailfastCluster实现。
通过ReferenceConfig调用RegistryDirectory的subscribe方法,触发了对服务提供者url的订阅及监听,在监听过程中RegistryDirectory借助DubboProtocol完成了Invoker的创建工作,并保存了服务引用url和Invoker的关系;
通过ReferenceConfig调用FailfastCluster的join方法,完成了对Invoker对象的获取;
3、生成代理对象
该部分主要由JavassistProxyFactory完成。
以ReferenceConfig调用JavassistProxyFactory的getProxy方法为入口,传入Invoker;
新创建了InvokerInvocationHandler,并使用dubbo自己的动态代理工具Proxy最终生成代理对象T ref;
SPI
和JDK SPI的区别?
微内核+插件
容错机制
failover
如果出现故障,则重试备份操作模式
failfast
如果出现故障,则立即报错
failsafe
如果出现故障,则可以忽略
failback
故障切换之后,如果主要操作模式恢复,则自动从备份操作模式恢复主要操作模式
forking
0 条评论
下一页
为你推荐
查看更多