跳到主要内容
📖 本章预览

本章为预览版本,展示部分核心内容。完整内容包含详细源码解析、实战代码和面试要点,加入知识星球即可解锁全部章节。

第十五章:高可用与集群运维

高可用集群架构

15.1 集群寻址 — ServerMemberManager

public class ServerMemberManager {
private volatile ConcurrentSkipListMap<String, Member> serverList;
private MemberLookup lookup; // 寻址策略(SPI 可扩展)
}

15.1.1 三种寻址模式

MemberLookup(寻址策略接口)
├── FileConfigMemberLookup ← 从 cluster.conf 文件读取,成员固定
├── AddressServerMemberLookup ← 从地址服务器动态获取,成员动态变化
└── StandaloneMemberLookup ← 单机模式,只有自己

15.1.2 成员变更通知

// 成员列表变更时,发布 MembersChangeEvent
// ProtocolManager 收到后通知 AP/CP 协议更新成员
// Distro:更新同步目标列表
// JRaft:触发 Raft 成员变更(addPeer/removePeer)

15.2 Distro 数据分片 — responsible 机制

public class DistroMapper {
public boolean responsible(String serviceName) {
int index = distroHash(serviceName) % healthyList.size();
return healthyList.get(index).equals(localAddress);
}
}

作用

  • 健康检查:每个实例只被一个节点检查,避免重复
  • 写请求路由:非负责节点收到写请求时,转发给负责节点
  • 数据验证:每个节点只验证自己负责的数据

15.3 优雅上下线

public class GracefulShutdownListener
implements ApplicationListener<ContextClosedEvent> {
@Override
public void onApplicationEvent(ContextClosedEvent event) {
// 1. 标记自己为 DOWN 状态
// 2. 通知集群其他节点
// 3. 等待正在处理的请求完成
// 4. 关闭 gRPC Server
// 5. 关闭 Raft/Distro 协议
}
}

15.4 TPS 限流 — TpsControl

@TpsControl(pointName = "ConfigPublish")
public ConfigPublishResponse handle(...) { }

@TpsControl(pointName = "RemoteNamingInstanceRegisterDeregister")
public InstanceResponse handle(...) { }

🔒 解锁完整内容

本章剩余内容需要解锁后查看

以上仅为本章部分预览内容,完整内容包含详细源码解析、实战代码和面试要点。

加入知识星球你将获得:

  • ✅ 全部 17 章完整内容 + 持续更新
  • ✅ 配套源码 + 实战项目
  • ✅ 一对一答疑 + 面试辅导
  • ✅ 简历优化 + 内推机会

📚 本章完整目录

以下为本章完整目录结构,加入知识星球即可解锁全部内容。

15.5 安全与鉴权 — auth 模块

15.6 面试热点