Java面试大全(2020年版)61-70

60.Dubbo如何暴露与发现服务?(一定要懂)

节点角色说明:

  • Provider: 暴露服务的服务提供方。
  • Consumer: 调用远程服务的服务消费方。
  • Registry: 服务注册与发现的注册中心。
  • Monitor: 统计服务的调用次调和调用时间的监控中心。
  • Container: 服务运行容器。
    调用关系说明:
  • 服务容器负责启动,加载,运行服务提供者。
  • 服务提供者在启动时,向注册中心注册自己提供的服务。
  • 服务消费者在启动时,向注册中心订阅自己所需的服务。
  • 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推
    送变更数据给消费者。
  • 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,
    如果调用失败,再选另一台调用。
  • 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计
    数据到监控中心。

61.Dubbo 和 Spring Cloud 有什么区别?

Dubbo 使用的是 RPC 通信,而 Spring Cloud 使用的是 HTTP RESTFul 方式。这两种方式各有优劣。对于类似于电商等同步调用场景多并且能支撑搭建Dubbo 这套比较复杂环境的成本的产品而言,Dubbo 确实是一个可以考虑的选择。虽然在一定程度上来说Spring Cloud牺牲了服务调用的性能,但也避免了上面提到的原生RPC带来的问题。而且REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更为合适。

62.Dubbo 支持的通信协议有哪些?

  • dubbo协议(默认),使用NIO异步通信,单一长连接,hessian序列化协议,使用在传输数据量较小(每次请求在100kb以内),但是并发量很高的场景。
  • rmi(Remote Method Invocation 远程方法调用)java二进制序列化,使用在多个短连接,使用在消费者和提供者数量差不多的情况,适用于文件的传输,一般比较少用。
  • hessian协议,hessian序列化协议,多个短连接,使用在提供者比消费者数量还多的请你赶快,适用于文件传输,一般比较少用。

63.怎么实现远程通信

远程通信:简单来说,就是一个系统去调用另一个系统中的数据。
常见的有三种方式:

  • Webservice的方式:
    • 优点:跨语言跨平台
    • 缺点:它是基于soap协议的,使用http+xml的方式进行数据传输,http是应用层协议,传输效率不是很高,而且xml的解析也比 较费时,所以项目内部进行通信的时候,不建议使用Websservice的方式
  • restful形式的服务:
    • 优点:restful本身就是http,使用的是http+json的方式进行数据传输,因为json数据本身是非常简洁的,所以它比webservice的 传输效率更高;手机app端一般都使用该方法,其他很多项目也是用这种方式
    • 缺点:如果服务太多的话,会出现服务之间调用关系混乱,此时就需要治理服务
  • Dubbo:使用的是RPC协议进行远程调用,RPC协议是一个二进制协议,直接使用的socket进行通信,传输效率高,并且可以统计出系统 之间的调用关系和调用次数系统分布式SAO系统的内部通信推荐使用dubbo

64.Dubbo为什么使用异步单一长连接?

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

65.Dubbo有哪几种集群容错方案,默认是哪种?

  • Failover Cluster:失败重试
    当服务消费方调用服务提供者失败后自动切换到其他服务提供者服务器进行重试。这通常用于读操作或者具有幂等的写操作,需要注意的是重试会带来更长延迟。可通过 retries=“2” 来设置重试次数(不含第一次)。
  • Failfast Cluster:快速失败
    当服务消费方调用服务提供者失败后,立即报错,也就是只调用一次。通常这种模式用于非幂等性的写操作。
  • Failsafe Cluster:失败安全
    当服务消费者调用服务出现异常时,直接忽略异常。这种模式通常用于写入审计日志等操作。
  • Failback Cluster:失败自动恢复
    当服务消费端用服务出现异常后,在后台记录失败的请求,并按照一定的策略后期再进行重试。这种模式通常用于消息通知操作。
  • Forking Cluster:并行调用
    当消费方调用一个接口方法后,Dubbo Client会并行调用多个服务提供者的服务,只要一个成功即返回。这种模式通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=“2” 来设置最大并行数。
  • Broadcast Cluster:广播调用
    当消费者调用一个接口方法后,Dubbo Client会逐个调用所有服务提供者,任意一台调用异常则这次调用就标志失败。这种模式通常用于通知所有提供者更新缓存或日志等本地资源信息。
    如上,Dubbo本身提供了丰富的集群容错模式,但是如果您有定制化需求,可以根据Dubbo提供的扩展接口Cluster进行定制。

66.Dubbo的异常机制是什么?

Dubbo有一个名为ExceptionFilter的异常过滤器,包含如下机制:

  • 如果是checked异常,直接抛出!
  • 在方法签名上有声明,直接抛出 throws MyCustomException
  • 异常类和接口类在同一jar包里,直接抛出
  • 是JDK自带的异常,直接抛出(className.startsWith(“java.”) || className.startsWith(“javax.”))
  • 是Dubbo本身的异常,直接抛出(RpcException)
  • 其他异常通过RuntimeException

67.挂机_Dubbo挂机了怎么处理

首先zookeeper挂了还能调用服务,在启动dubbo时,消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用。但是在注册中心全部挂掉后增加新的提供者,则不能被消费者发现.(前提是你没有增加新的服务,如果你要调用新的服务,则是不能办到的。

68.安全_dubbo+zookeeper如何解决不同系统间调用的安全性问题

Dubbo通过Token令牌防止用户绕过注册中心直连,然后在注册中心上管理授权。

  • 可以全局设置开启令牌验证:

<dubbo:provider interface=“com.foo.BarService” token=“true” />

<dubbo:provider interface=“com.foo.BarService” token=“123456” />

  • 也可在服务级别设置:

<dubbo:service interface=“com.foo.BarService” token=“true” />

<dubbo:service interface=“com.foo.BarService” token=“123456” />

  • 还可在协议级别设置:

<dubbo:protocol name=“dubbo” token=“true” />

<dubbo:protocol name=“dubbo” token=“123456” />

69.Zookeeper 介绍(谈谈你对zookeeper的了解)

官方推荐使用 zookeeper 注册中心。注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。
Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbox 服务的注册中心,工业强度较高,可用于生产环境。

70.作用_zookeeper注册中心的作用?端口是多少

  • 作用:Zookeeper注册中心的作用主要就是注册和发现服务的作用。类似于房产中介的作用,在系统中并不参与服务的调用及数据的传输。
  • 端口及作用
    • 2181:对cline端提供服务
    • 3888:选举leader使用
    • 2888:集群内机器通讯使用(Leader监听此端口)
原创文章 52 获赞 3 访问量 2444

猜你喜欢

转载自blog.csdn.net/m0_47572402/article/details/106100827
今日推荐