Dubbo面试回答简单版

一、dubbo特性

  1. 超时重试机制
  2. 地址缓存
  3. 多版本
  4. 负载均衡:随机、权重轮询、最少活跃调用、一致性哈希
  5. 集群容错:失败重试、快速失败、失败安全、失败自动恢复、并行调用、广播
  6. 服务降级:异常时返回mock

集群容错

FailOver 失败重试,读操作
FailFast 快速失败,只调用一次,失败后立即抛出异常。 写操作
FailSafe 失败安全 出现异常 直接忽略,记录日志不抛出异常,返回空结果
failBack 失败自动恢复,失败后记录日志和调用信息,返回空结果,每隔5秒重试
forking 并行调用,有一个结果返回就返回成功
广播,逐个调用,其中有一个失败,抛出异常

二、服务暴露

简单的很:IOC实例化bean后,事件启动后-》根据配置获取url-》根据URL获取实现类->动态封装实现类->暴露出invoker-》封装成exporter等待消费者调用-》注册信息到注册中心

首先,服务器端(服务提供者)在框架启动时,会初始化服务实例,通过Proxy组件调 用具体协议(Protocol ),把服务端要暴露的接口封装成Invoker (真实类型是 AbstractProxylnvoker ,然后转换成Exporter,这个时候框架会打开服务端口等并记录服务实例 到内存中,最后通过Registry把服务元数据注册到注册中心。这就是服务端(服务提供者)整 个接口暴露的过程。

Proxy组件:我们知道,Dubbo中只需要引用一个接口就可以调用远程的服务,并且
只需要像调用本地方法一样调用即可。其实是Dubbo框架为我们生成了代理类,调用
的方法其实是Proxy组件生成的代理方法,会自动发起远程/本地调用,并返回结果,
整个过程对用户完全透明。
• Protocol:顾名思义,协议就是对数据格式的一种约定。它可以把我们对接口的配置,
根据不同的协议转换成不同的Invoker对象。例如:用DubboProtocol可以把XML文
件中一个远程接口的配置转换成一个Dubbolnvoker。
• Exporter:用于暴露到注册中心的对象,它的内部属性持有了 Invoker对象,我们可以
认为它在Invoker上包了 一层。
• Registry:把Exporter注册到注册中心。

服务调用

调用之前生成的代理类,从cluster中经过负载均衡等选择一个invoker进行调用,会记录请求和请求id,服务端根据参数选择exporter,调用真正的实现类,得到结果后,根据请求id将结果放到等待的线程中,消费者最后得到响应。

服务引入

ReferenceBean实现了FactoryBean接口,当对任意服务Interface进行自动注入或者getBean获取时,就会触发getObject()函数的服务引用过程。-》获取注册中心实例-》向注册中心注册自己,并订阅provoder configurator router 节点-》触发invoker的生产:cluster将多个服务调用者进行封装返回i一个invoker-》通过配置map构建url,再根据url上的协议调用其refer获得invoker-》构建代理,封装invoker返回代理类给consumer调用

分层

在这里插入图片描述
在这里插入图片描述

工作流程

在这里插入图片描述
节点角色说明:
Provider:暴露服务的服务提供方。
Consumer::调用远程服务的服务消费方。
Registry:服务注册与发现的注册中心。
Monitor:统计服务的调用次调和调用时间的监控中心。
Container:服务运行容器。
调用关系说明:
0.服务容器负责启动,加载,运行服务提供者。
1.服务提供者在启动时,向注册中心注册自己提供的服务。
2.服务消费者在启动时,向注册中心订阅自己所需的服务。
3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送次统计数据到监控中心。

配置中心的订阅/发布

订阅通常有pull和push两种方式,一种是客户端定时轮询注册中心拉取配置,另一种是注册中心主动推送数据给客户端。这两种方式各有利弊,Dubbo采用的是第一次启动拉取方
式,后续接收事件重新拉取数据。

在服务暴露时,服务端会订阅configurators用于监听动态配置,在消费端启动时,消费端会订阅providers、routers和configuratops这三个目录,分别对应服务提供者、路由和动
态配置变更通知

ZooKeeper注册中心采用的是“事件通知” + “客户端拉取”的方式,客户端在第一次连接上注册中心时,会获取对应目录下全量的数据。并在订阅的节点上注册一个watcher,客户端与
注册中心之间保持TCP长连接,后续每个节点有任何数据变化的时候,注册中心会根据watcher的回调主动通知客户端(事件通知),客户端接到通知后,会把对应节点下的全量数据都拉取过

来(客户端拉取),这一点在NotifyListener#notify List urls 接口上就有约束的注释说明。全量拉取有一个局限,当微服务节点较多时会对网络造成很大的压力。

zk集群挂掉,provider和consumer还能通信吗

可以,因为当启动dubbo容器时,消费者会去zookeeper拉取注册的生产者地址列表,并将其缓存在本地。每次发起调用时,都会按照本地的地址列表,以负载均衡的策略去进行调用。但是zookeeper挂掉则后续新的生产者无法被消费
者发现。
1、注册中心对等集群,任意一台宕掉后,会自动切换到另一台
2、注册中心全部宕掉,服务提供者和消费者仍可以通过本地缓存通讯
3、服务提供者无状态,任一台宕机后,不影响使用
4、服务提供者全部宕机,服务消费者会无法使用,并无限次重连等待服务者恢复

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

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

相关文章

Linux——守护进程

在这篇文章中我介绍了关于tcp网络套接字,关于网络套接字编程的问题我会再次讲述一点东西,然后介绍关于守护进程的知识。 1. 关于网络套接字编程的一些问题 在进行套接字编程时我们一定是得先有套接字,并且我们在使用socket的一些接口时&…

阳哥推荐的人力RPO蓝海项目怎么做才会赚钱吗?

近年来,随着互联网的快速发展,人力资源行业也迎来了新的变革。抖音上的阳哥推荐的人力RPO(招聘流程外包)蓝海项目,因其高效、便捷的特点受到了广泛关注。那么,这个项目究竟怎么做才能赚钱呢? 首先,我们需要了解人力RP…

aws云靶场和一些杂记

aws靶场 在AWS靶场中,存在三个安全问题:1) 一个S3存储桶政策配置错误,允许公共访问,通过访问特定域名可获取flag。2) SQS消息队列的政策没有限制角色,允许发送和接收消息,通过aws sqs命令行工具的receive-…

超光速传输:有源DWDM的无限可能✊

🗺🗺随着5G时代的到来,支持更高数据速率、较低延迟和更大传输容量的网络设施大量铺设,满足了人们对高质量通信的现有要求。然而,传统光网络中通常每个业务通过多根光纤进行传输,大大降低了传输效率。为了解…

cesium JulianDate和北京时间转换

关于cesium中时间可参考: cesium Clock JulianDate 日照分析 修改当前时间为北京时间-CSDN博客 有几个概念需要了解一下。 1、GMT、UTC GMT是前世界标准时,UTC是现世界标准时,UTC 比 GMT更精准,不需要精确到秒的情况下&#xf…

太阳能智能语音卡口:环保与智能的完美结合/恒峰智慧科技

随着科技的飞速发展,我们的生活正在经历前所未有的变革。在这场变革中,太阳能智能语音卡口以其独特的魅力,成为环保与智能的完美结合,为我们的生活带来了更多的便捷和环保。 太阳能智能语音卡口,顾名思义,是…

【每日刷题】技巧合集-LC136、LC169

1. LC136.只出现一次的数字 题目链接 解法一: 先给数字排序,如果num[i]与nums[i-1]或nums[i1]都不一致,则返回nums[i]。 class Solution {public int singleNumber(int[] nums) {if (nums.length 1){return nums[0];}Arrays.sort(nums);fo…

基于LabVIEW的CAN通信系统开发案例

基于LabVIEW的CAN通信系统开发案例 介绍了基于LabVIEW开发的CAN通信系统,该系统主要用于汽车行业的数据监控与分析。通过对CAN通信协议的有效应用,实现了车辆控制系统的高效信息交换与实时数据处理,从而提升了车辆性能的检测与优化能力。 项…

Nginx内存池相关源码剖析(一)总览

剖析nginx的内存池源码,讲解原理实现以及该内存池设计的应用场景 介绍 Nginx内存池是Nginx为了优化内存管理而引入的一种机制。在Nginx中,每个层级(如模板、TCP连接、HTTP请求等)都会创建一个内存池进行内存管理。当这些层级的…

手动实现简易版RPC(下)

手动实现简易版RPC(下) 前言 什么是RPC?它的原理是什么?它有什么特点?如果让你实现一个RPC框架,你会如何是实现?带着这些问题,开始今天的学习。 接上一篇博客 手动实现简易版RPC(上&#xff…

【YOLOv9】完胜V8的SOTA模型Yolov9(论文阅读笔记)

官方论文地址: 论文地址点击即可跳转 官方代码地址: GitCode - 开发者的代码家园 官方代码地址点击即可跳转 1 总述 当输入数据经过各层的特征提取和变换的时候,都会丢失一定的信息。针对这一问题: 论文中提出的可编程梯度信息…

MATLAB实现遗传算法优化BP神经网络预测数值(GABP)

遗传算法(Genetic Algorithm, GA)和反向传播(Back Propagation, BP)神经网络是两种强大的算法,分别用于优化和机器学习。将遗传算法与BP神经网络结合,可以利用遗传算法的全局搜索能力来优化BP神经网络的初始…

Socket 通信机制详解

Socket 是网络编程中一种重要的通信机制,它允许不同的计算机通过网络进行数据交换。 一、 Socket 的概念 Socket(套接字)是计算机网络编程中的一种抽象,它提供了在网络上进行通信的接口。 Socket 本质上是一种通信的端点&#…

C++ ─── 类和对象(上)

目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 3.1 类的成员函数两种定义方式: 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5.类的作用域 6.类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 结构体内存对齐规则 8.this指针 …

CSS display属性

目录 概述: 设置display示例: none: block: inline: inline-block : 概述: 在CSS中我们可以使用display属性来控制元素的布局,我们可以通过display来设置元素的类型。 在不设置…

IO-序列化流

简介 这个流是为了传输对象而生的对象序列化:把java对象写入到文件中对象反序列化:把文件中的对象读出来 继承体系 ObjectInputStream:把文件中的对象读出来ObjectOutputStream:把java对象写入到文件中 常用API 示例 实体类必须实现序列化接口这其实就是…

【Excel2LaTeX】复杂表格制作的解决方案

刚开始用LaTeX写论文,遇到的第一道坎就是绘制表格,较小的普通表格可以通过简单的语法实现,但是较大的复杂的表格却让我无从下手。 Excel2LaTeX插件 这里介绍一种我用到非常顺手的工具:Excel2LaTeX插件,下载地址&#x…

C语言 【函数】

1.函数概述 函数是一种可重用的代码块&#xff0c;用于执行特定任务或完成特定功能 函数作用&#xff1a;对具备相同逻辑的代码进行封装&#xff0c;提高代码的编写效率&#xff0c;实现对代码的重用 2. 函数的使用 2.1 无参无返回值 #include <stdio.h>// 函数名…

AWS Key disabler:AWS IAM用户访问密钥安全保护工具

关于AWS Key disabler AWS Key disabler是一款功能强大的AWS IAM用户访问密钥安全保护工具&#xff0c;该工具可以通过设置一个时间定量来禁用AWS IAM用户访问密钥&#xff0c;以此来降低旧访问密钥所带来的安全风险。 工具运行流程 AWS Key disabler本质上是一个Lambda函数&…

Methoxy PEG Propionic acid具有良好的亲水性和分子量可控性

【试剂详情】 英文名称 mPEG-PA&#xff0c;mPEG-Propionic acid&#xff0c; Methoxy PEG PA&#xff0c; Methoxy PEG Propionic acid 中文名称 聚乙二醇单甲醚丙酸&#xff0c; 甲氧基-聚乙二醇-丙酸 外观性状 由分子量决定&#xff0c;固体或者液体 分子量 400&…