算法
一文打尽分布式系统的数据分片难题
分布式系统,尤其是分布式存储系统,需要解决的两个最主要的问题即数据分片和数据冗余,下图形象生动地解释了其概念和区别: 图片来源于: 其中数据A、B即属于数据分片,原始数据被拆分成两个正交子集分布在两个节点上。而数据集C属于数据冗余,同一份完整的数据在两个节点都有存储。当然,在实际的分布式系统中,数据分片和数据冗余一般都是共存的。 本文主要讨论数据分片的三个问题: 如何做数据分片,即如何将数据映射到节点上; 数据分片的特征值,即按照数据中的哪一个属性(字段)来分片; 数据分片的元数据的管理,如何保证元数据服务器的高性能、高可用,如果是一组服务器,如何保证强一致性。 所谓分布式系统,就是利用多个独立的计算机来解决单个节点(计算机)无法处理的存储、计算问题,这是非常典型的分而治之的思想。每个节点只负责原问题(即整个系统需要完成的任务)的一个子集,可是原问题如何拆分到多个节点?在分布式存储系统中,任务的拆分即数据分片。 数据分片(segment,fragment,shard,partition),就是按照一定的规则,将数据集划分成相互独立、正交的数据子集,然后将数据子集分布到不同的节