面试回忆

请求rpc接口没反应如何处理? 看日志请求路径,有没有请求到实例上,继续追问请求到实例上了但是没有收到响应

k8s的东西

linux文件系统 .iso文件是什么

linux常用命令

熟悉那个MQ 为啥要RocketMQ RocketMQ有topic partition概念嘛

单例模式 及其解释

轮转链表

阻塞队列随机数生产线程、消费线程打印。题目上写了用信号量限制队列里面只有5个,用两个条件变量限制当队列没满才可以生产,当队列没空才可以消费。。条件变量Condition不会。写了挺久吧,面试官说他不看了没加lock肯定不对。。面试官最后说也可以用sychronized不用非得按题目

如何保证多台机子上本地缓存的一致性

如果本地机子只有1G,装不下,怎么办。其实他是想问分片 我猜测缓存淘汰策略 冷热分离

分片后请求来了如何路由,我:简单就写死啊 key1-key8 对准节点1-8

接上述:新加一个机子怎么办,我说向分库分表,一般都是预估好的。被反驳:咋可能,互联网都是看QPS高峰期加机子的

后面提示才知道他想问一致性hash,其实我本身就想继续说 一致性hash可以解决这种突然加节点迁移问题【不应该说废话hh】

rpc服务发现注册机制

zookeeper 故障了怎么办?我说zk都是高可用部署有副本的 后面追问:引出客户端本地缓存了provider的实例ip等元信息

追问:这些缓存到堆内还是?不知道

zookeeper节点类型有哪些?不知道

Dubbo负载均衡默认是那种?不知道【反思:就算不知道,也要说自己知道的几种策略的】

redis缓存淘汰策略有几种

一致性哈希

一致性哈希能在分布式哈希表(DHT)中,当节点增加或删除时,只引起少量数据迁移,而不需要重新映射所有数据。

一致性哈希的原理:

环形哈希空间:将哈希值组织成一个虚拟的环,整个哈希空间是0到2^32-1,并首尾相连。

将节点(机器)通过哈希函数映射到环上(通常使用节点的IP或唯一标识作为输入)。

将数据键通过同样的哈希函数映射到环上,然后从数据映射的位置开始顺时针查找,第一个遇到的节点就是该数据应该存储的节点。增加或删除节点只影响环上相邻的节点,减少了数据迁移量。

一致性哈希可能存在负载不均的问题,因为节点在环上的分布可能不均匀。为了解决这个问题,引入了虚拟节点的概念。

虚拟节点(Virtual Nodes):

每个物理节点在环上对应多个虚拟节点,虚拟节点是环上的点,每个物理节点由多个虚拟节点代表。这样,可以将环上的点分布得更均匀,从而使得数据分布更均匀。

例如,一个物理节点A可以对应多个虚拟节点A1、A2、A3...,它们都指向A。同样,节点B也有B1、B2、B3...。这样,环上虚拟节点越多,分布越均匀。

当节点增加时,同样为新增节点分配多个虚拟节点,这些虚拟节点会散列在环上,从而从多个原有节点那里接管一部分数据,使得负载相对均衡。

1. RPC服务发现注册机制

服务发现注册机制是分布式服务治理的核心。通常包含两个角色:服务提供者(Provider)和服务消费者(Consumer)。基本流程:

  • 服务注册:Provider启动时,向注册中心注册自己的元数据(如IP、端口、服务名等)。
  • 服务发现:Consumer启动时,从注册中心获取Provider的列表,并缓存到本地。后续调用时,从本地缓存中选择一个Provider进行调用。
  • 健康检查:注册中心会定期检查Provider的健康状态,如果发现Provider不可用,则将其从服务列表中移除,并通知Consumer更新本地缓存。

如果整个Zookeeper集群都不可用,那么:

  • 对于服务注册:Provider无法注册,但通常Provider会尝试重连。
  • 对于服务发现:Consumer无法从注册中心获取最新的服务列表,但是Consumer本地会缓存之前获取的服务列表。这样,即使注册中心挂掉,Consumer仍然可以使用本地缓存的服务列表进行调用,从而保证系统的可用性。

缓存位置:这些缓存通常存储在堆内存中。因为服务列表数据量不大,并且需要频繁访问,放在堆内可以快速读取。当然,也有可能会持久化到本地文件作为备份,以便在应用重启后还能使用。

3. Zookeeper节点类型有哪些?

Zookeeper中有两种节点类型:

  • 持久节点(Persistent):节点创建后,除非主动删除,否则一直存在。
  • 临时节点(Ephemeral):节点创建后,如果客户端会话失效(如客户端断开连接),则节点自动删除。临时节点常用于服务注册,当Provider与Zookeeper断开连接时,注册信息自动删除,从而实现服务下线。

此外,每种节点还可以有顺序(Sequential)的特性,即创建节点时Zookeeper会在节点名后加上一个自增的数字序列。因此,组合起来有四种节点类型:

  1. 持久节点(Persistent)
  2. 持久顺序节点(Persistent Sequential)
  3. 临时节点(Ephemeral)
  4. 临时顺序节点(Ephemeral Sequential)

4. Dubbo负载均衡默认是哪种?

Dubbo默认的负载均衡策略是随机(Random)。Dubbo提供了多种负载均衡策略:

  • Random:随机选择一台服务器,默认方式。
  • RoundRobin:轮询选择服务器。
  • LeastActive:选择活跃连接数最少的服务器。
  • ConsistentHash:一致性哈希,相同参数的请求总是发到同一台服务器。

在Dubbo的配置中,可以通过loadbalance参数来设置负载均衡策略。

全部评论
问deepseek还没学完
点赞 回复 分享
发布于 昨天 23:43 上海

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务