dubbo面试知识总结
简历上写了dubbo几乎每次都被问了dubbo。。。。
dubbo是一个rpc远程调用的框架,用于分布式的远程调用。核心组件为:运行容器、服务提供者、服务发布者、监视器、注册中心。
为什么用dubbo
dubbo为soa架构的分布式项目提供了便利,使表现层调用服务变的非常简单,而且dubbo提供了很多不同的传输协议、不同的负载均衡策略、和调用链监控、完全支持spring这些好处。
dubbo支持不同的协议
dubbo协议
rmi
webservice
http
redis
如何调用不同的协议dubbo使用spi机制加载配置文件实现
dubbo使用zookeeper或redis作为注册中心
dubbo负载均衡策略:
随机(基于权重)、轮询、一致性hash、最少活跃
spi机制:spi就是通过不同的名字去使用不同协议的实现类,这个机制为dubbo可扩展性提供了极大的便利。spi是将实现类的名字写在MET-INF的services文件夹下,然后通过类加载机制去加载不同的类。dubbo的spi与jdk提供的spi是有区别的。dubbo的spi是自实现的一种spi,文件的配置是以key-value形式的,可以更方便的根据名字获取实现类。
RPC
远程过程调用,就是一种通过网络从远程计算机程序上请求服务,而不需要了解网络技术的协议。就是让A服务调用B服务,这两个服务部署在两台不同的机器上,但是A调用B可以像调用本地服务一样调用
服务方调用以本地的方式调用服务
客户端程序找到服务端地址,讲请求信息和服务端地址封装成消息体,并发给服务端
服务端收到这个消息体后先进行解码,然后根据解码结果调用本地服务
服务端将调用的结果进行封装成一个消息体,返回给客户端
客户端收到消息,服务端得到最终结果
为什么要分布式
从开发角度来说把功能分模块开发起来效率高,从并发角度来说,一个服务部署在一个机器上比多个服务部署在一个机器上可以承受的并发更高
dubbo服务导出源码解析(写的比较简单,也就和面试官能这样吹吹,真要学习建议看官网文档)
服务导出的入口方法是ServiceBean.export()。此方法会调用ServiceConfig.export(),进行真正的服务导出
服务导出要做的几件事:
确定服务参数
确定服务支持协议
构造服务最终url
讲服务url注册到注册中心去
根据不同协议启动不同的server,用来接收和处理请求
确定服务的参数
调用ServiceConfig.export()时,ServiceConfig对象就是一个服务,获取这个服务的参数可以从很多地方获取
@Service注解、dubbo.properties、配置中心、系统环境变量
优先级从高到低:系统环境变量大于配置中心大于Service注解大于dubbo配置文件
确定服务支持协议
协议也可能在多个地方进行了配置
application.properties、dubbo.properties、配置中心、-D系统环境变量配置
构造最终url
有了确定的协议、服务名、服务参数就可以构造URL了
将服务URL注册到注册中心去
根据服务URL启动Server
http协议启动tomcat、jetty
dubbo协议启动Netty
dubbo引入源码解析
spring启动的过程中,就会对@Reference注解标注的属性去赋值
对于ReferenceBean,表示应用想要引入的服务信息,在执行get时会做如下几步
先检查和更新参数,把ReferenceBean里的属性更新为优先级最高的参数值
调用init()去生成代理对象ref,get方法返回这个ref
在生成ref之前,会把消费者引入的服务设置参数添加到一个map中,后面会去这个用这个map的参数去注册中心查找服务
实现一个高性能高可靠的RPC框架需要解决哪些问题?
1.应用都基于微服务化,实现资源调用离不开远程调用
2.一个服务可能有多个实例,你在调用时,要如何获取这些实例的地址呢?— 这时候就需要一个服务注册中心,从服务注册中心获取服务的实例列表,再从中选择一个进行调用。
3.选哪个调用好呢?这时候就需要负载均衡了,于是又得考虑如何实现复杂均衡
4.总不能每次调用时都去注册中心查询实例列表吧,这样效率多低呀,于是又有了缓存,有了缓存,就要考虑缓存的更新问题
5.客户端总不能每次调用完都干等着服务端返回数据吧,于是就要支持异步调用;
6.服务端的接口修改了,老的接口还有人在用,怎么办?总不能让他们都改了吧?这就需要版本控制了;
7.服务端总不能每次接到请求都马上启动一个线程去处理吧?于是就需要线程池;
8.服务端关闭时,还没处理完的请求怎么办?是直接结束呢,还是等全部请求处理完再关闭呢?
dubbo面试知识总结相关推荐
- Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架?
Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试题 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试官心理分析 说实话,就这问题,其实就跟问你如何自己设计一个 ...
- *Java软件开发面试知识整理*
Java软件开发面试知识整理 围绕以下几点回答问题:是什么.为什么.什么时候用.项目实现.解决什么问题.遇到的困难 谈谈你对Java和C的理解? Java: 面向对象.Unicode:可以跨平台(JV ...
- 【面试资料】 Java中高级核心面试知识解析
[面试资料] Java中高级核心面试知识解析 一.Java (一). 基础 (二). 容器 (三). 并发 (四). JVM 二.网络 (一). 计算机网络知识 (二). HTTPS中的TLS 三.L ...
- C C++ 面试知识总结,包含STL,数据结构等
五万字长文 C C++ 面试知识总结(上) https://juejin.im/post/5cbd7603e51d456e2446fcaf 五万字长文 C C++ 面试知识总结(中) https:// ...
- 【持续..】WEB前端面试知识梳理 - CSS部分
传送门: WEB前端面试知识梳理 - CSS部分 WEB前端面试知识梳理 - JS部分 最近在看大厂的一些面试题,发现很多问题都是平时没有在意的,很多知识都是知道一点但又很模糊说不出个所以然来,反思自 ...
- Hadoop之Yarn面试知识复习
Hadoop之Yarn面试知识复习 目录 简述hadoop1与hadoop2 的架构异同 为什么会产生 yarn,它解决了什么问题,有什么优势? Hadoop之Yarn工作机制详解 HDFS的数据压缩 ...
- Hadoop之MapReduce面试知识复习
Hadoop之MapReduce面试知识复习 目录 谈谈Hadoop序列化和反序列化及自定义bean对象实现序列化? FileInputFormat切片机制 在一个运行的Hadoop 任务中,什么是I ...
- Hadoop之HDFS面试知识复习
Hadoop之HDFS面试知识复习 目录 HDFS的存储机制 secondary namenode工作机制 NameNode与SecondaryNameNode 的区别与联系? hdfs整体架构介绍 ...
- Dubbo面试 - Dubbo通信协议
Dubbo面试 - Dubbo通信协议 面试题 dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的? 面试官心理分析 上一 ...
最新文章
- 特征工程(七)SelectFromModel
- Git commit message和工作流规范
- Unity3d5.0之后关于游戏音乐的管理
- 三、css 和 js 的装载与执行
- 不用写一行代码,这款 高颜值 可视化神器,值得try一try!
- Linux常用命令大全--有关磁盘空间的命令
- leetcode-665-Non-decreasing Array
- linux cookie 地址,SYN Cookie原理及其在Linux内核中的实现
- 3 计算机组成原理第三章 存储系统 主存简单模型及寻址 半导体寄存器 存储器分类 主存与CPU连接 双口RAM和多模块寄存器
- 【读书笔记】原型模式代码(C++) 第一版
- 物流系统管理课程(九)
- cad2020打印样式放在哪个文件夹_打印机故障:打印一直出现乱码,什么原因?...
- EtherCAT总线运动控制器中简单易用的直线插补
- python自动输入支付密码_python接入支付宝的实例操作
- Java中重载和重写的区别
- 哪些机型适配了android11,coloros11适配机型_coloros11支持机型有哪些
- 毕设题目:Matlab车牌识别
- 求部门最高工资(Mysql多表查询)
- FIR滤波器,低通、高通、带通、带阻VC实现
- Android系统自定义关机充电图标