Dubbo常考知识点

作者:逍遥Sean
简介:一个主修Java的Web网站\游戏服务器后端开发者
主页:https://blog.csdn.net/Ureliable
觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言!

Dubbo⽀持哪些负载均衡策略

  1. 随机:从多个服务提供者随机选择⼀个来处理本次请求,调⽤量越⼤则分布越均匀,并⽀持按权重设置随机概率
  2. 轮询:依次选择服务提供者来处理请求, 并⽀持按权重进⾏轮询,底层采⽤的是平滑加权轮询算法
  3. 最⼩活跃调⽤数:统计服务提供者当前正在处理的请求,下次请求过来则交给活跃数最⼩的服务器来处理
  4. ⼀致性哈希:相同参数的请求总是发到同⼀个服务提供者

Dubbo是如何完成服务导出的?

  1. ⾸先Dubbo会将程序员所使⽤的@DubboService注解或@Service注解进⾏解析得到程序员所定义的服务参数,包括定义的服务名、服务接⼝、服务超时时间、服务协议等等,得到⼀个ServiceBean
  2. 然后调⽤ServiceBean的export⽅法进⾏服务导出
  3. 然后将服务信息注册到注册中⼼,如果有多个协议,多个注册中⼼,那就将服务按单个协议,单个注册中⼼进⾏注册
  4. 将服务信息注册到注册中⼼后,还会绑定⼀些监听器,监听动态配置中⼼的变更
  5. 还会根据服务协议启动对应的Web服务器或⽹络框架,⽐如Tomcat、Netty等

Dubbo是如何完成服务引⼊的?

  1. 当程序员使⽤@Reference注解来引⼊⼀个服务时,Dubbo会将注解和服务的信息解析出来,得到当前所引⽤的服务名、服务接⼝是什么
  2. 然后从注册中⼼进⾏查询服务信息,得到服务的提供者信息,并存在消费端的服务⽬录中
  3. 并绑定⼀些监听器⽤来监听动态配置中⼼的变更
  4. 然后根据查询得到的服务提供者信息⽣成⼀个服务接⼝的代理对象,并放⼊Spring容器中作为Bean

Dubbo的架构设计是怎样的?

Dubbo中的架构设计是⾮常优秀的,分为了很多层次,并且每层都是可以扩展的,⽐如:

  1. Proxy服务代理层,⽀持JDK动态代理、javassist等代理机制
  2. Registry注册中⼼层,⽀持Zookeeper、Redis等作为注册中⼼
  3. Protocol远程调⽤层,⽀持Dubbo、Http等调⽤协议
  4. Transport⽹络传输层,⽀持netty、mina等⽹络传输框架
  5. Serialize数据序列化层,⽀持JSON、Hessian等序列化机制

各层说明:

  • config 配置层:对外配置接⼝,以 ServiceConfig , ReferenceConfig 为中⼼,可以直接初始化配置类,也可以通过 spring 解析配置⽣成配置类
  • proxy 服务代理层:服务接⼝透明代理,⽣成服务的客户端 Stub 和服务器端 Skeleton, 以ServiceProxy 为中⼼,扩展接⼝为 ProxyFactory
  • registry 注册中⼼层:封装服务地址的注册与发现,以服务 URL 为中⼼,扩展接⼝为RegistryFactory , Registry , RegistryService
  • cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中⼼,以 Invoker 为中⼼,扩展接⼝为 Cluster , Directory , Router , LoadBalance
  • monitor 监控层:RPC 调⽤次数和调⽤时间监控,以 Statistics 为中⼼,扩展接⼝为MonitorFactory , Monitor , MonitorService
  • protocol 远程调⽤层:封装 RPC 调⽤,以 Invocation , Result 为中⼼,扩展接⼝为Protocol , Invoker , Exporter
  • exchange 信息交换层:封装请求响应模式,同步转异步,以 Request , Response 为中⼼,扩展接⼝为 Exchanger , ExchangeChannel , ExchangeClient , ExchangeServer
  • transport ⽹络传输层:抽象 mina 和 netty 为统⼀接⼝,以 Message 为中⼼,扩展接⼝为Channel , Transporter , Client , Server , Codec
  • serialize 数据序列化层:可复⽤的⼀些⼯具,扩展接⼝为 Serialization , ObjectInput ,ObjectOutput , ThreadPool

关系说明:

  • 在 RPC 中,Protocol 是核⼼层,也就是只要有 Protocol + Invoker + Exporter 就可以完成⾮透明的 RPC 调⽤,然后在 Invoker 的主过程上 Filter 拦截点。
  • 图中的 Consumer 和 Provider 是抽象概念,只是想让看图者更直观的了解哪些类分属于客户端与服务器端,不⽤ Client 和 Server 的原因是 Dubbo 在很多场景下都使⽤ Provider, Consumer,Registry, Monitor 划分逻辑拓普节点,保持统⼀概念。
  • ⽽ Cluster 是外围概念,所以 Cluster 的⽬的是将多个 Invoker 伪装成⼀个 Invoker,这样其它⼈只要关注 Protocol 层 Invoker 即可,加上 Cluster 或者去掉 Cluster 对其它层都不会造成影响,因为只有⼀个提供者时,是不需要 Cluster 的。
  • Proxy 层封装了所有接⼝的透明化代理,⽽在其它层都以 Invoker 为中⼼,只有到了暴露给⽤户使⽤时,才⽤ Proxy 将 Invoker 转成接⼝,或将接⼝实现转成 Invoker,也就是去掉 Proxy 层 RPC是可以 Run 的,只是不那么透明,不那么看起来像调本地服务⼀样调远程服务。
  • ⽽ Remoting 实现是 Dubbo 协议的实现,如果你选择 RMI 协议,整个 Remoting 都不会⽤上,Remoting 内部再划为 Transport 传输层和 Exchange 信息交换层,Transport 层只负责单向消息传输,是对 Mina, Netty, Grizzly 的抽象,它也可以扩展 UDP 传输,⽽ Exchange 层是在传输层之上封装了 Request-Response 语义。
  • Registry 和 Monitor 实际上不算⼀层,⽽是⼀个独⽴的节点,只是为了全局概览,⽤层的⽅式画在⼀起。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值