📖 本章预览
本章为预览版本,展示部分核心内容。完整内容包含详细源码解析、实战代码和面试要点,加入知识星球即可解锁全部章节。
第十五章:高可用与集群运维
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 章完整内容 + 持续更新
- ✅ 配套源码 + 实战项目
- ✅ 一对一答疑 + 面试辅导
- ✅ 简历优化 + 内推机会
📚 本章完整目录
以下为本章完整目录结构,加入知识星球即可解锁全部内容。