ZooKeeper深度面试指南三
一、分布式协调基石:核心机制解析
1. 数据发布/订阅(配置中心)
动态配置管理原理:
// 配置订阅示例
public void subscribeConfig(ZooKeeper zk, String path) throws Exception {// 初始读取配置并注册Watcherbyte[] data = zk.getData(path, event -> {if (event.getType() == EventType.NodeDataChanged) {byte[] newData = zk.getData(path, true, null);applyConfig(new String(newData)); // 应用新配置}}, null);applyConfig(new String(data)); // 应用初始配置
}
核心优势:
- 动态更新:配置变更秒级生效(Watcher通知机制)
- 集群一致性:所有节点共享同一配置源(单一视图)
- 容灾能力:配置持久化存储(ZNode数据持久化)
企业级实践:
- 数据库连接串动态切换
- 功能开关灰度发布
- 限流阈值实时调整
2. 命名服务与负载均衡
全局唯一路径生成:
# 创建顺序节点获取唯一ID
create -s /services/order_service/task_ "payload"
# 返回:/services/order_service/task_000000001
负载均衡实现方案:
- 服务节点注册临时节点:
zk.create("/services/order_service/server_", ip.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);
- 客户端获取节点列表并算法选择:
List<String> servers = zk.getChildren("/services/order_service", false); String targetServer = loadBalance(servers); // 轮询/随机/权重算法
- 监听节点变化动态更新服务列表
典型场景:
- 微服务网关路由
- RPC服务发现
- 分布式任务调度
二、集群管控:高可用架构设计
1. 集群管理与节点监控
节点状态管理实现: