欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送!
在我后台回复 「资料」 可领取
编程高频电子书
!
在我后台回复「面试」可领取硬核面试笔记
!文章导读地址:点击查看文章导读!
感谢你的关注!
最新 Dubbo3 深入理解原理系列
Dubbo 的特性
这里说一下 Dubbo 最主要的特性,从这些特性中,就可以看出来我们为什么要选用 Dubbo,也可以将 Dubbo 和 Spring Cloud 进行对比,比如我们搭建一套微服务系统,出于什么考虑选用 Dubbo,又是出于什么考虑而选用 Spring Cloud 呢?
Dubbo 主要的特性
- 负载均衡
- 服务注册、服务发现
- 高性能 RPC 调用
接下来针对 Dubbo 的讲解主要从这 3 个特性出发
Dubbo、SpringCloud 技术选型
不过在说 Dubbo 特性之前,要先说一下面试相关的东西,因为我们在面试中,Dubbo 毕竟是分布式相关的东西,那么面试官可能问我们公司是如何进行技术选型的呢?为什么选择使用了 Dubbo 而不是 Spring Cloud 呢?
其实技术选型的东西,就是比较考察你对这两个框架特性的了解,那么像你如果选用了 Dubbo,那么就说一下 Spring Cloud 存在的缺点即可:
- 落地成本以及后期维护成本大
- 欠缺服务治理功能,尤其负载均衡、流量路由方面较弱
- 基于 HTTP 进行通信,性能不如 RPC 框架
而这些缺点,也正是 Dubbo 的优势所在,Dubbo 使用 RPC 进行通信,追求极致的性能,并且可以进行服务治理、负载均衡!
答出来他们各自的优势,那么再说一下由于公司开发人员对于 Dubbo 比较熟悉,因此最终选用 Dubbo 作为分布式框架
Dubbo 工作原理
首先,在讲解 Dubbo 特性之前,先把 Dubbo 的工作原理给梳理一下,了解 Dubbo 底层是如何进行工作的
从整体上先把握,之后再深入到具体特性进行学习
Dubbo 主要分为 3 个部分:注册中心、服务消费者、服务提供者,Dubbo 工作的流程如下:
1、每个服务提供者都会去注册中心注册自己,包括自己的地址(ip+port)
2、服务消费者去消费时,从注册中心(Dubbo 使用 ZooKeeper 作为注册中心)中拉取服务列表
3、消费者会去为远程代理对象创建一个动态代理对象,通过动态代理来拦截方法的执行
4、在代理对象的拦截中,会去执行一系列的操作
4.1、负载均衡,选择一台机器进行通信
4.2、选择一种通信协议:Dubbo 提供了自定义的高性能 rpc 通信协议
4.3、将请求进行封装,并且序列化
4.4、通过网络通信框架,将远程调用请求传给 Dubbo 服务提供者
5、Dubbo 服务提供者收到后,也会进行一系列操作解析请求,最后调用本地服务,将执行结果返回给服务消费者
Dubbo 的负载均衡策略
负载均衡策略就是当某个服务压力比较大的时候,这时候部署多个节点同时提供相同的服务
当服务消费者来消费的时候,可以从这多个节点中选择一个节点进行消费,这个选择的过程,就是 负载均衡
Dubbo 提供了多种负载均衡策略:
Random LoadBalance
基于权重的随机负载均衡策略,为 Dubbo 的 默认策略
特点就是:根据每个服务的权重来设置它的随机概率,如下图
RoundRobin LoadBalance
基于权重的轮询负载均衡策略,一般不使用该策略
因为轮询的话有一个比较致命的问题,如果其中有一台机器处理请求的速度比较慢,那么当一个请求被转发到很慢的机器上之后,很久都没有处理完,会导致其他请求也会被转发到这个机器上,导致该机器上堆积很多请求,更加处理不过来了
LeastActive LoadBalance
最少活跃负载均衡策略
也就是看哪台机器上活跃的请求比较少,如果活跃的请求数量较少,说明该机器的负载时比较低的
如果活跃的请求数量较多,说明该机器的处理速度较慢,造成请求堆积
ConsistentHash LoadBalance
一致性 Hash 负载均衡策略
可以保证相同参数的请求总是发到同一提供者,当某一台提供者机器宕机时,原本发往该提供者的请求,将基于虚拟节点平摊给其他提供者,这样就不会引起剧烈变动。
基于注解配置负载均衡策略
@Reference(loadbalance = "roundrobin")
HelloService helloService;