今天写一篇概述的文章,前两天有小伙伴想了解下什么是分布式储存,我这边其实也是一知半解,特意查了下,(可任意转发,以下为自行总结,有大神的小伙伴可以评论我来补充)
分布式存储有多种实现方式
1.副本存储(Replication)(常用储存,1个数据存储在多个节点)
-
原理:将完整的数据副本存储在不同的节点上,通常每个节点都保存完整的数据集。
-
优点:
-
高可用性:某个节点故障时,其他节点仍可提供服务。
-
读取性能高:可以从多个副本并行读取数据。
-
-
缺点:
-
存储开销大:每个副本都需要完整的存储空间。
-
写性能较低:需要同步更新所有副本。
-
-
应用场景:适用于读多写少的场景,如内容分发网络(CDN)、数据库主从复制。
2. 纠删码存储(Erasure Coding)(Ceph储存,以及HDFS用到的存储,不过大集群使用较多)
-
原理:将数据分割成多个块,并通过编码生成冗余块,分散存储在不同节点上。即使部分节点丢失,仍可通过剩余块恢复数据。
-
优点:
-
存储效率高:相比副本存储,纠删码的冗余开销更低。
-
可靠性高:可以容忍多个节点故障。
-
-
缺点:
-
计算开销大:编码和解码需要额外的计算资源。
-
恢复速度较慢:数据恢复时需要读取多个块并解码。
-
-
应用场景:适用于冷数据存储或大规模分布式存储系统,如HDFS、Ceph。
3. 一致性哈希(Consistent Hashing)(这个我也用的很少)
-
原理:使用哈希算法将数据和节点映射到一个环形空间,数据存储在与哈希值最接近的节点上。当节点增减时,只需重新分配少量数据。
-
优点:
-
动态扩展性好:节点增减时数据迁移量小。
-
负载均衡:数据均匀分布在节点上。
-
-
缺点:
-
实现复杂:需要维护哈希环和节点映射。
-
-
应用场景:适用于动态变化的分布式系统,如分布式缓存(Redis Cluster)、分布式数据库。
4. 分布式文件系统(Distributed File System)
-
原理:将文件分割成固定大小的块(如64MB或128MB),并将这些块分散存储在不同节点上。同时维护文件的元数据(如块的位置信息)。
-
优点:
-
支持大文件存储:文件被分块存储,适合处理大规模数据。
-
高吞吐量:支持并行读写。
-
-
缺点:
-
元数据管理复杂:需要高效管理文件块的位置信息。
-
-
应用场景:适用于大数据存储和处理,如HDFS、Google File System(GFS)
5. 对象存储(Object Storage)
-
原理:将数据存储为对象(包括数据、元数据和唯一标识符),并通过分布式系统管理这些对象。对象通常存储在扁平地址空间中。
-
优点:
-
扩展性强:适合海量非结构化数据存储。
-
元数据丰富:支持自定义元数据,便于数据管理。
-
-
缺点:
-
不适合频繁修改:对象存储通常是一次写入、多次读取。
-
-
应用场景:适用于云存储、备份和归档,如Amazon S3、OpenStack Swift。
6. 分布式缓存(Distributed Caching)
-
原理:将热点数据缓存在多个节点上,以加速数据访问。
-
优点:
-
高性能:减少对后端存储的直接访问。
-
可扩展性:支持动态增加缓存节点。
-
-
缺点:
-
数据一致性:需要处理缓存一致性问题。
-
-
应用场景:适用于高并发读场景,如Redis Cluster、Memcached。