今天来说一说dubbo的原理,首先我们要知道dubbo到底是什么,都能提供些什么服务?

一、dubbo是什么?

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

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

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

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

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

三、dubbo能做什么?

  1. 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
  2. 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
  3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

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

四、dubbo架构图

我们解释以下这个架构图:
Consumer服务消费者,Provider服务提供者。Container服务容器。消费当然是invoke提供者了,invoke这条实线按照图上的说明当然同步的意思了。但是在实际调用过程中,Provider的位置对于Consumer来说是透明的,上一次调用服务的位置(IP地址)和下一次调用服务的位置,是不确定的。这个地方就需要使用注册中心来实现软负载。
Register
服务提供者先启动start,然后注册register服务。消费订阅subscribe服务,如果没有订阅到自己想获得的服务,它会不断的尝试订阅。新的服务注册到注册中心以后,注册中心会将这些服务通过notify到消费者。
Monitor
这是一个监控,图中虚线表明Consumer 和Provider通过异步的方式发送消息至Monitor,Consumer和Provider会将信息存放在本地磁盘,平均1min会发送一次信息。Monitor在整个架构中是可选的(图中的虚线并不是可选的意思),Monitor功能需要单独配置,不配置或者配置以后,Monitor挂掉并不会影响服务的调用。

五、本地暴露与远程暴露的区别

本地暴露是暴露在本机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" />

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. Dubbo原理何源码解析之服务暴露

    2019独角兽企业重金招聘Python工程师标准>>> 一.框架设计 在官方<Dubbo 用户指南>架构部分,给出了服务调用的整体架构和流程: 另外,在官方<Dub ...

  2. Dubbo原理和源码解析之服务引用

    github新增仓库 "dubbo-read"(点此查看),集合所有<Dubbo原理和源码解析>系列文章,后续将继续补充该系列,同时将针对Dubbo所做的功能扩展也进行 ...

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

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

  4. feign post 传递空值_听我讲完GET、POST原理,面试官给我倒了杯卡布奇诺

    文章来源:听我讲完GET.POST原理,面试官给我倒了杯卡布奇诺 原文作者:陈哈哈 来源平台:CSDN 我有一个老朋友,我们叫他熊猫.发际线及将触碰到后脑勺,大框金丝眼镜也掩盖不住那黝黑的眼圈,显得格 ...

  5. dubbo原理_dubbo的底层原理

    一.Duboo基本概念解释 Dubbo是一种分布式服务框架. Webservice也是一种服务框架,但是webservice并不是分布式的服务框架,他需要结合F5实现负载均衡.因此,dubbo除了可以 ...

  6. Dubbo原理简单分析

    1.Dubbo原理分析 alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo.hsf),jms消息服务(napoli.notify),KV数据库(tair ...

  7. Dubbo系列之Dubbo原理简介

    文章目录 一.分布式基本知识 1.1) 架构演变 1.2).分布式基本概念 二.RPC简介 2.1) RPC概念 2.2) RPC核心模块 三.Dubbo原理简介 3.1) Dubbo简介 3.2) ...

  8. Dubbo原理与实践(2)

    Dubbo是阿里开源的的rpc框架,现已成为Apache的顶级项目.Dubbo在国内的大公司中使用较多,具有良好的服务治理能力. 在阿里停止维护一段时间后,2017年又重新开始维护,2.x的最新版本为 ...

  9. 免费分享Dubbo原理解析视频教程

    Dubbo是目前最火热的分布式框架项目之一,Java程序员必熟悉之框架. 这是微信群友分享的Dubbo原理解析视频教程,真是Dubbo上手到精通干货.现在分享出来. 以下为教程预览截图. 获取上以视频 ...

最新文章

  1. 修改特征码的相关知识
  2. mysql中两种备份方法的优缺点_Mysql两种存储引擎的优缺点
  3. java学习笔记2022.1.11
  4. POJ 1469 匈牙利算法
  5. 【转】DICOM医学图像处理:基于DCMTK工具包学习和分析worklist
  6. LeetCode 538. 把二叉搜索树转换为累加树(逆中序 根右左)
  7. ASP.NET MVC中的统一化自定义异常处理
  8. ELK之日志收集filebeat,并对nginx,tomcat access日志JSON格式化
  9. 968. 监控二叉树(JavaScript)
  10. cad2017怎么改变选择方式_近视手术方式这么多,到底该怎么选择?
  11. 第四周课程总结&实验报告。
  12. vue差(插)值表达式
  13. Java学习笔记——StringBuffer类
  14. eclipse设置背景图片(并非更换主题)
  15. Eege浏览器和Chrome浏览器选中文本朗读
  16. Java - 什么是UML?
  17. 数据挖掘——了解数据
  18. 面试专家陈建军出二十一组面试题(转)
  19. mysql rownum写法_MySQL 的 RowNum 实现
  20. python的乌龟画画的扩展运用

热门文章

  1. 复变函数第五章-留数
  2. 如何将当前时间为:Sun Jan 08 16:47:00 CST 2023格式转换成“yyyy-MM-dd HH:mm:ss“
  3. Unreal Engin_画廊制作笔记 _006灯光处理,静态灯光的设置
  4. 就读体验丨香港科技大学工学院科技领导及创业(TLE)理学硕士学位课程(上)
  5. 调试WebService的一个很好的工具
  6. c语言程序设计臧,臧学莲
  7. Excel给证件照换底色,红、蓝、白底任你换,看完涨知识了
  8. python矩阵运算_python矩阵计算
  9. 微软8月底推出网络音乐商店 全面挑战苹果
  10. 史上最全RabbitMq详解