当前位置: 首页 > news >正文

【中间件】如何设计主分片

有,而且业内已经跑出 4 条完全不同的路线。下面把“主分片"的**设计维度**拆成 3 个问题,再给出对应实现,你一眼就能看出差别。

------------------------------------------------
① "主"的身份要不要持久化?  
② 谁有资格当主?选举规则是什么?  
③ 主角色什么时候会飘移?漂移动作由谁触发?

------------------------------------------------
一、持久化静态主(HDFS 模式)  
- 身份落盘:NameNode 把“主节点地址”写进 **fsimage + edits**,集群重启后仍读这份地址。  
- 谁可当主:人工配置列表(dfs.namenode.*.rpc-address),只能在这几台里挑。  
- 何时漂移:管理员执行 failover 命令或 ZKFC 检测到心跳丢失才换主;**正常工况永不漂移**。  
→ 好处:实现简单,没有多副本一致性难题;代价:高可用依赖外部 ZKFC,换主要人工介入或至少秒级停顿。

------------------------------------------------
二、元数据注册动态主(Kafka / ES / HBase Region 模式)  
- 身份落盘:主记录只写在 **ZK 或 KRaft / ES-cluster-state / hbase:meta**,本地磁盘文件里**不带“主”标记**。  
- 谁可当主:所有副本都在候选池(ISR / allocation-id / meta 表),按“最新完整”规则投票。  
- 何时漂移:任一副本宕机、网络抖动、Leader  lease 超时立即重选,**毫秒-秒级自动完成**。  
→ 好处:故障自愈,对客户端透明;代价:必须实现一套“副本一致性 + 选举协议”。

------------------------------------------------
三、Quorum 写选主(ZooKeeper / etcd / Consul)  
- 身份落盘:选举结果写进 **自身事务日志**(zxid / raft-index),**多数派提交即持久**。  
- 谁可当主:拿到**多数投票**且日志最完整的节点;系统规模通常 2n+1。  
- 何时漂移:Leader lease 超时或失去多数 ACK 立即发起新选举,**保证集群总有一个主**(CP 系统)。  
→ 好处:强一致性;代价:写操作必须走 Quorum,延迟较高,不适合高吞吐数据面。

------------------------------------------------
四、无 Leader / 最终一致(Dynamo / Cassandra / Riak)  
- 身份落盘:**没有全局主**,每条数据用一致性哈希落到 N 个副本,写时指定“协调者”即可。  
- 谁可当主:任何副本都能接受写(**多活**),用向量时钟 / LWW 解决冲突。  
- 何时漂移:不需要漂移——客户端可随机挑节点,**“主”只是本次写的协调者**,下次可以换。  
→ 好处:高可用、低延迟、水平扩展最好;代价:一致性弱(可调级别),需要冲突合并逻辑。

------------------------------------------------
五、混合模式(Amazon Aurora、PolarDB-X、TiDB)  
- 计算层无状态,**持久化日志**(Redo / Binlog)到共享存储或 Raft Group;  
- 日志层用 **Quorum 选主**(类似 etcd),但**数据分片本身不选举**,只是追着同一份日志回放;  
- 主挂掉 → 日志层重新选主 → 新计算节点挂载同一块日志继续服务,**“主”身份在日志层而非数据分片层**。  
→ 兼顾强一致和高吞吐,是目前云原生数据库的主流做法。

------------------------------------------------
小结  
“主分片”设计空间其实就 3 句话:  
1. **持久化静态主** —— 简单、换主慢(HDFS);  
2. **注册动态主** —— 自动漂移、实现复杂(Kafka/ES/HBase);  
3. **干脆不要主** —— 多活合并冲突(Dynamo/Cassandra);  
再往下就是各种混合、分层、日志即主等变种。选哪条路线,取决于你想要**强一致**还是**高吞吐**,以及**能不能接受选举复杂度**。

http://www.dtcms.com/a/540852.html

相关文章:

  • 佛山网站建设兼职个人网页制作成品简单
  • 鹤壁北京网站建设彩票网站维护会跑路吗
  • AI获客哪家公司靠谱
  • Facebook多账号管理实战指南:安全合规与效率提升策略
  • 基于 STM32 与机器学习的电机 / 风扇异常声音检测系统设计与实现
  • 【HTML教学】成为前端大师的入门教学
  • 天津建立网站营销设计帮人做网站犯法
  • 数据链路层:网络通信的基石与工程实践
  • 从加载到推理:Llama-2-7b 昇腾 NPU 全流程性能基准
  • 河南商城网站建设wordpress驾校模版
  • Linux可执行程序提示GLIBCXX not found邪修办法
  • Oracle 数据库OGG 工具简介
  • 网站面包屑导航设计即位置导航网页设计的流程是什么
  • 【Block总结】MRFA,大卷积感受野,提高小目标检测的利器|即插即用|ICCV 2025
  • 2025年机电一体化与轨道交通国际学术会议(MRT 2025)
  • 多传感器融合的办公室智能门禁系统(论文+源码)
  • 【Java +AI |基础篇day3 流程控制】
  • 关于网站的建设微信小程序开发平台
  • 常规八股 (w字解析,不定期更新)
  • Python界面开发2
  • 做网站还有开发文档吗做一个游戏需要什么技术
  • C语言多变量scanf循环输入深度解析:==number vs !=EOF
  • 上海殷行建设网站空间做网站
  • 吴恩达DeepLearning课程我的笔记week2
  • 建设多语种网站静态网站设计与制作书籍
  • 软件危机:开发困境与解决之道
  • NewStarCTF2025-WEEK3
  • 手机网站建设运营方案网站怎么换模板
  • 消防器具-图形识别一键计量
  • 体育彩票数据分析 python双色球数据实时分析平台+实时监控大屏 数据爬虫 可视化大屏+Flask框架 大数据 (源码)✅