说说 Dubbo 工作原理?Dubbo 容错策略?Zookeeper 和 Dubbo 的关系?Dubbo 动态代理策略有哪些?Dubbo 负载均衡策略?

说说 Dubbo 工作原理?
工作原理分 10 层:
第一层: service 层,接口层,给服务提供者和消费者来实现的(留给开发人员来实现);
第二层: config 层,配置层,主要是对 Dubbo 进行各种配置的, Dubbo 相关配置;
第三层: proxy 层,服务代理层,透明生成客户端的 stub 和服务单的 skeleton ,调用的是接
口,实现类没有,所以得生成代理,代理之间再进行网络通讯、负责均衡等;
第四层: registry 层,服务注册层,负责服务的注册与发现; 第五层: cluster 层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一
个服务;
第六层: monitor 层,监控层,对 rpc 接口的调用次数和调用时间进行监控;
第七层: protocol 层,远程调用层,封装 rpc 调用;
第八层: exchange 层,信息交换层,封装请求响应模式,同步转异步;
第九层: transport 层,网络传输层,抽象 mina netty 为统一接口;
第十层: serialize 层,数据序列化层。
这是个很坑爹的面试题,但是很多面试官又喜欢问,你真的要背么?你能背那还是不错的,我建议
不要背,你就想想 Dubbo 服务调用过程中应该会涉及到哪些技术,把这些技术串起来就 OK 了。
面试扩散
如果让你设计一个 RPC 框架,你会怎么做?其实你就把上面这个工作原理中涉及的到技术点总结一 下就行了。
Dubbo 容错策略?
failover cluster 模式
provider 宕机重试以后,请求会分到其他的 provider 上,默认两次,可以手动设置重试次数,建
议把写操作重试次数设置成 0
failback 模式
失败自动恢复会在调用失败后,返回一个空结果给服务消费者。并通过定时任务对失败的调用进行
重试,适合执行消息通知等操作。
failfast cluster 模式
快速失败只会进行一次调用,失败后立即抛出异常。适用于幂等操作、写操作,类似于 failover
cluster 模式中重试次数设置为 0 的情况。
failsafe cluster 模式
失败安全是指,当调用过程中出现异常时,仅会打印异常,而不会抛出异常。适用于写入审计日志
等操作。
forking cluster 模式
并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多
服务资源。可通过 forks="2" 来设置最大并行数。
broadcacst cluster 模式
广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志
等本地资源信息。
Zookeeper Dubbo 的关系?
Zookeeper 的作用
zookeeper 用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简
单来说就是 ip 地址和服务名称的对应关系。当然也可以通过硬编码的方式把这种对应关系在调用方
业务代码中实现,但是如果提供服务的机器挂掉调用者无法知晓,如果不更改代码会继续请求挂掉
的机器提供服务。 zookeeper 通过心跳机制可以检测挂掉的机器并将挂掉机器的 ip 和服务对应关系
从列表中删除。至于支持高并发,简单来说就是横向扩展,在不更改代码的情况通过添加机器来提
高运算能力。通过添加新的机器向 zookeeper 注册服务,服务的提供者多了能服务的客户就多了。 dubbo
是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度, dubbo
提供一个框架解决这个问题。 注意这里的 dubbo 只是一个框架,至于你架子上放什么是完全取决于
你的,就像一个汽车骨架,你需要配你的轮子引擎。这个框架中要完成调度必须要有一个分布式的
注册中心,储存所有服务的元数据,你可以用 zk ,也可以用别的,只是大家都用 zk
zookeeper dubbo 的关系
Dubbo 的将注册中心进行抽象,它可以外接不同的存储媒介给注册中心提供服务,有
ZooKeeper Memcached Redis 等。
引入了 ZooKeeper 作为存储媒介,也就把 ZooKeeper 的特性引进来。首先是负载均衡,单注册中
心的承载能力是有限的,在流量达到一定程度的时 候就需要分流,负载均衡就是为了分流而存在
的,一个 ZooKeeper 群配合相应的 Web 应用就可以很容易达到负载均衡;资源同步,单单有负载
均衡还不 够,节点之间的数据和资源需要同步, ZooKeeper 集群就天然具备有这样的功能;命名
服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动 的时候,向 ZooKeeper 上的
指定节点 /dubbo/${serviceName}/providers 目录下写入自己的 URL 地址,这个操作就完成了服
务的发布。 其他特性还有 Mast 选举,分布式锁等。
Dubbo 动态代理策略有哪些?
默认使用 javassist 动态字节码生成,创建代理类,但是可以通过 SPI 扩展机制配置自己的动态代理
策略。
Dubbo 负载均衡策略?
随机(默认):随机来
轮训:一个一个来
活跃度:机器活跃度来负载
一致性 hash :落到同一台机器上

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

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

相关文章

Oracle的TimesStamp和Date的区别

在Oracle数据库中,DATE和TIMESTAMP数据类型都是用于存储日期和时间信息,但它们之间有几个重要的区别: 精度不同: DATE数据类型能存储日期和时间到秒的精度,格式通常是YYYY-MM-DD HH24:MI:SS,并且它总是包含…

软件测试工程师经典面试题

软件测试工程师,和开发工程师相比起来,虽然前期可能不会太深,但是涉及的面还是比较广的。前期面试实习生或者一年左右的岗位,问的也主要是一些基础性的问题比较多。涉及的知识主要有MySQL数据库的使用、Linux操作系统的使用、软件…

缓存驱动联邦学习架构赋能个性化边缘智能 | TMC 2024

缓存驱动联邦学习架构赋能个性化边缘智能 | TMC 2024 伴随着移动设备的普及与终端数据的爆炸式增长,边缘智能(Edge Intelligence, EI)逐渐成为研究领域的前沿。在这一浪潮中,联邦学习(Federated Learning, FL&#xf…

golang 如何防止内存逃逸

在Go语言中,内存逃逸是指在函数中分配的变量在函数结束后仍然被引用,从而导致变量的生命周期延长,被分配在堆上而不是栈上。防止内存逃逸有助于提高程序的性能,因为栈上分配的内存可以更快地被回收。 以下是一些防止内存逃逸的方…

leetcode hot100零钱兑换Ⅱ

本题可以看出也是背包问题,但区别于之前的01背包问题,这个是完全背包问题的变形形式。 下面介绍01背包和完全背包的区别与联系: 01背包是背包中的物品只能用一次,不可以重复使用,而完全背包则是可以重复使用。01/完全…

为BUG编程:char的默认类型导致的BUG

char的默认类型大部分是signed&#xff0c;教科书上也这么讲&#xff0c;所以一般遇不到什么问题&#xff0c;但是在arm上出问题了&#xff0c;默认char是unsigned&#xff0c;导致c<0永远失败。 代码是这样的&#xff1a; //计算输出长度size_t outputlen(string const &am…

一个基于C#开发的、开源的特殊字符输入法

emoji表情在社交网络非常流行&#xff0c;我们在手机也非常方便输入&#xff0c;但是在PC电脑我们一般需要到归集好的网页拷贝&#xff0c;所以今天推荐一个Windows小工具&#xff0c;让你方便输入特殊字符和emoji表情。 01 项目简介 这是一个基于C#开发的开源项目&#xff0…

JCL中的位置参数

JCL中DD语句的位置参数 ​ DD语句的格式&#xff1a; ​ //DD名 DD 位置参数 ​ DD名&#xff0c;是DD语句定义的名字&#xff0c;由1-8个字符组成&#xff0c;一个STEP里面可以有多个DD语句&#xff0c;每个DD语句指向一个系统中的数据资源&#xff0c;这就是为了操纵数据文…

ansible及其模块

一、ansible是什么&#xff1f; Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。 Ansible能批量配置、部…

手动实现new操作符

<script>//前置知识// 每一个函数在创建之初就会有一个prototype属性&#xff0c;这个属性指向函数的原型对象// function abc(){// }// abc.prototype--> {constructor: f}// 在JS中任意的对象都有内置的属性叫做[[prototype]]这是一个私有属性&#xff0c;这个私有属…

如何用GPT进行论文写作?

一&#xff1a;AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智谱AI-GLM-4 二&#xff1a;GPT最新技术 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#x…

安宝特AR汽车行业解决方案系列1-远程培训

在汽车行业中&#xff0c;AR技术的应用正悄然改变着整个产业链的运作方式&#xff0c;应用涵盖培训、汽修、汽车售后、PDI交付、质检以及汽车装配等&#xff0c;AR技术为多个环节都带来了前所未有的便利与效率提升。 安宝特AR将以系列推文的形式为读者逐一介绍在汽车行业中安宝…

Navicat 连接MySQL 8.0.11 出现2059错误 解决

原因 mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password 解决 mysql -uroot -ppassword #登录use mysql; #选择数据库# 远程连接请将localhost换成% ALTER USER rootlocalhost IDENTIFIED BY password PASSWORD EXPIRE N…

使用 npm/yarn 等命令的时候会,为什么会发生 Error: certificate has expired

缘起 昨天&#xff0c;我写了一篇文章&#xff0c;介绍如何使用项目模板&#xff0c;构建一个 Electron 项目的脚手架&#xff0c;我发现我自己在本地无法运行成功&#xff0c;出现了错误。 ✖ Failed to install modules: ["electron-forge/plugin-vite^7.2.0",&qu…

多维时序 | Matlab实现BiLSTM-MATT双向长短期记忆神经网络融合多头注意力多变量时间序列预测模型

多维时序 | Matlab实现BiLSTM-MATT双向长短期记忆神经网络融合多头注意力多变量时间序列预测模型 目录 多维时序 | Matlab实现BiLSTM-MATT双向长短期记忆神经网络融合多头注意力多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.多维时序 | Matlab…

第六十四天 服务攻防-框架安全CVE复现Apache shiroApache Solr

第六十四天 服务攻防-框架安全&CVE复现Apache shiro&Apache Solr 知识点: 中间件及框架列表: IIS,Apache,Nginx,Tomcat,Docker,K8s,Weblogic.JBoos,WebSphere, Jenkins,GlassFish,Jetty,Jira,Struts2,Laravel,Solr,Shiro,Thinkphp,Spring, Flask,jQuery等 1、开发框…

【DDD】学习笔记-薪资管理系统的场景驱动设计

场景驱动设计的起点是领域场景&#xff0c;它不一定需要与事件风暴结合&#xff0c;只要识别并确定了领域场景&#xff0c;就可以进行任务分解。每个分解出来的子任务都可以视为是职责。分配职责时&#xff0c;场景驱动设计规定了履行职责的角色构造型&#xff0c;其中&#xf…

粉笔规范词积累(脱贫攻坚)

扶志 基本释义 对贫困群众的思想引领和文化教育&#xff0c;激发他们脱贫致富的勇气和信心。 应用场景 当资料中出现“扶贫要先扶思想、扶观念、扶信心”等类似表述时&#xff0c;通常我们可将其概括为“扶志”。 脱贫内在动力 基本释义 贫困地区干部或群众积极主动地开…

嵌入式学习 Day 22

一. 时间获取: 1.time time_t time(time_t *tloc); 功能: 返回1970-1-1到现在的秒数&#xff08;格林威治时间&#xff09; 参数: tloc:存放秒数空间首地址 返回值: 成功返回秒数 失败返回-1 注意&#xff1a;两种方式都可…

266.【华为OD机试真题】抢7游戏(深度优先搜索DFS-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-抢7游戏二.解题思路三.题解代码Python题解代码…