1.1 分布式存储概念
分布式存储系统特性:
- 可扩展
- 低成本
- 高性能
- 易用
主要挑战 :数据、状态信息的持久化,要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性。
技术点:
- 数据分布 :如何将数据分布到多台服务器才能保证数据分布均匀?数据分布到多台服务器后如何实现跨服务器读写操作?
- 一致性 :如何将数据的多个副本复制到多台服务器,即使在异常情况下,也能够保证不同副本之间的数据一致性?
- 容错 :如何检测到服务器故障?如何自动将出现故障的服务器上的数据和服务迁移到集群中的其他服务器?
- 负载均衡 :新增服务器和集群正常运行过程中如何实现自动负载均衡?数据迁移过程中如何保证不影响已有服务?
- 事务与并发控制 :如何实现分布式事务?如何实现多版本并发控制?
- 易用性 :如何设计对外接口使得系统容易使用?如何设计监控系统并将系统的内部状态以方便的形式暴露给运维人员?
- 压缩 / 解压缩 :如何根据数据的特点设计合理的压缩、解压缩算法?如何平衡压缩算法节省的存储空间和消耗的 CPU 计算资源?
1.2 分布式存储分类
分布式存储数据结构:
- 非结构化数据 :办公文档、文本、图片、图像、音频、视频
- 结构化数据 :关系数据库中,可以用二维关系表结构表示。结构化数据的模式(Schema,包括属性、数据类型以及数据之间的联系)和内容是分开的,数据的模式需要预先定义。
- 半结构化数据 :如 HTML 文档。自描述的,结构和内容混在一起,没有明显的区分,也不需要预先定义数据的模式结构。
1.2.1 分布式文件系统
以对象形式组织,对象之间没有关联,一般称为 Blob(Binary Large Object,二进制大对象)数据。
分布式文件系统也常作为分布式表格系统 以及分布式数据库的底层存储。
总体看,分布式文件系统存储三种类型的数据:
- Blob 对象
- 定长块
- 大文件
1.2.2 分布式键值系统
用于存储关系简单的半结构化数据,只提供基于主键的 CRUD 功能。
类似传统的哈希表。是分布式表格系统的一种简化实现,一般用作缓存。
** 常见的数据分布技术:** 一致性哈希。
1.2.3 分布式表格系统
用于存储关系较复杂的半结构化数据,支持 CRUD,支持扫描某个主键范围。如:DynamoDB
同一个表格的多个数据行也不要求包含相同类型的列。
1.2.4 分布式数据库
从单机关系数据库扩展而来,用于存储结构化数据。
- MySQL Sharding 集群,
- Amazon RDS,
- 阿里巴巴 OceanBase,
- 腾讯 TDSQL
- Tidb