• 经典面试题 之 Dubbo和Zookeeper


    1.dubbo的工作流程

    1. provider向注册中心去注册自己为一个服务
    2. consumer去注册中心订阅服务,注册中心会通知consumer注册好的服务,consumer会将provider的地址等信息拉取到本地缓存
    3. consumer去调用provider
    4. consumer和provider都异步的通知监控中心

    2.Dubbo的通信原理

    1. Dubbo底层使用 hessain2进行二进制序列化进行远程调用
    2. Dubbo底层使用 netty框架进行异步通信。NIO

    3.dubbo负载均衡策略有哪些?

    • random loadbalance
    • 默认情况下,dubbo是random loadbalance随机调用实现负载均衡,可以对provider不同实例设置不同的权重,会按照权重来负载均衡,权重大分配的流量高          
    • roundrobin loadbalance
    • 默认就是均匀地将流量达到各个机器上,值得注意的是,要根据机器的性能,调整权重。
    • leastactive loadbalance
    • dubbo自动感知,如果某个机器性能越差,那么接收的请求就越少,给不活跃的机器更少的请求   
    • consistanthash loadbalance
    • 一致性hash算法,相同参数的请求一定分发到同一个provider上,provider挂掉的时候,会基于虚拟机节点均匀分配甚于的流量,抖动不会太大.适用于订单,同一个订单的操作,分配到同一个机器上,这样就可以避免高并发场景下,数据库和缓存中数据不一致的情况

    3.zookeeper注册中心挂了,dubbo可以继续使用吗?

    可以,因为刚开始dubbo初始化的时候,消费者会将提供者的地址等信息缓存到dubbo,注册中心挂了dubbo可以继续通信

    4.zookeeper 都有哪些功能?

    1. 集群管理:监控节点存活状态、运行请求等。
    2. 主节点选举:主节点挂掉了之后可以从备用的节点开始新一轮选主,主节点选举说的就是这个选举的过程,使用 zookeeper 可以协助完成这个过程。
    3. 分布式锁:zookeeper 提供两种锁:独占锁、共享锁。独占锁即一次只能有一个线程使用资源,共享锁是读锁共享,读写互斥,即可以有多线线程同时读同一个资源,如果要使用写锁也只能有一个线程使用。zookeeper可以对分布式锁进行控制。
    4. 命名服务:在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。

    5.Zookeeper的watch机制(通知机制)

    Zookeeper系统中其实类似于window系统中的文件夹,zookeeper可以建立普通节点和临时节点,但是每个节点只能有一个,例如:/a/b/c节点已经存在,那么再来申请/a/b/c的节点就会失败。此时可以设置watch此节点,当/a/b/c节点删除后,会通知watch此节点的所有线程,线程再来创建节点,完成设定的任务。(分布式锁,高可用性)

    6.zookeeper 怎么保证主从节点的状态同步?

    zookeeper 的核心是原子广播,这个机制保证了各个 server 之间的同步。实现这个机制的协议叫做 zab 协议。 zab 协议有两种模式,分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,zab 就进入了恢复模式,当领导者被选举出来,且大多数 server 完成了和 leader 的状态同步以后,恢复模式就结束了。状态同步保证了 leader 和 server 具有相同的系统状态。

    7.什么是 zab 协议

    ZAB 是 Zookeeper 原子广播协议的简称

    整个ZAB协议主要包括消息广播和崩溃恢复两个过程,进一步可以分为三个阶段,分别是:

        发现 Discovery
        同步 Synchronization
        广播 Broadcast

    组成ZAB协议的每一个分布式进程,都会循环执行这三个阶段,将这样一个循环称为一个主进程周期。

    8.如果zookeeper服务挂了怎么办?

    册中心对等集群,任意一台宕掉后,会自动切换到另一台

    注册中心全部宕掉,服务提供者和消费者仍可以通过本地缓存通讯

    服务提供者无状态,任一台宕机后,不影响使用

    服务提供者全部宕机,服务消费者会无法使用,并无限次重连等待服务者恢复

  • 相关阅读:
    Element——组件
    Vue项目引入translate.js 国际化自动翻译组件
    Ubuntu 24.04 LTS 安装 touchegg 开启触控板多指手势
    信息学奥赛一本通:2036:【例5.3】开关门
    python自动化测试 | 接口自动化测试脚本如何写好?
    清空回收站的照片还能找回来吗?照片恢复用这招
    机器视觉工程师前景如何,计算机视觉工程师薪资
    人工智能在日常生活中的应用
    关闭jenkins插件提醒信息
    vue路由(十)实现有无权限(token)登录跳转判断详细教程
  • 原文地址:https://blog.csdn.net/weixin_69413377/article/details/126328498