Dubbo常考知识点

Dubbo常考知识点

    • Dubbo⽀持哪些负载均衡策略
    • Dubbo是如何完成服务导出的?
    • Dubbo是如何完成服务引⼊的?
    • Dubbo的架构设计是怎样的?

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 实际上不算⼀层,⽽是⼀个独⽴的节点,只是为了全局概览,⽤层的⽅式画在⼀起。

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

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

相关文章

C语言关于自定义字符函数和字符串函数的相关笔试题(找工作必看)

本篇字符函数和字符串函数 求字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 字符串查找 strstr strtok 错误信息报告 strerror 内存操作函数 memcpy memmove memset memcmp 在我们笔试时,很…

mysql限制用户登录失败次数,限制时间

mysql用户登录限制设置 mysql 需要进行用户登录次数限制,当使用密码登录超过 3 次认证链接失败之后,登录锁住一段时间,禁止登录这里使用的 mysql: 8.1.0 这种方式不用重启数据库. 配置: 首先进入到 mysql 命令行:然后需要安装两个插件: 在 mysql 命令行中执行: mysql> INS…

易基因|ONT:三代原核甲基化在痤疮杆菌噬菌体表观遗传印迹中的工程选择性研究

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 痤疮表皮杆菌(Cutibacterium acnes,C.acnes)是一种革兰氏阳性细菌,是人类皮肤微生物组成员。尽管是最丰富的皮肤共生体,但某些…

linux开机自动启动java的jar包项目及开机自动启动Nacos的配置

linux开机自动启动java的jar包项目及开机自动启动Nacos [开机自动启动Nacos的配置 ](https://blog.csdn.net/weixin_42225792/article/details/129805877)[开机自动启动jar包项目的配置 ](https://blog.csdn.net/qq_42320934/article/details/131698450) 开机自动启动Nacos的配…

详细介绍下VLAN隔离与VLAN之间互联

什么VLAN? VLAN代表虚拟局域网(Virtual Local Area Network),它是一种在物理网络基础上创建逻辑上独立的虚拟网络的技术。VLAN允许将一个局域网划分为多个虚拟的逻辑网络,这些虚拟网络在逻辑上相互隔离,就…

支付宝开发问题:很抱歉,系统监测到你的支付宝账号有异常,入驻失败,如需帮助请拨打热线

想开发个支付宝小程序,结果困难重重啊 妹的,这一个星期一直都被这个问题困扰,找了一个个体户资质,一直失败,专门去注册了一个公司,还是提交失败。 给支付宝客服打电话,跟没打一样,…

外包干了2个月,技术退步明显.......

先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

4. 寻找两个正序数组的中位数

4. 寻找两个正序数组的中位数 有序数组,二分/分治。 class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int m nums1.length;int n nums2.length;int left (m n 1) / 2;int right (m n 2) / 2;// 将偶数和奇数的情况合并…

Windows系统如何部署Wing FTP Server与公网远程访问【内网穿透】

Wing FTP Server安装配置结合内网穿透实现公网访问本地站点 文章目录 Wing FTP Server安装配置结合内网穿透实现公网访问本地站点前言1.Wing FTP Server下载安装2.Wing FTP Server配置部署3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3…

使用 sklearn 进行数学建模的通用模板

前言 无论是本科和研究生都会有的数学建模含金量还是很高的,下面将介绍一下进行数学建模的一些基本操作方法,这里主要是利用sklearn 进行建模,包括前期的一些数据预处理以及一些常用的机器学习模型以及一些简单粗暴的通用建模步骤&#xff0…

在 Simscape Electrical 中对两区 MVDC 电动船的建模和仿真(Simulink实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

leetcode top100(6) 三数之和(双指针)

/*** 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请* <p>* 你返回所有和为 0 且不重复的三元组。* <p>* 注意&#xff1a;答案中不可…

springboot集成mybatis-plus

一、在spring boot中配置mybatis-plus 1、创建一个spring boot项目&#xff0c;注意勾选mysql 2、在pom.xml文件中添加mybatis-plus的依赖包 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0&qu…

西门子 S7 协议解析

目录 1 建立连接 2 读数据 3 写数据 1 建立连接 03 00 00 16 11 E0 00 00 00 01 00 C1 02 10 00 C2 02 03 01 C0 01 0A &#xff08;第一次握手报文&#xff09; 03 00 报文头 00 16 数据总长度&#xff1a;22 11 E0 00 00 00 01 00 C1 02 10 00 C2 02 03 01 C0 01 0A 报文结束…

Llama-2 推理和微调的硬件要求总结:RTX 3080 就可以微调最小模型

大语言模型微调是指对已经预训练的大型语言模型&#xff08;例如Llama-2&#xff0c;Falcon等&#xff09;进行额外的训练&#xff0c;以使其适应特定任务或领域的需求。微调通常需要大量的计算资源&#xff0c;但是通过量化和Lora等方法&#xff0c;我们也可以在消费级的GPU上…

Android面试题汇总(一)

JAVA基础&#xff1a; 1、抽象类和接口区别 关键词定义&#xff1a;抽象类abstract class&#xff0c;接口interface 成员修饰符&#xff1a;抽象类可以是任意类型&#xff0c;接口只能是默认public static final 方法修饰符&#xff1a;抽象类任意类型&#xff0c;接口默认是…

区块链技术:解密去中心化的革命

文章目录 区块链的基础概念什么是区块链&#xff1f;区块链的核心原理1. 分布式账本2. 区块3. 加密技术4. 共识机制 区块链的工作原理区块链的交易过程区块链的安全性共识机制的作用 区块链的应用领域1. 金融服务2. 供应链管理3. 物联网4. 医疗保健5. 政府与公共服务 区块链的未…

Fair下发产物-布局DSL生成原理

一、概述 大家都知道,Flutter在release环境是以AOT模式运行的,这就决定了我们要做动态化的话无法简单的通过动态下发dart代码执行的。根据Fair团队的前期调研,我们对布局动态化和逻辑动态化的实现采用了两套不同的实现方案,对于布局部分,我们在解析dart源文件之后生成DSL…

蓝桥杯 题库 简单 每日十题 day2

01 卡片 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝有很多数字卡片&#xff0c;每张卡片上都是数字 0 到 9。 小蓝准备用这些卡片来拼一些数&#xff0c;他想从 1 开始拼出正整数&#xff0c;每拼一个&a…

《如何避免在算法备案中的常见失误?》

在数字时代&#xff0c;算法逐渐渗透到了我们生活的各个方面。为确保算法的透明性、公平性和安全性&#xff0c;许多国家和地区都已经或正在考虑实施算法备案制度。然而&#xff0c;在备案过程中&#xff0c;很多企业和研究者会遇到各种问题&#xff0c;一些常见的失误甚至可能…