Dubbo 源码剖析与实战
何辉
平安壹钱包架构师
4711 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
开篇词 (1讲)
Dubbo 源码剖析与实战
15
15
1.0x
00:00/00:00
登录|注册

01|温故知新:Dubbo基础知识你掌握得如何?

你好,我是何辉。
任何一门学科都有它基本的知识结构,而 Dubbo 作为一款优秀的微服务框架,自然也有着其领域的基础知识。所谓万丈高楼平地起,想把 Dubbo 用得游刃有余,对基础知识的深刻理解就尤为重要了。
举一个最基础的问题:Dubbo 的总体架构是什么样?一定有初学者或者面试官问过你吧,但常年忙着写业务代码逻辑,对于这样的提问,想必你是既熟悉又陌生,有种欲言又止的感觉,心里清楚却又无法一气呵成地向他人讲清楚。
没关系,今天,我们就一起来回顾 Dubbo 的基础知识体系,温故知新,之后我们碰到的一些异常或者问题时,就能快速定位问题归属于 Dubbo 的哪个角色,找准方向力求解决。

总体架构

我们知道,Dubbo 的主要节点角色有五个:
Container:服务运行容器,为服务的稳定运行提供运行环境。
Provider:提供方,暴露接口提供服务。
Consumer:消费方,调用已暴露的接口。
Registry:注册中心,管理注册的服务与接口。
Monitor:监控中心,统计服务调用次数和调用时间。
我们画一张 Dubbo 的总体架构示意图,你可以清楚地看到每个角色大致的交互方式:
对于一个 Dubbo 项目来说,我们首先会从提供方进行工程创建(第 ① 步),并启动工程(第 ② 步)来进行服务注册(第 ③ 步),接着会进行消费方的工程创建(第 ④ 步)并启动订阅服务(第 ⑤ 步)来发起调用(第 ⑥ 步),到这里,消费方就能顺利调用提供方了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Dubbo是一款优秀的微服务框架,本文详细介绍了Dubbo的总体架构和实际操作。文章首先分析了Container的服务运行容器和Provider的提供方的工程创建及启动过程,并介绍了Dubbo 3.x的应用级注册新特性。此外,还讨论了消费方向提供方发起远程调用可能遇到的异常情况及解决方法。文章还提供了设置超时时间、重试次数和故障转移等实用技巧。通过对Dubbo的基础知识和实际操作的详细介绍,本文对于想要深入了解Dubbo的读者具有很高的参考价值。文章内容丰富,涵盖了Dubbo框架的各种调用考量因素,以及Dubbo的容错策略和负载均衡策略。整体而言,本文是一篇值得阅读的技术文章,适合对Dubbo架构体系中各个角色的作用和操作注意点感兴趣的技术人员。 文章内容涵盖了Dubbo的总体架构、服务运行容器、提供方的工程创建及启动过程、应用级注册新特性、远程调用异常情况及解决方法、超时时间设置、重试次数、故障转移等实用技巧。此外,还介绍了Dubbo的消费方、提供方、注册中心、监控中心和容器等五个角色的作用和操作注意点。通过对Dubbo框架的各种调用考量因素和容错策略、负载均衡策略的详细介绍,读者可以快速了解Dubbo的技术特点和操作要点。文章内容丰富,语言简洁,适合技术人员快速了解Dubbo框架的关键知识点。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Dubbo 源码剖析与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(22)

  • 最新
  • 精选
  • 熊猫
    老师,你好,dubbo有没有这样的功能,一个接口多种实现,根据参数(标识渠道不同)来区分最终路由到哪个实现?再或者有没有在客户端可以知道有哪几种实现?

    作者回复: 你好,熊猫:顺着你的意思,在客户端就知道有哪几种实现,是不是可以再继续抽象一层,通过 “路由标识” 到不同的实现(甚至都可以不用关心是哪个实现,只要路由标识能找到就行)。至于这个 “路由标识” 可以通过查找存储媒介形式(比如:数据库、配置中心等)来寻找对应的 “接口中具体的方法”,这样应该就可以做成一套通用的分发调用框架了(比如:智能网关)。详细的话可以去看看 “泛化调用”、“点点直连” 章节。

    2022-12-19归属地:广东
    6
    6
  • Geek_895efd
    老师,关于注册中心部分,确实有很多选择,相对于zookeeper等,用阿里自家孵化出的nacos来做注册中心是不是更好

    作者回复: 你好,Geek_895efd:可以参考我之前对etcd的一些理解,没有更好,只有适合自己当前项目的才是最好的。 比如etcd是一个年轻的go项目,同样是解决分布式协调问题,并且吸收zookeeper实现上的经验,在api的使用、实例的动态增减、数据体量的存储,且对外部语言的支持也更加友好。但是他的年轻和高速的迭代开发不免在稳定性上会使得一些大项目望而却步的考量因素。 其次还得看公司的运维能力,如果运维擅长zookeeper的话那大概率就使用zookeeper了,如果运维擅长etcd的话那正好可以借此机会狠狠与真实业务实战一把。两者都擅长的话,项目求稳还是可以考虑使用传统的zookeeper的,激进的话可以考虑etcd。不过大多数项目对于好多新特性都用不着,基本的增删改查和灵活的通知机制就非常够用了。

    2022-12-23归属地:湖南
    2
    4
  • Geek_244b79
    老师,您好,看完课程有两个疑问,1.监控中心是存在于哪里 2.注册中心的消息推送是主动推送的吗?希望老师看到可以帮忙解答,谢谢!

    作者回复: 你好,Geek_244b79: 1.监控中心,是一个模块,可以是和应用运行在同一个进程的模块,也可以是和应用隔离开的另外一个进程(或另外一台服务器)。而监控中心,是针对数据监控的,那就势必有数据上报,既然需要上报数据,那就得分为监控中心客户端模块(负责收集监控数据上报至监控中心服务端),监控中心服务端模块(负责分析处理监控中心客户端上报的数据)。 2.注册中心的消息推送是zk服务端主动推送至zk客户端,主要是基于zk客户端与zk服务端建立了长连接机制。

    2023-01-18归属地:北京
    3
    1
  • java小霸王
    异常信息可以看出 1 超时机制是通过completeFutrue 2 failover策略

    作者回复: 你好,java小霸王:你的眼睛很犀利,看出了两个具有代表性的特征,非常好,为你的认真仔细点赞。 异常信息中,还有蛮多的,详细可以见“02 异步化实践”章节的解答,熟悉这个异常是基本,灵活根据异常分析出问题是关键,可以多多体会一下~

    2022-12-27归属地:广东
    1
  • null
    老师,注册中心使用zookeeper和etcd哪个好?

    作者回复: 你好,特别的 null 标识朋友:etcd是一个年轻的go项目,同样是解决分布式协调问题,并且吸收zookeeper实现上的经验,在api的使用、实例的动态增减、数据体量的存储,且对外部语言的支持也更加友好。但是他的年轻和高速的迭代开发不免在稳定性上会使得一些大项目望而却步的考量因素。 其次还得看公司的运维能力,如果运维擅长zookeeper的话那大概率就使用zookeeper了,如果运维擅长etcd的话那正好可以借此机会狠狠与真实业务实战一把。两者都擅长的话,项目求稳还是可以考虑使用传统的zookeeper的,激进的话可以考虑etcd。不过大多数项目对于好多新特性都用不着,基本的增删改查和灵活的通知机制就非常够用了。

    2022-12-21归属地:湖南
    1
  • 慎独明强
    补充一点:负载均衡策略,源码里面还有ShorestResponseLoadBalance 异常信息获取: 1) 重试次数为3,取的默认值 正常调用+重试2次 2) providers [192.168.100.183:28040] (1/1) providers列表为1,第一次调用就失败了 3)集群容错策略为failOver故障转移 4)超时时间为1000ms 5)调用DemoFacade的sayHello方法超时

    作者回复: 慎独明强,你好:补充的非常棒,补充了我遗漏的一个,为你的细心点赞,细心是好事,可以抠出很多自己未知的细节因素,很好很棒。 异常信息中,还有蛮多的,详细可以见“02 异步化实践”章节的解答,熟悉这个异常是基本,灵活根据异常分析出问题是关键,可以多多体会一下~

    2022-12-19归属地:广东
    1
  • Geek_327f7f
    老师,我觉得您这里的dubbo架构图跟dubbo官网的出入挺大的,感觉您这个架构图应该是在dubbo框架下的微服务架构而不是dubbo的架构图,不知道我的理解是否正确。而且provider和consumer都是需要一个container提供dubbo的运行环境的吧,我看您的架构图中只有provider有container而consumer并没有。

    作者回复: 你好,Geek_327f7f:侧重在提供方,主要是消费方也可以不是 dubbo 服务,比如消费方直接用 Socket 请求模拟 dubbo 协议发送请求,同样可以拿到数据的。

    2023-05-21归属地:中国香港
  • simuso
    为什么本地的zk连接没问题,如何连接其他服务器的zk就不行呢

    作者回复: 你好,simoso:能描述再具体点么?是遇到墙不通的问题呢?还是需要做下域名啥的还是啥啥啥呀?

    2023-05-02归属地:四川
  • 天天学习
    老师,dubbo.application.service-discovery.migration在yml文件配置的时候为什么没有提示选项呢,也点不进这个配置,我用的dubbo是3.1.8版本的

    作者回复: 你好,天天学习:我用的不是社区版,所以可以点进去看的~

    2023-04-27归属地:福建
  • Geek_forMySelf
    发生了TimeoutException应该需要provider方实现接口的幂等吧

    作者回复: 你好,Geek_forMySelf:很 nice 的一个经典场景回答,不过也得看具体业务,如果是那种查询请求的话,幂等性与否意义不是很大;但是对于写请求的话,如果业务逻辑容忍重复数据,也做幂等性处理也无关痛痒;反而对于那种不允许重复请求导致生成重复数据的功能业务,幂等性就显得至关重要了。

    2023-03-22归属地:广东
收起评论
显示
设置
留言
22
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部