Dubbo——面试问题集(1~3)

1、默认使用的是什么通信框架,还有别的选择吗?

Dubbo默认使用netty,还支持mina, grizzy

配置方式:

<dubbo:protocol name=“dubbo” port=“9090” server=“netty” client=“netty” codec=“dubbo” serialization=“hessian2” 
charset=“UTF-8” threadpool=“fixed” threads=“100” queues=“0” iothreads=“9” buffer=“8192” accepts=“1000” payload=“8388608” />

在这里插入图片描述

  • Transporter: mina, netty, grizzy
  • Serialization: dubbo, hessian2, java, json
  • Dispatcher: all, direct, message, execution, connection
  • ThreadPool: fixed, cached

Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

Mina:

Mina(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 Mina 版本2.04支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序,Mina 所支持的功能也在进一步的扩展中。目前,正在使用 Mina的应用包括:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、ObjectRADIUS、 Openfire等等。

Netty:

Netty是一款异步的事件驱动的网络应用框架和工具,用于快速开发可维护的高性能、高扩展性协议服务器和客户端。也就是说,Netty是一个NIO客户端/服务器框架,支持快速、简单地开发网络应用,如协议服务器和客户端。它极大简化了网络编程,如TCP和UDP套接字服务器。

Grizzly:

Grizzly是一种应用程序框架,专门解决编写成千上万用户访问服务器时候产生的各种问题。使用JAVA NIO作为基础,并隐藏其编程的复杂性。容易使用的高性能的API。带来非阻塞socketd到协议处理层。利用高性能的缓冲和缓冲管理使用高性能的线程池。

2、服务调用是阻塞的吗?

Dubbo默认为同步阻塞调用,但是也支持异步调用(有返回值、无返回值两种)

异步无返回值:
所谓“无返回值”异步调用是指服务消费方只管调用,但不关心调用结果,此时 Dubbo 会直接返回一个空的 RpcResult。若要使用异步特性,需要服务消费方手动进行配置。

异步有返回值:
返回一个Future

服务调用过程如下:

public class DubboInvoker<T> extends AbstractInvoker<T> {private final ExchangeClient[] clients;protected Result doInvoke(final Invocation invocation) throws Throwable {RpcInvocation inv = (RpcInvocation) invocation;final String methodName = RpcUtils.getMethodName(invocation);// 设置 path 和 version 到 attachment 中inv.setAttachment(Constants.PATH_KEY, getUrl().getPath());inv.setAttachment(Constants.VERSION_KEY, version);ExchangeClient currentClient;if (clients.length == 1) {// 从 clients 数组中获取 ExchangeClientcurrentClient = clients[0];} else {currentClient = clients[index.getAndIncrement() % clients.length];}try {// 获取异步配置boolean isAsync = RpcUtils.isAsync(getUrl(), invocation);// isOneway 为 true,表示“单向”通信boolean isOneway = RpcUtils.isOneway(getUrl(), invocation);int timeout = getUrl().getMethodParameter(methodName, Constants.TIMEOUT_KEY, Constants.DEFAULT_TIMEOUT);// 异步无返回值if (isOneway) {boolean isSent = getUrl().getMethodParameter(methodName, Constants.SENT_KEY, false);// 发送请求currentClient.send(inv, isSent);// 设置上下文中的 future 字段为 nullRpcContext.getContext().setFuture(null);// 返回一个空的 RpcResultreturn new RpcResult();} // 异步有返回值else if (isAsync) {// 发送请求,并得到一个 ResponseFuture 实例ResponseFuture future = currentClient.request(inv, timeout);// 设置 future 到上下文中RpcContext.getContext().setFuture(new FutureAdapter<Object>(future));// 暂时返回一个空结果return new RpcResult();} // 同步调用else {RpcContext.getContext().setFuture(null);// 发送请求,得到一个 ResponseFuture 实例,并调用该实例的 get 方法进行等待return (Result) currentClient.request(inv, timeout).get();}} catch (TimeoutException e) {throw new RpcException(..., "Invoke remote method timeout....");} catch (RemotingException e) {throw new RpcException(..., "Failed to invoke remote method: ...");}}// 省略其他方法
}

3、一般使用什么注册中心?还有别的选择吗?

推荐使用zookeeper注册中心,还有Multicast、Redis和Simple等。

3.1 zookeeper 注册中心

Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用 [1]。
在这里插入图片描述
流程说明:

  • 服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址
  • 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
  • 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。

支持以下功能:

  • 当提供者出现断电等异常停机时,注册中心能自动删除提供者信息
  • 当注册中心重启时,能自动恢复注册数据,以及订阅请求
  • 当会话过期时,能自动恢复注册数据,以及订阅请求
  • 当设置 <dubbo:registry check=“false” /> 时,记录失败注册和订阅请求,后台定时重试
  • 可通过 <dubbo:registry username=“admin” password=“1234” /> 设置 zookeeper 登录信息
  • 可通过 <dubbo:registry group=“dubbo” /> 设置 zookeeper 的根节点,不设置将使用无根树
  • 支持 * 号通配符 <dubbo:reference group="" version="" />,可订阅服务的所有分组和所有版本的提供者
3.2 Multicast 注册中心:

Multicast 注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现。
在这里插入图片描述

  1. 提供方启动时广播自己的地址
  2. 消费方启动时广播订阅请求
  3. 提供方收到订阅请求时,单播自己的地址给订阅者,如果设置了 unicast=false,则广播给订阅者
  4. 消费方收到提供方地址时,连接该地址进行 RPC 调用。

组播受网络结构限制,只适合小规模应用或开发阶段使用。组播地址段: 224.0.0.0 - 239.255.255.255

3.3 Redis 注册中心

基于 Redis 实现的注册中心。
使用 Redis 的 Key/Map 结构存储数据结构:

  • 主 Key 为服务名和类型
  • Map 中的 Key 为 URL 地址
  • Map 中的 Value 为过期时间,用于判断脏数据,脏数据由监控中心删除 [3]

使用 Redis 的 Publish/Subscribe 事件通知数据变更:

  • 通过事件的值区分事件类型:register, unregister, subscribe, unsubscribe
  • 普通消费者直接订阅指定服务提供者的 Key,只会收到指定服务的 register, unregister 事件
  • 监控中心通过 psubscribe 功能订阅 /dubbo/*,会收到所有服务的所有变更事件

调用过程:

  1. 服务提供方启动时,向 Key:/dubbo/com.foo.BarService/providers 下,添加当前提供者的地址

  2. 并向 Channel:/dubbo/com.foo.BarService/providers 发送 register 事件

  3. 服务消费方启动时,从 Channel:/dubbo/com.foo.BarService/providers 订阅 register 和 unregister 事件

  4. 并向 Key:/dubbo/com.foo.BarService/consumers 下,添加当前消费者的地址

  5. 服务消费方收到 register 和 unregister 事件后,从 Key:/dubbo/com.foo.BarService/providers 下获取提供者地址列表

  6. 服务监控中心启动时,从 Channel:/dubbo/* 订阅 register 和 unregister,以及 subscribe 和unsubsribe事件

  7. 服务监控中心收到 register 和 unregister 事件后,从 Key:/dubbo/com.foo.BarService/providers 下获取提供者地址列表

  8. 服务监控中心收到 subscribe 和 unsubsribe 事件后,从 Key:/dubbo/com.foo.BarService/consumers 下获取消费者地址列表

可靠性声明
阿里内部并没有采用 Redis 做为注册中心,而是使用自己实现的基于数据库的注册中心,即:Redis 注册中心并没有在阿里内部长时间运行的可靠性保障,此 Redis 桥接实现只为开源版本提供,其可靠性依赖于 Redis 本身的可靠性。

3.4 Simple 注册中心

Simple 注册中心本身就是一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致。

配置
将 Simple 注册中心暴露成 Dubbo 服务:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><!-- 当前应用信息配置 --><dubbo:application name="simple-registry" /><!-- 暴露服务协议配置 --><dubbo:protocol port="9090" /><!-- 暴露服务配置 --><dubbo:service interface="org.apache.dubbo.registry.RegistryService" ref="registryService" registry="N/A" ondisconnect="disconnect" callbacks="1000"><dubbo:method name="subscribe"><dubbo:argument index="1" callback="true" /></dubbo:method><dubbo:method name="unsubscribe"><dubbo:argument index="1" callback="false" /></dubbo:method></dubbo:service><!-- 简单注册中心实现,可自行扩展实现集群和状态同步 --><bean id="registryService" class="org.apache.dubbo.registry.simple.SimpleRegistryService" />
</beans>

引用 Simple Registry 服务:

<dubbo:registry address="127.0.0.1:9090" />

或者:

<dubbo:service interface="org.apache.dubbo.registry.RegistryService" group="simple" version="1.0.0" ... >

或者:

<dubbo:registry address="127.0.0.1:9090" group="simple" version="1.0.0" />

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313488.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dubbo——面试问题集(4~14)

4、默认使用什么序列化框架&#xff0c;你知道的还有哪些&#xff1f; 在Dubbo RPC中&#xff0c;同时支持多种序列化方式&#xff1a; dubbo序列化&#xff0c;阿里尚不成熟的java序列化实现。 hessian2序列化&#xff1a;hessian是一种跨语言的高效二进制的序列化方式&…

向net core 3.0进击——April.WebApi从2.2爬到3.0

前言在之前对Swagger的变化做了调整后&#xff0c;就开始想着要不把之前的工程升级得了&#xff0c;这样就还是个demo工程&#xff0c;来做各种测试&#xff08;当然还是因为懒&#xff09;&#xff0c;这就有了今天这个比较折腾的一步。升级之路首先&#xff0c;April.WebApi工…

共识与拜占庭将军问题

1、共识基础 人们对共识机制的研究其实由来已久&#xff0c;从上世纪70年代就开始了相关研究&#xff0c;其目的是为了解决分布式系统中的一致性问题。Fischer, Lynch 和 Patterson在1985年发表的论文中提出了可以说是最重要的分布式系统定理&#xff1a;FLP不可能定理&#x…

C#刷遍Leetcode面试题系列连载(2): No.38 - 报数

前言前文传送门&#xff1a;上篇文章中我们主要科普了刷 LeetCode 对大家的作用&#xff0c;今天咱们就正式进行 LeetCode 算法题分析。很多人都知道计算机中有种思想叫 递归&#xff0c;相应地也出现了很多算法。解决递归问题的要点有如下几个:找出递归的关系比如&#xff0c;…

Bumblebee微服务网关之负载策略

作为一个微服务网关&#xff0c;提供不同负载策略配置是一项非常重要的主要功能&#xff1b;在这方向Bumblebee提供了非常好的支持。Bumblebee可以针对不同路径制定各自的负载策略&#xff0c;更重要的是这些调整都可以在网关运行过程动态调整&#xff01;动态策略调整可以更好…

FastDFS分布式文件系统设计原理

FastDFS是一个开源的轻量级分布式文件系统&#xff0c;由跟踪服务器&#xff08;tracker server&#xff09;、存储服务器&#xff08;storage server&#xff09;和客户端&#xff08;client&#xff09;三个部分组成&#xff0c;主要解决了海量数据存储问题&#xff0c;特别适…

14年百度深度学习校招题目

一、简答题1.深度神经网络目前有哪些成功的应用&#xff1f;简述原因。(10分) 2.列举不同进程共享数据的方式&#xff08;至少三种&#xff09;。(10分) 3.对于N个样本&#xff0c;每个样本为D维向量&#xff0c;采用欧式距离使用KNN做类预测。(10分) 1).给出预测时间复杂度。 …

HDFS分布式文件系统设计原理

Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统。HDFS是一个高度容错性的系统&#xff0c;适合部署在廉价的机器上。它能提供高吞吐量的数据访问&#xff0c;非常适合大规模数据集上的应用。要理解HDFS的内部工作原理&#xff0c;首先要理解什…

Magicodes.IE已支持导出Word、Pdf和Html

关于Magicodes.IE导入导出通用库&#xff0c;通过导入导出DTO模型来控制导入和导出&#xff0c;支持Excel、Word、Pdf和Html。GitHub地址&#xff1a;https://github.com/xin-lai/Magicodes.IE特点需配合相关导入导出的DTO模型使用&#xff0c;支持通过DTO以及相关特性控制导入…

AOP框架Dora.Interception 3.0 [1]: 编程体验

.NET Core正式发布之后&#xff0c;我为.NET Core度身定制的AOP框架Dora.Interception也升级到3.0。这个版本除了升级底层类库&#xff08;.NET Standard 2.1&#xff09;之外&#xff0c;我还对它进行大范围的重构甚至重新设计。这次重构大部分是在做减法&#xff0c;其目的在…

分布式缓存——一致性哈希算法

本文主要来自&#xff1a;http://www.zsythink.net/archives/1182 摘录防丢失 一致性哈希算法定义 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希&#xff08;DHT&#xff09;实现算法&#xff0c;设计目标是为了解决因特网中的热点(Hot spot)问题&#xff0c;初…

H264学习_基本数据结构

&#xfeff;&#xfeff;原文地址:http://blog.csdn.net/yangzhongxuan/article/details/8003494 名词解释 场和帧 &#xff1a; 视频的一场或一帧可用来产生一个编码图像。在电视中&#xff0c;为减少大面积闪烁现象&#xff0c;把一帧分成两个隔行的场。 片&#xff1a…

【巴马火麻茶】调节三高、治疗失眠、排毒减肥,轻松get长寿的秘密!

水&#xff0c;无色无味&#xff0c;是人类的生命源泉对于长期坐办公室的程序员朋友来说每日都得喝水但又觉得寡淡的白开水缺少点乐趣于是&#xff0c;茶叶就成了大家泡水的首选今天&#xff0c;队长要为大家介绍一款养生好茶巴马火麻茶每天一杯&#xff0c;轻松get长寿的秘密火…

「合规」震惊!地图可视化竟能如此玩,零门槛,全免费,效果远胜主流作图工具!...

在数据可视化领域&#xff0c;早晚会遇上地图可视化的需求&#xff0c;一个高大上的地图可视化&#xff0c;瞬间拔高整个报告的层次。Excel催化剂有幸接触并将地图可视化完全落地于Excel中完成。相对主流Python、R、PowerBI等作图工具&#xff0c;在易用性、灵活性和功能的强大…

Opencv SVM demo

&#xfeff;&#xfeff;转载自http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html 支持向量机 (SVM) 是一个类分类器&#xff0c;正式的定义是一个能够将不同类样本在样本空间分隔的超平面。 换句话说&#xff…

BeetleX之FastHttpApi服务使用详解

BeetleX是一个轻量级高性能的开源TCP通讯应用框架&#xff0c;通过BeetleX可以轻松扩展不同场的TCP应用服务和客户端组件。框架开源地址:https://github.com/IKende/BeetleX组件特点高性能TCP通讯组件,轻易实现百万级RPS通讯交互提供完善的会话管理机制和协议分析规则提供简洁的…

康威定律

本文来自&#xff1a;http://www.dockone.io/article/2691 1、概述 微服务架构是一种非常流行的新概念&#xff0c;即便可供以借鉴的经验比较少&#xff0c;当然不能阻挡它成为热门话题与研究对象。 令人惊讶地是&#xff0c;其实微服务的概念早在五十多年前就已经被提出&…

Cannot find or open the PDB file

&#xfeff;&#xfeff;http://blog.chinaunix.net/uid-11765716-id-3074932.html 遇到问题 SVM_demo.exe (Win32): Loaded ...\SVM_demo\Debug\SVM_demo.exe. Symbols loaded. SVM_demo.exe (Win32): Loaded C:\Windows\System32\ntdll.dll. Symbols loaded. SVM_demo.exe…

基于ASP.NET Core 3.0的ABP v0.21已发布

在微软发布仅仅一个小时后, 基于ASP.NET Core 3.0的ABP v0.21也紧跟着发布了.v0.21没有新功能.它只是升级到稳定的ASP.NET Core 3.0. 查看v0.20发行说明以获取新功能,增强功能和错误修复.关于v1.0ABP框架越来越接近v1.0.我们打算在今年10月中旬发布1.0. 现在,我们将完善测试和文…

SOA和微服务

一、面向服务的架构SOA SOA代表了面向服务的架构。 SOA是一种使用松耦合的黑盒子服务构建业务应用的体系架构&#xff0c;这些服务可以通过编排连接在一起以实现特定的功能。 面向服务的架构&#xff08;Service-Oriented Architecture&#xff09;是一种软件体系结构&#x…