知识卡片
数据分散集群:数据分配算法的三设计点,及执行角色的两种实现路径
内容
和[[数据集中集群:规模扩大带来的三重复杂性,及ZooKeeper的应对]]不同,数据分散集群指多台服务器组成一个集群,每台服务器都负责存储一部分数据,同时为了容错也各自备份一部分其他服务器的数据。数据分散集群的复杂点在于”怎么把数据分配到不同服务器”这套算法本身,需要同时满足三个设计要求:均衡性——各服务器承担的数据分区数量要大致相当,不能出现某台是另一台好几倍的失衡情况;容错性——部分服务器故障时,原本分配给它的数据分区要能重新分配给其他健康的服务器;可伸缩性——集群容量不够、扩充新服务器后,算法要能自动把部分数据分区迁移到新服务器上,并且保证扩容后整体依然均衡。数据分散集群和数据集中集群的关键区别在于:数据分散集群里每台服务器都能处理读写请求,不存在数据集中集群里那种专门负责写的”主机”角色;但集群依然必须有某个角色专门负责执行”数据该怎么分配”这套算法,这个角色可以是一台独立的服务器,也可以是集群自己选举出来的一台服务器——如果是后者,这台服务器有时也被称为”主机”,但它承担的职责和数据集中集群里的”主机”(负责所有写操作)是完全不同的两码事,不要混淆。Hadoop走的是独立服务器路线:专门用一台叫Namenode的服务器负责管理文件系统的名字空间和数据块到具体Datanode的映射,Datanode只负责实际存储和处理客户端的读写请求,在Namenode的统一调度下完成数据块的创建、删除和复制。Elasticsearch则走选举路线:从集群节点里选出一台叫master node的服务器,负责创建/删除索引、跟踪集群成员、决定分片该分配到哪个节点这类轻量级但对集群整体健康至关重要的调度工作。
结构图:
flowchart TB
A["数据分散集群:每台服务器自己存一部分+备份一部分"]
A --> B["数据分配算法三设计点"]
B --> B1["均衡性:各服务器数据分区数量大致相当"]
B --> B2["容错性:服务器故障时分区能重新分配给他人"]
B --> B3["可伸缩性:扩容后能自动迁移分区并保持均衡"]
A --> C["谁来执行分配算法?"]
C --> D["路径一:独立服务器<br/>如Hadoop的Namenode<br/>负责管理名字空间+数据块到Datanode的映射"]
C --> E["路径二:集群自选举<br/>如Elasticsearch的master node<br/>负责索引创建删除/成员追踪/分片分配"]
参考来源
- 位置:《从零开始学架构》第26讲《高可用存储架构:集群和分区》"数据集群"之"数据分散集群"(源文件:_epub-src/OEBPS/text00002.html)
- 结论依据:原文说明数据分配算法需考虑"均衡性……容错性……可伸缩性"三点,并指出"数据分散集群中的每台服务器都可以处理读写请求,因此不存在数据集中集群中负责写的主机那样的角色。但在数据分散集群中,必须有一个角色来负责执行数据分配算法",以Hadoop的Namenode(独立服务器)和Elasticsearch的master node(集群选举)为具体例证,直接支撑本卡片结论与结构图。
- 原始内容:算法需要保证服务器上的数据分区基本是均衡的……当出现部分服务器故障时,算法需要将原来分配给故障服务器的数据分区分配给其他服务器……必须有一个角色来负责执行数据分配算法,这个角色可以是独立的一台服务器,也可以是集群自己选举出的一台服务器。