dubbo常见面试题整理(dubbo原理面试题)

1.dubbo:rpc底层调用原理和过程、负载均衡规则、如何进行版本控制dubbo核心组件Remoting: 网络通信框架,实现了sync-over-async和request-response消息机制.RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能Registry: 服务目录框架用于服务的注册和服务事件发布和订阅 dubbo1)远程通…

大家好,又见面了,我是你们的朋友全栈君。

1. dubbo:

rpc底层调用原理和过程、负载均衡规则、如何进行版本控制

dubbo

核心组件

Remoting: 网络通信框架,实现了 sync-over-async 和request-response 消息机制.

RPC: 一个远程过程调用的抽象,支持负载均衡容灾集群功能

Registry: 服务目录框架用于服务的注册和服务事件发布和订阅

 

dubbo

1) 远程通讯协议基本原理

a) 网络通信:将二进制流从一台计算机传输到另外一台计算机,基于传输协议和网络IO来实现

b) 传输协议有 http 、 tcp 、 udp, 都是在基于 Socket 概念扩展而来

c) 网络IO,主要有 bio 、 nio 、 aio, 所有的分布式应用通讯都基于这个原理而实现

2) 狭义RPC过程

a) 假设两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据

b) 首先A和B建立TCP链接,并且确定好RPC框架的网路端口,能够进行网络通信

c) 然后A服务器将需要调用B服务器的方法和参数进行序列化(Serialize)

d) 通过第一步建立的链接,将序列化后的二进制流发送给B

e) B服务器收到请求后,需要对参数进行反序列化,恢复为内存中的表达方式

f) 然后B服务器找到对应的方法(寻址的一部分)进行本地调用,然后得到返回值

g) B服务器对返回值再次进行序列化,并且通过相同的途径发送给A

h) A对B服务器返回的信息再进行反序列化,得到返回结果

i) 三个关键点

Call ID映射: 要调用的方法名, 必须是唯一的

序列化和反序列化: 二进制流

网络传输: 通过rpc协议

3) 分布式RPC过程

a) 传输协议: thrift,hession等

b) client代理,服务引用方调用方法通过代理发送远程调用

c) 协议编解码压缩,如序列化和反序列化 netty

d) 注册中心,服务注册和服务发现,存放服务信息 zookeeper

e) 负载均衡,服务容错策略其他:服务降级,服务隔离,服务治理

4) dubbo是一个分布式RPC框架

a) 包含四个角色服务提供者(provider),消费者(consumer),服务注册配置中心(registry),监控(monitor) 

b) 服务注册中心包含configServer+zookeeper,也支持redis

c) 服务提供者provider

启动时主动与ConfigServer建立Scoket长连接

同时将自己的IP,提供的服务名称,端口等信息直接发送给ConfigServer

configserver将provider提供的服务信息发送到zookeeper

zookeeper通过watcher机制推送提供者信息给消费者(此时可能没有服务消费者)

d) 服务消费者consumer

启动时主动与ConfigServer建立Socket长连接

同时将自己的IP等相应信息发送给ConfigServer

configserver将consumer提供的信息发送到zookeeper

zookeeper信息(Znode本身的增加,删除,修改,以及子Znode的变化)发生变更后通过watcher机制通知consumer, 也即推送服务提供者的信息 

拿到服务提供者信息后,与它们都建立连接,后面就可以直接调用服务

当有多个服务提供者的时候,Client根据一定的规则来进行负载均衡,如轮询,随机,按权重等

消费者自己宕机了, 没法自己通知configserver和zookeeper, 只能通过心跳机制

e) 服务注册配置中心: configServer+zookeeper

configserver跟所有服务提供者和消费者作心跳检测

当某个Server不可用,就触发修改zookeeper中服务提供者的请求

zookeeper信息发生变更后,通过watcher机制通知消费者,即推送最新的服务提供者信息

消费者重新连接服务提供者

5) 一次服务调用过程

a) 采用异步线程调用的方式执行rpc

b) consumer发起一个远程调用时,首先创建一个callback类型的线程对象

c) 生成一个唯一id(比如uuid)作为key

d) 方法调用信息(如调用的接口名称,参数)和处理返回结果的callback对象全部封装成一个object作为value

e) put到全局concurrenthashmap中

f) 服务端接收到请求并处理完成后,将结果发送给客户端,客户端专门监听消息的线程收到结果,取得唯一id,从全局concurrenthashmap中得到callback对象

g) 监听线程获取到callback对象的锁,然后notifyall()唤醒其它处于等待状态的线程,整个过程结束

h) dubbo默认使用mina+hession来进行rpc

mina处理网络传输:基于tcp的nio异步传输

序列化使用hession二进制序列化

 

dobbo的通讯协议

 

1.dobbo缺省协议 采用单一长链接和NIO异步通讯,特点:

链接个数:单连接,连接方式:长连接,传输协议:TCP,传输方式:NIO异步,序列化:hession二进制序列化,适用场景:常规远程调用方法。

2.RMI协议 RMI采用JDK标准的java.rmi.*实现,采用阻塞式短连接和jdk序列化方式。

连接个数:多连接,连接方式:短连接,传输协议:tcp,传输方式:同步传输,序列化:java标准的二进制序列化。适用场景:常规远程服务方法调用,与原生RMI服务互操作

3.hession协议 Hessian 1 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。

连接个数:多连接 ,连接方式:短连接 传输协议:HTTP ,传输方式:同步传输,序列化:Hessian二进制序列化,适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。,适用场景:页面传输,文件传输,或与原生hessian服务互操作

4、Http

基于 HTTP 表单的远程调用协议,采用 Spring 的 HttpInvoker 实现

连接个数:多连接,连接方式:短连接,传输协议:HTTP,传输方式:同步传输,序列化:表单序列化,适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。适用场景:需同时给应用程序和浏览器 JS 使用的服务

 

5.webservice 基于 WebService 的远程调用协议

连接个数:多连接,连接方式:短连接,传输协议:HTTP,传输方式:同步传输。序列化:SOAP 文本序列化。适用场景:系统集成,跨语言调用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127977.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue+mongodb_mongodb开启auth认证

    vue+mongodb_mongodb开启auth认证刚刚安装完mongodb并且让这个mongodb安装成系统服务,然后给启动啦,以为自己这就可以像MySQL那样;安装好之后,配合可视化工具NavicatforMySQL简单的就跑起来了,但是呢,并不是这个样子。出bug啦,我暂且记录一下,正在找解决之法。UnabletofetchCollectionstatsInvalidcredentialsfordataba

    2022年8月21日
    4
  • [UML] 类图介绍 —— 程序员(灵魂画手)必备画图技能之一

    [UML] 类图介绍 —— 程序员(灵魂画手)必备画图技能之一统一建模语言(UnifiedModelingLanguage,UML)可分类成:功能模型:从用户的角度展示系统的功能,包括用例图。对象模型:采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类别图、对象图。动态模型:展现系统的内部行为。包括序列图,活动图,状态图。类图说到类图,它包含的东西确实有点多,你去网上看总能看到,同样都是类图,但是好像各有各家的章法,总让人摸不着头脑。要么少个箭头要么实线变成虚线了… 那这个类图到底有没有标准呢?别慌,有的,《大话设.

    2022年7月12日
    21
  • Binary Exponential Backoff

    Binary Exponential Backoff一、CSMA/CD过程      CSMA/CD就像在没有主持人的座谈会中,所有的参加者都通过一个共同的媒介(空气)来相互交谈。每个参加者在讲话前,都礼貌地等待别人把话讲完。如果两个客人同时开始讲话,那么他们都停下来,分别随机等待一段时间再开始讲话。这时,如果两个参加者等待的时间不同,冲突就不会出现。如果传输失败超过一次,将采用退避指数增长时间的方法(退避的时间通过截断二进制

    2022年6月15日
    22
  • 2018手机号码正则表达式

    2018手机号码正则表达式最近发现各大手机运营商又增加了新的号码段,在项目中的判断手机号码的正则表达不能用了,自己搜集了一下,新写了一个正则表达式,希望有帮助。 匹配手机号码的正则表达式: ^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$ /***判断是否是手机号**@pa…

    2022年6月3日
    36
  • JMH是什么?

    JMH是什么?一、JMH是什么?JMH是Java性能测试工具,主要是对工程中一些方法进行一些基准测试,支持的时间单位为:nano/micro/milli/macro二、JMH使用案例-代码:1P

    2022年7月4日
    22
  • 单片机:STC89C52的最小单元「建议收藏」

    单片机:STC89C52的最小单元「建议收藏」STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。中文名STC89C52本    质一种低耗高

    2022年8月30日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号