可能我们在平常工作中都会用到dubbo,但是好多同学只是知道应用但是却不一定知道他的原理,今天来说一说dubbo的原理,首先我们要知道dubbo到底是什么,都能提供些什么服务?

一、dubbo是什么?

dubbo是⼀个分布式服务框架,提供⾼性能和透明化的RPC远程服务调⽤⽅案,以及SOA服务治理方案。说白了其实dubbo就是一个远程调用的分布式框架。

二、dubbo的核心服务是什么?

1.远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

2.集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

3.自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

三、dubbo能做什么?

1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。

2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

采用spring的配置方式进行配置,完全透明化的接入应用,对应用没有任何入侵,只需要spring加载dubbo的配置就可以了。

看一下dubbo架构图

四、服务提供者暴露一个服务的详细过程:

如果你仔细观察dubbo的启动日志你会发现,dubbo的provider启动主要是以下几个过程

1.首先provider启动时,先把想要提供的服务暴露在本地。

2.然后再把服务暴露到远程。

3.启动netty服务,建立长连接。

4.连接到注册中心zk上。

5.然后监控zk上的消费服务。

五、服务消费者消费一个服务的详细过程

首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例。接下来把Invoker转为客户端需要的接口。

六、下面来看本地暴露于远程暴露的区别:

本地暴露是暴露在本机JVM中,调用本地服务不需要网络通信.

远程暴露是将ip,端口等信息暴露给远程客户端,调用远程服务时需要网络通信.

七、什么情况下适用dubbo协议,什么时候适用rmi协议?

Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多种协议,但是dubbo协议是官网推荐使用的,dubbo 缺省协议是dubbo协议,采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。反之,Dubbo 缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。RMI协议采用阻塞式(同步)短连接和 JDK 标准序列化方式。适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。后面会对其他几种协议详细介绍,这里就不赘述了。

八、Dubbo主要的配置项有哪些,作用是什么?

provider配置

<!-- 提供方应用信息,用于计算依赖关系 --><dubbo:application name="hello-world-app"  /><!-- 使用multicast广播注册中心暴露服务地址 --><dubbo:registry address="multicast://224.5.6.7:1234" /><!-- 用dubbo协议在20880端口暴露服务 --><dubbo:protocol name="dubbo" port="20880" /><!-- 声明需要暴露的服务接口 --><dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" /><!-- 和本地bean一样实现服务 -->

<bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" />

consumer配置

 <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --><dubbo:application name="consumer-of-helloworld-app"  /><!-- 使用multicast广播注册中心暴露发现服务地址 --><dubbo:registry address="multicast://224.5.6.7:1234" /><!-- 生成远程服务代理,可以和本地bean一样使用demoService --><dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" />

九、Dubbo有几种容错机制

什么是容错机制?容错机制指的是某中系统控制在一定范围的一种允许或包容犯错情况的发生,举个简单的例子,我们在电脑上运行一个程序,有时候会出现无响应的情况,然后系统回弹出一个提示框让我们选择,是立即结束还是继续等待,然后根据我们的选择执行对应的操作,这就是“容错”。

在分布式架构下,网络,硬件,应用都可以发生故障,由于各个服务之间可能存在依赖关系,如果一条链路中的某一个节点出现故障,将会导致雪崩效应。为了减少某一个节点故障的影响范围,所以我们才需要去构建容错服务,来优雅的处理这种中断的响应结果

1.failsafe 失败安全,可以认为是把错误吞掉(记录日志)

2.failover(默认)  重试其他服务器;retries(2)重试的次数,默认为2次

3.failback   失败后自动恢复

4.forking forks. 设置并行数

5.Broadcast 广播,任意一台报错,则执行的方法报错,通过cluster方式,配置制定的容错方案

十、dubbo的服务降级

降级的目的是为了保证核心服务可用

降级可以有几个层面的分类:自动降级,人工降级;按照功能可以分为:读服务降级和写服务降级;

1.对一些非核心服务进行人工降级,在大促之前通过降级开关关闭那些推荐内容,评价等对主流程序没有影响的功能

2.故障降级,比如调用的远程服务挂了,网络故障,或者RPC服务返回异常。那么可以直接降级,降级的方案比如设置默认值,采用兜底数据(系统推荐的行为广告挂了,可以提前准备静态页面做返回)等等

3.限流降级,在秒杀这种流量比较集中并且流量特别大的情况下,因为突发访问量特别大可能导致系统支撑不了。这个时候可以采用限流来限制访问量。当达到阈值时,后续的请求被降级,比如进入排队页面,比如跳转到错误页面(活动火爆,请稍后重试)

Dubbo的降级方式:Mock

实现步骤

1.在client端创建一个testmock类,实现对应的IGphello的接口(需要对哪个接口进行mock,就实现哪个)名称必须以mock结尾

2.在client端的xml配置文件中,添加如下配置,增加一个mock属性指向创建的testmock

3.模拟错误(设置timeout)模拟超时异常,运行测试代码即可访问到testmock这个类,当服务端故障解除以后,调用过程将恢复正常

十一、dubbo的优先级配置

配置优先级别

1.以timeout为例,显示了配置的查找顺序,其他retries,loadbalance等类似。

(1)方法级优先,接口级次之,全局配置在次之

(2)如果级别一样,则消费方优先,提供方次之

(3)其中,服务提供方配置,通过URL经由注册中心传递给消费方

2.建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设置。

Dubbo的原理,面试常见问题相关推荐

  1. tcp当主动发出syn_一文读懂TCP四次挥手工作原理及面试常见问题汇总

    简述 本文主要介绍TCP四次挥手的工作原理,以及在面试中常见的问题. 字段含义 seq序号:Sequence Number,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行 ...

  2. 分布式系统面试 - 常见问题

    分布式系统面试 - 常见问题 有一些同学,之前呢主要是做传统行业,或者外包项目,一直是在那种小的公司,技术一直都搞的比较简单.他们有共同的一个问题,就是都没怎么搞过分布式系统,现在互联网公司,一般都是 ...

  3. python面试常见问题-Python面试常见问题,涉及Python各个方面

    原标题:Python面试常见问题,涉及Python各个方面 爬虫面试常见问题 一.项目问题: 1.你写爬虫的时候都遇到过什么反爬虫措施,你是怎样解决的 2.用的什么框架.为什么选择这个框架 二.框架问 ...

  4. 【面试】Java面试常见问题汇总(不含答案)、面试指导学习笔记

    面试常见问题角度 String是基本数据类型吗? int和Integer有什么区别? HashMap和HashTable的区别,及其实现原理. ArrayList/HashMap的源码.如何实现源码 ...

  5. 网路学员面试常见问题:

    网路学员面试常见问题: 1.请你修改一下LINUX的视频驱动和声音驱动 答: redhatlinux中用sndconfig来设置声卡,如果没有某个模块,就需要重新编译内核(编译最新发布的linux 内 ...

  6. c++面试常见问题汇总

    c++面试常见问题汇总 1. 指针和引用的区别? 2. 堆栈的区别? 3. new 和 delete 是如何实现的,与 malloc 和 free有什么异同? 4. struct 和 class 的区 ...

  7. 算法岗面试常见问题大集合

    1.参考博客 算法岗面试常见问题大集合 算法工程师手册 2.模型过拟合的解决方法 L1/L2正则化(原理奥卡姆剃刀):L2正则化也叫作权重衰减,目标函数中增加所有权重w参数的平方之和,迫使所有w可能趋 ...

  8. 【基础概念】 Redis简介和面试常见问题

    Redis简介和面试常见问题 简介: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起 ...

  9. html手机端适配怎么调试,html5面试常见问题及答案:移动端布局与适配篇

    原标题:html5面试常见问题及答案:移动端布局与适配篇 1. 移动布局自适应不同屏幕的几种方式 (1)响应式布局 (2)100%布局(弹性布局) (3)等比缩放布局(rem) 2. iscroll安 ...

最新文章

  1. Ardino基础教程 10_光控声音
  2. NET问答: 如何将十六进制的 #FFDFD991 转成 C# 中的 Color 类?
  3. 使用Kubeadm创建k8s集群之部署规划(三十一)
  4. [EDA]FPGA/CPLD 设计流程步骤及步骤概念
  5. 服务器物理内存总是九十几,服务器物理内存使用率90以上
  6. ForkJoinPool 学习示例
  7. 设计模式_3_建造者模式
  8. 快速开发工作流_02_集成在线流程设计器
  9. Springboot的异步、定时、邮件任务
  10. 基于鸿蒙Hi3861和华为云平台的烟雾报警器(附源码)
  11. wrapper在python中_virtualenvwrapper如何在python中安装虚拟环境?
  12. 那些年我们一起追寻过的考研(华科计算机)
  13. Git commit message规范
  14. 群晖docker实现阿里云动态公网域名解析ddns服务
  15. 测试语文水平的软件,语文试卷质量分析
  16. Beyond Compare 3过期
  17. 2D横板动作游戏常用角色移动逻辑(转)
  18. cut out数据增强_谷歌大脑提出自动数据增强方法AutoAugment:可迁移至不同数据集...
  19. 笔记本网卡总断连,如何使得网卡不自动休眠?
  20. 从tushare pro 获取上证指数的日线行情(上证指数:000001.SH)

热门文章

  1. Linux根目录下各目录的作用
  2. java 将 object转成Integer
  3. CAN详解--CAN与com口介绍
  4. uni-app(Vue.js)创建运行微信小程序
  5. HuaWei ❉ IPv4基本原理
  6. 《易经》对中华文化的影响
  7. 前端模块化、组件化的理解
  8. python下tkinter模块和mysql构建图书管理系统实验
  9. 虚拟机匹配合适的服务器,如何为虚拟机选择合适的服务器硬件?
  10. new FileReader()