分布式存储技术:数据分布与数据复制

根据有关统计,我们平均每天发送了5亿条推文、3000亿封电子邮件,每天在Facebook上创建了4 PB的数据,每个连接的汽车都会创建4 TB的数据,进行了50亿次搜索 。此外,一些相对落后的国家及地区还没有接入互联网,所以互联网的用户仍然会呈爆发式增长,互联网下产生的数据也毫无疑问会呈几何倍数增长 。预计到2025年,全球每天将创建463EB的数据 。

分布式存储技术:数据分布与数据复制


面对海量的数据,传统的存储缺点也越来越明显,如扩展性差、单点故障等 。为了克服上述缺点,满足海量数据的存储需求,市场上出现了分布式存储技术 。
本篇文章主要和读者朋友们聊一聊数据分布与数据复制,数据分布是确定数据位置,数据复制是实现数据备份的关键方法 。
数据分布
谈到分布式存储,我们有一个绕不开的概念,那就是负载均衡 。负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性 。简单来说,负载均衡就是将数据合理、有效的分布到各个存储节点,最大限度的利用每个存储节点 。
数据分布,主要就是数据分片,它解决了确定数据位置的问题 。
1.数据分布的设计
在设计分布式存储算法时,我们主要考虑数据均匀、数据稳定、节点异构性、隔离故障域和性能稳定性等几个方面 。数据均匀:
分布式存储一般都是多台设备并行运作,这就要求在存储数据的时候尽量保证数据分配合理,例如说:有100G的存储数据,5个存储节点,就要尽量让每台设备存储20G的数据,而不是让1台设备存储100G,其它4台闲置;同时,当访问的数据量过大时,要保证每个节点的访问量均衡 。举个例子,如果在双十一当天,用户同时访问同一台服务器,阿里的服务器可能会崩坏,所以必须要让服务器分摊用户的访问,而不是让一台服务器执行这些操作 。
数据稳定:
数据的稳定性也是非常重要的一点,关于数据的稳定性,我们同样举例子,当有100G的存储数据,合理的存储在5个节点上,如果有一个存储节点发生了故障,那么这100G的数据是要重新分配到这4个节点上吗?如果这100G的数据重新分配到这4个节点上,可能会让存储的数据不稳定;为了保证数据的稳定性,最好的方法是,保持正常节点存储的数据不改变,而故障节点存储的数据重新分配到正常的节点上 。
节点异构:
不同的硬件设备,性能可能天差地别,如果每台设备分到的数据量、用户访问量都差不多,本质就是一种不均衡 。
隔离故障:
当数据进行备份时,不能让数据及备份数据分布到同一个节点上 。
性能稳定:
数据的存储、查询的效率要有保证,不能因为节点的添加和节点的删除造成性能的下降 。
2.数据分布的方式
我们最常见的数据分布方式有三种:顺序分布、哈希分布和一致性哈希分布 。顺序分布利用顺序分布我们能很容易的将大量的数据分成N片,只需要知道每一片的StartKey和EndKey 。根据分片表我们可以很容易的定位任何一个Key 。分片对于分布式系统来说是一个非常重要的功能,它意味着我们能不能将大量的数据分而治之 。同时我们查找数据时也非常方便,顺序分布是从开始点一条一条往下读,直到结束点 。但是这也让顺序分布存在一些问题,由于它是按照顺序写入和读取,所以实际上只有最后一片在增加或查找,其它的并没有参与工作(例如我们平时的log写入),这时候分布式系统退化成了单节点的系统,再也没什么优势可言 。

推荐阅读