2020全网最新最全Dubbo面试题详解,助你斩获阿里offer(下)

简介: 2020全网最新最全Dubbo面试题详解,助你斩获阿里offer(下)

安全方面是如何解决的

Dubbo 通过 Token 令牌防止用户绕过注册中心直连,然后在注册中心上管理授权。Dubbo 还提供服务黑白名单,来控

制服务所允许的调用方。

4. dubbo 连接注册中心和直连的区别

在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,

点对点直联方式,将以服务接口为单位,忽略注册中心的提供者列表,

服务注册中心,动态的注册和发现服务,使服务的位置透明,并通过在消费方获取服务提供方地址列表,实现软负载

均衡和 Failover, 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给

消费者。

服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调

用。注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册

中心不转发请求,服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,注册中心,服

务提供者,服务消费者三者之间均为长连接,监控中心除外,注册中心通过长连接感知服务提供者的存在,服务提供

者宕机,注册中心将立即推送事件通知消费者

注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表

注册中心和监控中心都是可选的,服务消费者可以直连服务提供者。


dubbo 服务集群配置(集群容错模式)

在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failover 重试。可以自行扩展集群容错策略

l Failover Cluster(默认)

失败自动切换,当出现失败,重试其它服务器。(缺省)通常用于读操作,

但重试会带来更长延迟。可通过 retries=“2"来设置重试次数(不含第一次)。

[AppleScript] 纯文本查看 复制代码

?1234

<dubbo:service retries=“2” cluster=“failover”/>

或:

<dubbo:reference retries=“2” cluster=“failover”/>

cluster=“failover"可以不用写,因为默认就是 failover

l Failfast Cluster

快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,

比如新增记录。

[AppleScript] 纯文本查看 复制代码

?1234

dubbo:service cluster=“failfast” />

或:

<dubbo:reference cluster=“failfast” />

cluster=“failfast"和 把 cluster=“failover”、retries=“0"是一样的效果,retries=“0"就是不重试

l Failsafe Cluster

失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

[AppleScript] 纯文本查看 复制代码

?

123

<dubbo:service cluster=“failsafe” />

或:

<dubbo:reference cluster=“failsafe” />

l Failback Cluster

失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

[AppleScript] 纯文本查看 复制代码

?123

<dubbo:service cluster=“failback” />

或:

<dubbo:reference cluster=“failback” />

l Forking Cluster

并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读

操作,但需要浪费更多服务资源。可通过 forks=“2"来设置最大并行数。

[AppleScript] 纯文本查看 复制代码

?123

<dubbo:service cluster=“forking” forks=“2”/>

或:

<dubbo:reference cluster=“forking” forks=“2”/>

l 配置

[AppleScript] 纯文本查看 复制代码

?123456

服务端服务级别

<dubbo:service interface=”…” loadbalance=“roundrobin” />

客户端服务级别

<dubbo:reference interface=”…” loadbalance=“roundrobin” />

服务端方法级别 <dubbo:service interface="…"> <dubbo:method name="…" loadbalance=“roundrobin”/> </dubbo:service>

客户端方法级别 <dubbo:reference interface="…"> <dubbo:method name="…" loadbalance=“roundrobin”/> </dubbo:reference>

dubbo 通信协议 dubbo 协议为什么要消费者比提供者个数多:

因 dubbo 协议采用单一长连接,假设网络为千兆网卡(1024Mbit=128MByte),

根据测试经验数据每条连接最多只能压满 7MByte(不同的环境可能不一样,供参考),理论上 1 个服务提供者需要 20

个服务消费者才能压满网卡。

dubbo 通信协议 dubbo 协议为什么不能传大包:

因 dubbo 协议采用单一长连接,

如果每次请求的数据包大小为 500KByte,假设网络为千兆网卡(1024Mbit=128MByte),每条连接最大 7MByte(不同的

环境可能不一样,供参考),

单个服务提供者的 TPS(每秒处理事务数)最大为:128MByte / 500KByte = 262。

单个消费者调用单个服务提供者的 TPS(每秒处理事务数)最大为:7MByte / 500KByte = 14。

如果能接受,可以考虑使用,否则网络将成为瓶颈。

dubbo 通信协议 dubbo 协议为什么采用异步单一长连接:

因为服务的现状大都是服务提供者少,通常只有几台机器,

而服务的消费者多,可能整个网站都在访问该服务,

比如 Morgan 的提供者只有 6 台提供者,却有上百台消费者,每天有 1.5 亿次调用,

如果采用常规的 hessian 服务,服务提供者很容易就被压跨,

通过单一连接,保证单一消费者不会压死提供者,

长连接,减少连接握手验证等,

并使用异步 IO,复用线程池,防止 C10K 问题。

dubbo 通信协议 dubbo 协议适用范围和适用场景

适用范围:传入传出参数数据包较小(建议小于 100K),消费者比提供者个数

多,单一消费者无法压满提供者,尽量不要用 dubbo 协议传输大文件或超大字

符串。

适用场景:常规远程服务方法调用

dubbo 协议补充:

连接个数:单连接

连接方式:长连接

传输协议:TCP

传输方式:NIO 异步传输

序列化:Hessian 二进制序列化

RMI 协议

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

化方式,Java 标准的远程调用协议。

连接个数:多连接

连接方式:短连接

传输协议:TCP

传输方式:同步传输

序列化:Java 标准二进制序列化

适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传

文件。

适用场景:常规远程服务方法调用,与原生 RMI 服务互操作

Hessian 协议

Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通讯,采用

Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现

基于 Hessian 的远程调用协议。

连接个数:多连接

连接方式:短连接

传输协议:HTTP

传输方式:同步传输

序列化:Hessian 二进制序列化

适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较

大,可传文件。

适用场景:页面传输,文件传输,或与原生 hessian 服务互操作

http

采用 Spring 的 HttpInvoker 实现

基于 http 表单的远程调用协议。

连接个数:多连接

连接方式:短连接

传输协议:HTTP

传输方式:同步传输

序列化:表单序列化(JSON)

适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览

器查看,可用表单或 URL 传入参数,暂不支持传文件。

适用场景:需同时给应用程序和浏览器 JS 使用的服务。

Webservice

基于 CXF 的 frontend-simple 和 transports-http 实现

基于 WebService 的远程调用协议。

连接个数:多连接

连接方式:短连接

传输协议:HTTP

传输方式:同步传输

序列化:SOAP 文本序列化

适用场景:系统集成,跨语言调用。

Thrif

Thrift 是 Facebook 捐给 Apache 的一个 RPC 框架,当前 dubbo 支持的 thrift

协议是对 thrift 原生协议的扩展,在原生协议的基础上添加了一些额外的头信

息,比如 service name,magic number 等


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
8月前
|
存储 关系型数据库 MySQL
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
|
7月前
|
监控 Java 数据安全/隐私保护
阿里面试:SpringBoot启动时, 如何执行扩展代码?你们项目 SpringBoot 进行过 哪些 扩展?
阿里面试:SpringBoot启动时, 如何执行扩展代码?你们项目 SpringBoot 进行过 哪些 扩展?
|
6月前
|
负载均衡 架构师 Cloud Native
阿里面试:服务与发现 ,该选 CP 还是 AP?为什么?
阿里面试:服务与发现 ,该选 CP 还是 AP?为什么?
阿里面试:服务与发现 ,该选  CP 还是 AP?为什么?
|
7月前
|
SQL Java 数据库连接
阿里腾讯互联网公司校招 Java 面试题总结及答案解析
本文总结了阿里巴巴和腾讯等互联网大厂的Java校招面试题及答案,涵盖Java基础、多线程、集合框架、数据库、Spring与MyBatis框架等内容。从数据类型、面向对象特性到异常处理,从线程安全到SQL优化,再到IOC原理与MyBatis结果封装,全面梳理常见考点。通过详细解析,帮助求职者系统掌握Java核心知识,为校招做好充分准备。资源链接:[点击下载](https://pan.quark.cn/s/14fcf913bae6)。
234 2
|
10月前
|
存储 关系型数据库 MySQL
携程面试:100 亿分库分表 如何设计? 核弹级 16字真经, 让面试官彻底 “沦陷”,当场发offer!
携程面试:100 亿分库分表 如何设计? 核弹级 16字真经, 让面试官彻底 “沦陷”,当场发offer!
携程面试:100 亿分库分表 如何设计?  核弹级 16字真经, 让面试官彻底 “沦陷”,当场发offer!
|
9月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
11月前
|
存储 SQL 算法
阿里面试:每天新增100w订单,如何的分库分表?这份答案让我当场拿了offer
例如,在一个有 10 个节点的系统中,增加一个新节点,只会影响到该新节点在哈希环上相邻的部分数据,其他大部分数据仍然可以保持在原节点,大大减少了数据迁移的工作量和对系统的影响。狠狠卷,实现 “offer自由” 很容易的, 前段时间一个武汉的跟着尼恩卷了2年的小伙伴, 在极度严寒/痛苦被裁的环境下, offer拿到手软, 实现真正的 “offer自由”。在 3 - 5 年的中期阶段,随着业务的稳定发展和市场份额的进一步扩大,订单数据的增长速度可能会有所放缓,但仍然会保持在每年 20% - 30% 的水平。
阿里面试:每天新增100w订单,如何的分库分表?这份答案让我当场拿了offer
|
9月前
|
存储 算法 架构师
阿里面试:PS+PO、CMS、G1、ZGC区别在哪?什么是卡表、记忆集、联合表?问懵了,尼恩来一个 图解+秒懂+史上最全的答案
阿里面试:PS+PO、CMS、G1、ZGC区别在哪?什么是卡表、记忆集、联合表?问懵了,尼恩来一个 图解+秒懂+史上最全的答案