Dubbo原理学习总结一

前言:

         dubbo是阿里开源的一个RPC远程调用框架,但从RPC框架来说,dubbo功能比较完善,支持多种传输和序列化方案。


架构图和流程:

      dubbo架构图如下:

      

节点角色:

  • provider:暴露服务的服务提供方
  • Consumer:调用远程服务的服务消费方
  • Registry:服务注册与发现的注册中心
  • Monitor:统计服务的调用次数和调用时间的监控中心
  • Container:服务运行容器  

流程说明: 

  1. 服务容器负责启动,加载,运行服务提供者
  2. 服务提供者在启动时,向注册中心注册自己提供服务
  3. 服务消费者启动时,想注册中心订阅自己所需的服务
  4. 注册中心返回服务提供者地址列表给消费者,如果变更,注册中心将基于长连接推送变更数据给消费者
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

设计的意义:

  •     consumer和producer解耦,双方都可以横向增加节点数
  •     注册中心对本身可做集群,动态增减节点数,并且任意一台宕掉后,将会自动切到另外一台
  •     去中心化,双方不依赖注册中心,即使注册中心全部宕机,短时间内也不会影响服务的调用
  •     服务提供者无状态,任意一台宕机,不影响使用。

Dubbo调用模块详解       

          dubbo调用模块核心功能是发起一个远程方法的调用并顺利拿到返回结果,其体系组成如下:

  1.   透明代理: 通过动态代理技术,屏蔽远程调用细节以提高编程友好性。
  2.  负载均衡: 当有多个提供者时,如何选择哪个进行调用的负载算法。
  3.   容错机制: 当服务调用失败时采取的策略。
  4.   调用方式: 支持异步调用,同步调用
  5.   结果获取: 指同步等待结果返回还是异步通过回调通知获取结果。

负载均衡:

Dubbo目前官方支持的负载均衡策略如下:

  1. 随机(Random): 按权重设置随机概率,此为默认算法
  2. 轮训(roundrobin):按公约后的权重设置轮训比率
  3. 最少活跃调用数: 相同活跃数随机,活跃数指调用前后计数差
  4. 一致性:相同的参数总是发到同一台机器

设置方式支持如下四种方式设置,优先级由低至高:

loadbalance="roundrobin" />

容错:

Dubbo官方目前支持以下容错策略:

  1. 失败自动切换:调用失败后基于retries=“2” 属性重试其它服务器
  2. 快速失败:快速失败,只发起一次调用,失败立即报错。
  3. 勿略失败:失败后勿略,不抛出异常给客户端。
  4. 失败重试:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作
  5. 并行调用: 只要一个成功即返回,并行调用指定数量机器,可通过 forks="2" 来设置最大并行数。
  6. 广播调用:广播调用所有提供者,逐个调用,任意一台报错则报错

设置方式支持如下两种方式设置,优先级由低至高:

cluster="broadcast" />

cluster="broadcast"/ >

异步调用:

异步调用指发起远程调用之后获取结果的方式:

  1. 同步等待结果返回
  2. 异步等待结果返回
  3. 不需要返回结果

Dubbo中关于异步调用等待返回结果实现流程如图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值