在上一节分布式理论之高可用:Master-Slave中,我们介绍的主备、主从、主主模式都隐含着一个假设: 每一个节点都存储着所有数据。但是单机的存储和处理能力是有极限的,以MySQL数据库来说,单台的存储能力上限一般在500GB左右。因此,在分布式系统中,一般会用多台服务器来存储数据,每台服务器只存取总数据的一部分,这就是数据集群架构。
简单来说,集群就是多台机器组合在一起形成一个统一的系统,这里的“多台”,数量上至少是 3台 ;相比而言,主备、主从都是2台机器。根据集群中机器承担的不同角色来划分,集群可以分为两类: 数据集中集群 、 数据分散集群 。
一、数据集中集群
数据集中集群,其本质还是Master-Slave模式,只不过是 1主多备 或者 1主多从 ,数据同样都只能往主机中写。下图是读写全部到主机的一种架构:
虽然架构上是类似的,但由于集群里面的服务器数量更多,导致复杂度整体更高一些,具体体现在:
- 数据复制问题: 存在多条复制通道时,会增大主机复制的压力。其次,多条复制通道可能会导致多个备机之间数据不一致,需要有修正机制来对一致性进行检查和修复;
- 状态检测问题: 多台备机都需要对主机状态进行判断,而不同备机判断的结果可能是不同的,如何处理结果的不一致性,是一个复杂的问题;
- 选主问题: 当有多台备机都可以升级为主机时,实际上只能允许一台备机升级为主机,那么究竟选择哪一台备机,备机之间如何协调,这也是一个复杂的问题。
对于以上问题,目前业界比较主流的解决方案就是引入分布式协调框架,比如ZooKeeper。ZooKeeper通过ZAB算法来解决上述提到的几个问题。ZAB算法,其实是Raft算法的一个变种,我们在分布式基础(四)——分布式理论之分布式一致性:Raft算法中曾介绍过Raft算法,后续在分布式进阶篇中,会深入介绍ZAB算法。
二、数据分散集群
数据分散集群,指多个服务器组成一个集群,但是每台服务器只负责存储一部分数据;同时,为了提升硬件利用率,每台服务器又会备份一部分数据。
数据分散集群中的每台服务器都可以处理读/写请求,但必须有一个角色来负责执行数据分配算法,这个角色可以是独立的一台服务器,也可以是集群自己选举出的一台服务器。
比如,Hadoop分布式文件系统(HDSF),一个HDFS集群由一个Namenode和多个Datanode组成:
-
Namenode: 一个中心服务器,负责管理文件系统的名字空间(namespace),以及客户端对文件的访问;
-
Datanode: 多个数据节点,负责处理客户端的读写请求,在Namenode的统一调度下进行数据块的创建、删除和复制操作。
HDFS暴露了文件系统的命名空间,用户能够以文件形式在上面存储数据。从内部看,一个文件其实被分成了多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的命名空间操作,比如打开、关闭、重命名文件或目录,也负责管理数据块和具体Datanode节点的映射关系。
除此之外,Redis的集群模式也是一种数据分散集群,后续进阶篇我们会详细介绍。
三、总结
数据集中集群 中,客户端只能将数据写到主机; 数据分散集群 中,客户端可以向任意节点读/写数据。正是因为这个关键的差异,决定了两种集群的应用场景不同。
一般来说, 数据集中集群 适合数据量不大,集群机器数量不多的场景。例如,ZooKeeper集群,一般推荐5台机器左右,数据量是单台服务器就能够完全支撑的;
而 数据分散集群 ,由于其良好的可伸缩性,适合业务数据量巨大、集群机器数量庞大的业务场景。例如,Hadoop集群、HBase集群,大规模的集群可以达到上百台甚至上千台服务器。
Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。
它的内容包括:
- 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
- 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
- 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
- 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
- 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
- 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
- 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
- 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw
目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:
想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询
同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。