首页 > 编程知识 正文

dubbo和zkeper的面试题,dubbo工作原理面试题

时间:2023-05-05 14:57:41 阅读:39087 作者:2423

我们可能在平时的工作中使用dubbo,但很多同学只是知道应用,不一定知道他的原理。 今天,说到dubbo的原理,首先要知道dubbo到底是什么,能提供什么服务。

一、什么是dubbo?

dubbo是一个分布式服务框架,提供高性能和透明的RPC远程服务调整和SOA服务治理解决方案。 说白了,dubbo是远程呼叫的分布式框架。

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

1 .远程通信:提供了基于多个长连接的NIO框架抽象封装,包括多个线程模型、序列化和“请求-响应”模式。

2 .集群容错:是基于接口的透明远程过程协议,包括多协议支持和集群支持,例如软负载均衡、容错、地址路由和动态配置

3 .自动检测:基于注册中心的目录服务,允许服务消费者动态搜索服务提供者,使地址透明,允许服务提供者顺利增减机器。

三. dubbo能做什么?

1 .透明的远程方法调用与调用本地方法一样,只需调用远程方法并进行简单配置,就不会有API入侵。

2 .软负载平衡和容错机制,用内部网替代硬件负载平衡设备(如F5 ),降低成本,减少单点。

3 .服务自动注册和发现,不再需要写服务提供者的地址,注册中心可以根据接口名称查询服务提供者的IP地址,方便地添加或删除服务提供者。

采用spring部署方式进行部署,完全透明的访问APP不会侵入APP,spring只需加载dubbo部署即可。

看看dubbo体系结构图

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

仔细查看dubbo的启动日志可以发现,dubbo的预配启动主要是以下过程

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

2 .然后将服务暴露在远程位置。

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

4 .连接到注册中心zk。

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

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

首先,ReferenceConfig类的init方法调用Protocol的refer方法来生成Invoker实例。 然后,将Invoker转换为客户端所需的接口。

六.看看本地暴露对远程暴露的区别。

本地暴露是指暴露于本地JVM,不需要网络通信来调用本地服务。

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

七、dubbo协定何时适用,rmi协定何时适用?

Dubbo支持许多协议,包括Dubbo、rmi、hessian、http、web服务、thrift和redis,但Dubbo协议是官方网站推荐的。 Dubbo的缺省协议是Dubbo协议,它采用单个长连接和NIO异步通信,适用于同时发送大量数据的服务,相反,Dubbo的缺省协议要求非常少,除非文件传输、NIO异步通信RMI协议采用阻塞短连接和JDK标准串行化方式。 适用范围:传入参数数据包大小混合,消费者和提供者数量少,可以传递文件。 其他一些协议稍后会详细介绍,这里不做说明。

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

提供程序配置

! -用于计算相关性的提供者APP应用信息--- dubbo : application name=' hello-world-app ' /! 使用multicast广播注册中心暴露服务地址--dubbo :注册地址=' multicast ://224.5.6.733601234 ' /! 用dubbo协议在20880端口上暴露服务--dubbo :协议名称=' dubbo ' port=' 20880 ' /! -声明需要暴露的服务接口--dubbo :服务接口=' com.Alibaba.dubbo.demo.demo service ' ref=' demo service '//-像本地bean一样实现服务--bean id=' demo service ' class=' com.Alibaba.dubbo.demo.provider.demoserviceimpl '

消费结构

! -消费者端APP应用名称、用于相关性计算、不匹配条件、不与提供者相同--- dubbo :应用程序名称=' consumer-of-hello world-app '/l

t;!-- 使用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.建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设置。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。