知识卡片
数据集中集群:规模扩大带来的三重复杂性,及ZooKeeper的应对
内容
主备、主从、主主架构都隐含一个假设:单台主机能存下所有数据,但硬件存储能力再怎么发展也追不上业务数据的增长速度(早在2013年Facebook就有2500亿张照片、共250PB数据、每天新增3.5亿张),单机撑不住时就需要多台服务器组成集群——所谓”集群”,数量上至少要3台起(区别于主备主从这类双机架构)。按机器角色划分,集群分为数据集中集群和数据分散集群两类。数据集中集群本质上和主备/主从架构相似,可以理解为”1主多备”或”1主多从”——数据只能往主机写,读操作则可以参照主备/主从的思路灵活安排;但因为机器数量更多,复杂度整体上一个台阶,具体体现在三点:一是主机往多个备机复制数据不再是单一通道,而是多条复制通道,既会增大主机复制的压力,也可能导致各个备机之间数据互不一致,需要额外做备机间的一致性检查和修正;二是原本只有一台备机需要判断主机状态,现在变成多台备机各自判断,不同备机的判断结果完全可能不一致,如何处理这种分歧本身就很复杂;三是主机故障后,理论上多台备机都具备升级为新主机的能力,但实际只能允许一台真正升级,选哪一台、备机之间怎么协调,也是个复杂问题。开源的数据集中集群典型代表是ZooKeeper,它靠ZAB算法解决了上述三个问题,但ZAB算法本身的复杂度也很高。数据集中集群和后续要讲的数据分散集群应用场景不同:数据集中集群适合数据量不大、集群机器数量也不多的场景(如ZooKeeper集群一般推荐5台左右,数据量单台服务器就能扛住);数据分散集群因为可伸缩性更好,适合数据量巨大、集群规模庞大的场景(如Hadoop、HBase集群,大规模时能到上百上千台服务器)。
结构图:
flowchart TB
A["数据集中集群(1主多备/多从)"]
A --> B["复杂点①多条复制通道<br/>增大主机压力+可能导致多备机间数据不一致"]
A --> C["复杂点②多备机各自判断主机状态<br/>判断结果可能互相矛盾"]
A --> D["复杂点③主机故障后<br/>多台备机都能升级,但只能选一台<br/>如何协调是难题"]
B --> E["ZooKeeper用ZAB算法解决以上问题<br/>但ZAB本身复杂度很高"]
C --> E
D --> E
E --> F["适用场景:数据量小/机器数少<br/>如ZooKeeper集群推荐约5台"]
参考来源
- 位置:《从零开始学架构》第26讲《高可用存储架构:集群和分区》"数据集群"之"数据集中集群"(源文件:_epub-src/OEBPS/text00002.html)
- 结论依据:原文说明"主机如何将数据复制给备机……主机故障后,如何决定新的主机"三点复杂性,及"目前开源的数据集中集群以 ZooKeeper 为典型,ZooKeeper 通过 ZAB 算法来解决上述提到的几个问题,但 ZAB 算法的复杂度是很高的""数据集中集群适合数据量不大,集群机器数量不多的场景",直接支撑本卡片结论与结构图。
- 原始内容:主机如何将数据复制给备机……备机如何检测主机状态……主机故障后,如何决定新的主机……目前开源的数据集中集群以 ZooKeeper 为典型,ZooKeeper 通过 ZAB 算法来解决上述提到的几个问题。