【最新Dubbo3深入理解】Dubbo特性、工作原理以及负载均衡策略

欢迎关注公众号(通过文章导读关注:【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 服务提供者收到后,也会进行一系列操作解析请求,最后调用本地服务,将执行结果返回给服务消费者

1704897771000

Dubbo 的负载均衡策略

负载均衡策略就是当某个服务压力比较大的时候,这时候部署多个节点同时提供相同的服务

当服务消费者来消费的时候,可以从这多个节点中选择一个节点进行消费,这个选择的过程,就是 负载均衡

image-20240218180340163

Dubbo 提供了多种负载均衡策略:

Random LoadBalance

基于权重的随机负载均衡策略,为 Dubbo 的 默认策略

特点就是:根据每个服务的权重来设置它的随机概率,如下图

image-20240218180753406

RoundRobin LoadBalance

基于权重的轮询负载均衡策略,一般不使用该策略

因为轮询的话有一个比较致命的问题,如果其中有一台机器处理请求的速度比较慢,那么当一个请求被转发到很慢的机器上之后,很久都没有处理完,会导致其他请求也会被转发到这个机器上,导致该机器上堆积很多请求,更加处理不过来了

LeastActive LoadBalance

最少活跃负载均衡策略

也就是看哪台机器上活跃的请求比较少,如果活跃的请求数量较少,说明该机器的负载时比较低的

如果活跃的请求数量较多,说明该机器的处理速度较慢,造成请求堆积

ConsistentHash LoadBalance

一致性 Hash 负载均衡策略

可以保证相同参数的请求总是发到同一提供者,当某一台提供者机器宕机时,原本发往该提供者的请求,将基于虚拟节点平摊给其他提供者,这样就不会引起剧烈变动。

基于注解配置负载均衡策略

@Reference(loadbalance = "roundrobin")
HelloService helloService;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/692368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第56天 | 300.最长递增子序列 674.最长连续递增序列 718.最长重复子数组

最长递增子序列 这里dp数组的定义比较难想。dp[i] 表示 i 之前的序列中以 nums[i] 结尾的最长递增子序列长度&#xff0c;只有这样才能实现状态递推。对于dp数组初始化&#xff0c;所有下标位置都应该初始化为1。 class Solution{ public:int lengthOfLIS(vector<int>&a…

课后延时服务选课报名管理系统功能清单

课后延时服务选课报名管理系统分为学校端&#xff0c;培训机构端&#xff0c;家长端。 学校端提供学生管理&#xff0c;课程管理&#xff0c;班级管理&#xff0c;班级排课&#xff0c;班级课表&#xff0c;可直接安排学生入班上课&#xff0c;查看学生考勤情况&#xff0c;查…

网关服务gateway注册Consul时报错Consul service ids must not be empty

网关服务gateway启动时&#xff0c;初始化Consul相关配置时报错。 Consul service ids must not be empty, must start with a letter, end with a letter or digit, and have as interior characters only letters, digits, and hyphen: cbda-server-gateway:10.111.236.142:…

stm32学习笔记-STLINK使用

stm32学习笔记-STLINK使用 使用ST-LINK调试程序进度表格 使用ST-LINK调试程序 说明 组成 总结 记录使用STLINK进行项目的烧写和调试&#xff0c;旨在高效的进行代码调试学习工具包括笔记本、keil5MDK、stm32f030c8t6电表主机、STLINK V2、导线、电表代码总的来说&#xff0…

深度学习图像算法工程师--面试准备(1)

1 请问人工神经网络中为什么 ReLU 要好过于 tanh 和 Sigmoid function&#xff1f; 采⽤Sigmoid 等函数&#xff0c;算激活函数时&#xff08;指数运算&#xff09;&#xff0c;计算量⼤&#xff0c;反向传播求误差梯度时&#xff0c;求导涉及除法和指数运算&#xff0c;计算量…

企业级 文件传输加密应用,干货分享

企业级 文件传输加密应用 简历一直在投&#xff0c;一直无音讯&#xff0c;今天我又从硬盘里翻出一个 好玩的加密软件&#xff0c;这个是 2017年的时候和荷兰某世界500强公司合作的小项目。 今天分享给大家 。 文章目录 企业级 文件传输加密应用1.目的2.软件介绍3.下载好 安装…

Discuz! X3.4上次访问时间显示1970积分不增加问题

您好&#xff0c;我discuz论坛的【注册用户注册信息的运行】存在问题&#xff0c;您看能调试吗&#xff1f; 这个论坛的“注册用户信息是”从其它discuz论坛【迁移过来的】&#xff0c; 所以&#xff0c;目前&#xff1a; 全部用户 新注册用户 迁移过来的用户 故障现象是…

我的NPI项目之Android USB 系列(一) - 遥望和USB的相识

和USB应该是老朋友了&#xff0c;从2011年接触Android开发开始&#xff0c;就天天和USB打交道了。那时候还有不 对称扁头的usb/方口的usb&#xff0c;直到如今使用广泛的防反插USB3.0 type-C。 但是&#xff0c;一直有一个不是很清楚的问题萦绕在心头&#xff0c;那就是。先有…

Java基于SpringBoot+Vue的图书管理系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Spring相关注解

文章目录 Spring注解Bean1、Bean 概述2、Bean 的声明1&#xff09;搭配 Configuration2&#xff09;搭配 Component3&#xff09;搭配 ApplicationContext 3、Bean 的注入1&#xff09;NO&#xff08;主要关注这个&#xff09;【1】同一配置类【2】不同配置类 2&#xff09;BY_…

软件测试进阶自动化测试流程

如果想让测试在公司的项目中发挥出它最大的价值&#xff0c;并不是招两个测试技术高手&#xff0c;或引入几个测试技术&#xff0c;而是测试技术对项目流程的渗透&#xff0c;以及测试流程的改进与完善。虽然&#xff0c;当然测试行业前景乐观&#xff0c;许多中小企业也都在引…

C++11---(3)

目录 一、可变参数模板 1.1、可变参数模板的概念 1.2、可变参数模板的定义方式 1.3、如何获取可变参数 二、lambda表达式 2.1、Lamabda表达式定义 2.2、为什么有Lambda 2.3、Lambda表达式的用法 2.4、函数对象与lambda表达式 三、包装器 3.1、function 3.2、bind …

Spring源码:手写SpringIOC

文章目录 一、分析二、实现1、版本1&#xff1a;实现Bean注入IOC容器&#xff0c;并从容器中获取1&#xff09;定义BeanDefinition2&#xff09;定义BeanDefinition实现类3&#xff09;定义BeanDefinitionRegistry4&#xff09;定义Beanfactory5&#xff09;定义默认Beanfactor…

GC调优学习

一.常见工具P62P63 1.jstat 2.visualvm插件 3.Prometheus Grafana 4.GC日志 5.GC Viewer 6.GCeasy&#xff08;强推&#xff09; 二.常见的GC模式P64 三.GC调优 1.优化基础JVM参数P65 2.减少对象产生 看以前视频&#xff0c;内存泄露相关 3.垃圾回收器的选择P66 4.优化垃圾回…

防御保护---内容保护

文章目录 目录 文章目录 一.防火墙内容安全概述 二.深度识别技术&#xff08;DFI/DPI&#xff09; 深度包检测技术&#xff08;DPI&#xff09; 深度流检测技术&#xff08;DFI&#xff09; 两者区别 三.入侵防御IPS 一.防火墙内容安全概述 防火墙内容安全是防火墙的一个重…

软件测试方法_边界值分析法

目录&#xff1a; ①边界值分析法的介绍和概念 ②边界值分析法的原理和思想 ③单缺陷假设和多缺陷假设 ④边界值测试数据类型 ⑤内部边界值分析 ⑥各类边界值测试介绍 ⑦基于边界值分析方法选择测试用例的原则 ⑧边界值分析法的实例分析 1、边界值分析法的介绍和概念 …

全面解读视频生成模型Sora

2024年2月15日&#xff0c;OpenAI在其官网发布了《Video generation models as world simulators》的报告&#xff0c;该报告提出了作为世界模拟器的视频生成模型Sora。 OpenAI对Sora介绍如下&#xff1a; We explore large-scale training of generative models on video dat…

C# Winfrom实现的肺炎全国疫情实时信息图

运行结果&#xff1a; using System; using System.Drawing; using System.Text; using NSoup; using NSoup.Nodes; using System.IO; using System.Net; using System.Text.RegularExpressions; using System.Windows.Forms;namespace Pneumonia {public partial class MainFo…

docker (七)-部署容器

实战开始&#xff1a; 1 docker 部署 kafka 集群&#xff0c;并验证 参考 Docker搭建Kafka集群 优秀文档 2 docker 部署 mysql 参考上一篇docker(六) 3.docker 部署 zabbix 参考 docker部署zabbix 优秀文档 BUG&#xff1a;根据这篇文章部署后&#xff0c;发现zabbix-s…

vue封装el-table表格组件

先上效果图&#xff1a; 本文包含了具名插槽、作用域插槽、jsx语法三种&#xff1a; Render.vue&#xff08;很重要&#xff0c;必须有&#xff09;: <script> export default {name: "FreeRender",functional: true,props: {scope:Object,render: Functio…