为了账号安全,请及时绑定邮箱和手机立即绑定

【学习打卡】第13天 Dubbo学习

标签:
微服务

课程名称Java架构师-技术专家
课程章节:第25周 服务治理的另一条路 - Dubbo
主讲老师:慕课讲师团:Geely、风间影月、阿神……

课程内容:

1、认识 RPC 和 Dubbo

1.1、认识RPC

RPC 全称 Remote Procedure Call,使用RPC都需要自定义 RPC 协议
图片描述

1.2、RPC vs REST HTTP接口分格

  • RPC 面向执行过程
  • REST HTTP 面向所操作的资源
RPC HTTP
应用层协议 RPC协议,底层传输基于TCP 超文本传输协议
编程友好程度 配置高效简单,接口拿来就用 配置繁琐,资源定位GET/POST
传输效率 应用 gzip 等压缩技术 http携带的信息较多,报文中的有效信息占比小
框架实现难度 简单

问:RPC那么好,为啥还用 SpringCloud
答:RPC 再好也就是服务治理框架,并不能解决所有微服务问题

1.3、Dubbo的特性

Dubbo是一款轻量级+ 高性能的RPC 框架,Dubbo的很多理念和SpringCloud中的组件都差不多。
(1)基于接口+动态代理的远程方法调用
Dubbo 对开发这屏蔽了底层的调用细节,在实际代码中调用远程服务就像调用一个本地接口类一样方便。这个功能和Feign很类似。
(2)负载均衡
Dubbo内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。这部分功能和 Ribbon十分接近,但是Dubbo的负载均衡策略不如Ribbon 的多,而且Dubbo的负载均衡能力只能供自己享用,而 Ribbon 可以赋能给SpringCloud 里的各个组件。
(3)集群容错
Dubbo提供了一个Culster组件专门用来做集群容错,它其实并不是Hystix这类降级组件,而是一种”异常重试”组件。
(4)服务治理
支持多种注册中心服务,服务实例上下线实时感知。
服务注册、服务发现、服务下线之类的流程,这里的功能和Eureka里的概念是一模一样的,只是实现方式却大有不同。比如Dubbo在服务下线后会主动将可用服务列表下发到各个服务节点,送货上门服务周到,而Eureka每次都等着服务节点自己上注册中心拿数据,不给包邮的。
Dubbo的技能加点比较专一,全点在了 服务治理系,但论体系的化,是不可能和SpringCloud 相提并论的。

1.4、Dubbo架构

Dubbo有五个基础组件,下面图中紫色线条带代表了组件初始化的路径,蓝色虚线是异步通知流程,蓝色实线则是同步阻塞调用。
Dubbo架构图
上图中出现的五个组件分别对应如下功能

组件名称 说明
Registry 注册中心
Provider 服务提供方
Consumer 向Provider发起远程调用的消费者
Monitor 监控中心,用来统计服务调用的频率和响应时间
Container 运行服务的容器
  • Start:服务容器启动后初始化服务提供者
  • Register:服务提供者在启动的过程中,向注册中心发起注册,这个步骤和Eureka的流程很像
  • Subscribe:服务消费者在启动的同时,向注册中心订阅所需的服务。这一个流程就和Eureka大不相同了,Eureka是Consumer主动到服务中心去拉取数据,而Dubbo采用了 一种 Pub/Sub模式,也就是发布订阅模式。
  • Notify:注册中心将Provider地址列表发送给消费者,对于服务下线之类的变更,注册中心会主动推送变更数据到Consumer(建立在长连接之上)
  • invoke:服务消费者发起远程调用,这个过程会使用负载均衡算法挑选目标服务器。
  • Count:Consumer 和 Provider 每隔一段时间将统计信息发送到监控中心,平时这些信息就暂存于内存当中。

1.5、Dubbo 和 Eureka 中服务发现的不同

服务发现应该是 Dubbo和Eureka 最大的一个不同之处。
Dubbo里的注册中心、Provider和Consumer三者之间都是长连接,借助于Zookeeper的高吞吐量,实现基于为服务端的服务发现机制。因此Dubbo利用Zookeeper+发布订阅模型可以很快将服务节点的上线和下线同步到Consumer集群。如果服务提供者宕机,那么注册中心的长连接会立马感知到这个时间,并且立即推送到消费者。

Eureka使用客户端的服务发现机制,因此对服务列表的变动响应会稍慢,比如在某台机器下线以后,在一段时间内可能还会陆续有服务请求发送过来,当然这些请求会收到 Service Unavaliable的异常,需要借助Ribbon或Hystix实现重试或者降级措施。

对于注册中心宕机的情况,Dubbo和Eureka的处理方式相同,这两个框架的服务节点都本地缓存 了服务提供者的列表,因此仍然可以发起调用,但服务提供者列表无法被更新,因此可能导致本地缓存的服务状态与实际情况有别。

学习收获

今天学习了

  1. RPC 和HTTP 的区别
  2. dubbo的特性以及和 springcloud 的区别
  3. dubbo架构及核心组件
  4. dubbo的工作原理,dubbo 和 eureka 的不同
    图片描述
    图片描述
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
6
获赞与收藏
11

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消