zoukankan      html  css  js  c++  java
  • Dubbo+zookeeper面试题补充

    1. 什么是分布式?什么是集群?主要区别

    分布式是将一个服务分个部分,然后通过远程调用方式进行。远程调用框架RPC框架,spring cloud,dubbo。集群是将同一个服务的多个副本部署在不同的集群上,通过负载均衡的方式提供复试。场景:厨师。

    1. 服务治理包括哪些内容?

    服务治理需要服务治理框架,dubbo。即对服务进行管理,例如服务的接口名称,权重等信息。

    1. 注册中心的作用?你怎么理解注册中心的?

    如果没有注册中心,需要在本地维护一个provider的地址列表。注册中心角色,它是集中式数据管理,消费者通过注册中心来访问数据。通过注册中心,使得provider和consumer之间是透明。

    1. 什么是RPC?

    远程调用框架。

    1. 什么是幂等性?

    是系统开发中非常重要的原则,一个动作多次执行的结果跟一次执行的结果是一致的。

    1. 以支付为例,说明非幂等引发的影响?如何解决?

    为什么会返回支付失败的提示?网络原因或者其他原因。

    1)在支付之前先检查订单有没有支付

    2)如果已经支付就返回支付状态

    3)如果没有支付就进行支付

    1. 在基于dubbo的分布式环境中,一般将超时timeout设置在provider还是consumer?

    应该设置在provider端。为什么?因为provider端更熟知自己方法执行需要的时间。

    1. 你是如何理解接口调用超时的?默认情况下,超时后将如何处理?

    发出请求执行timeout规定的时间内没有返回值(consumer没有拿到返回值),但是该方法不一定死了。默认情况下,如果超时的话,将发起重试,默认发起2次重试(总共执行3次),可能会引起重复执行,很多情况,写操作的重复执行是我们不想看到的。

    1. dubbo中负载均衡的策略有哪些?

    Provider: 集群,集群只需要重启几个实例即可。

    Zookeeper:集群

    Consumer:集群

    负载:Loadbalence轮询,随机

    10. dubbo中容错策略有哪些?

    cluster属性。

    Failover:失败转移,不会重试,而是将请求转给其他的provider

    Failfaste:快速失败,不会重试,而是直接返回失败异常

    11. 负载均衡的结果只跟策略有关,对吗?

    不对,还跟权重有关。

    权重默认100.

    12. 为什么不推荐使用kill -9 来关闭provider服务?

    因为kill -9不能优雅关机。不仅 provder不能-9其他的所有服务都不要-9.例如kill -9 redis会导致无法生成rdb持久化文件。

    13. 解释一下优雅关机?优雅关机的超时时间跟timeout有关系吗?

    1)provider来说

    2)consumer来说

    没有关系,dubbo.service.shutdown.wait=15000

    14. 谈一下接口的异步调用?如何设置?运行效果?

    通过asyanc属性设置异步.

    如果设置异步,则不需要等待该方法返回值,程序即可往下进行。

    Object o = Methoda();

    Sysout(o);

    Methodb();

    1) 打印结果为null.

    2) Timeout不会超时。

    15. 如果一个方法执行完毕需要2秒,在timeout中设置的超时时间为1秒,请问如果是异步调用该方法,会不会重试?

    结合14题,得出不再重试,因为不会超时。

    16. 描述一下令牌的发出、获取和验证过程?

    provider发出令牌。

    consumer获取令牌,consumer必须连接zk才能获取令牌,换句话说,直连的话就无法获取令牌。

    17. 谈谈基于dubbo的系统中consumer集群的解决方案?

    nginx反代多个tomcat即可。

    18. 谈谈dubbo的多协议、多注册中心、多版本支持?

    多协议:同一个服务,可以通过不同的协议去发布,例如dubbo ,http,rmi....

    多注册中心:同一个服务,可以注册到不同的注册中心上。

    registry="zk2181,zk2182,zk2183"

    19. 谈谈zookeeper集群和redis集群在架构设计上的不同?

    Zk集群中,每一个节点实例上的数据,都是同步的,即都是一致的。如果master宕机,根据选举机制,选择一个新的master,这个新的master数据跟之前的数据都是一杨的。

    redis集群是基于槽的,总共16384个槽,这些槽只分给了master,各个master节点之间的数据不进行同步,即redis集群的数据是分布式存储。

    redis最少需要3个节点,但是他们之间还有一个不一样的地方:

    Redis集群不管有几个几点,只有该master节点没有slave,那就集群就不可用了,因为它的槽不连续了。

    20. 如何将dubbo和springboot集成?

    1)导入依赖

    2)配置全局文件

    3)用阿里的service注解暴露服务。

    4)controller中使用reference注解去引用该服务。

    5)在入口类启动dubbo服务注解

    eg:

    package com.pinyougou.manager.controller;

    @Reference

    private BrandService brandService; //调用  Dubbo暴露的接口   @Reference是alibaba的

    会有包扫描     <dubbo:annotation package="com.pinyougou.manager.controller" /> 
     <dubbo:annotation package="com.pinyougou.sellergoods.service.impl" />  
  • 相关阅读:
    js内置数据类型
    vue禁止复制的方式
    阻止element组件中的<el-input/>的粘贴功能
    Vue插件集合
    qs.parse()、qs.stringify()、JSON.stringify() 用法及区别
    es6数组的一些函数方法使用
    文章段落首字母缩进两个字符
    深圳scala-meetup-20180902(3)- Using heterogeneous Monads in for-comprehension with Monad Transformer
    深圳scala-meetup-20180902(2)- Future vs Task and ReaderMonad依赖注入
    深圳scala-meetup-20180902(1)- Monadic 编程风格
  • 原文地址:https://www.cnblogs.com/duanwandao/p/9975393.html
Copyright © 2011-2022 走看看