- 概念:分布式存储系统是大量普通 PC 服务器通过网络互联,对外作为一个整体提供存储服务
- 分布式存储系统的特性
- 可扩展:通过增加规模线性提升集群性能
- 低成本:基于普通 PC 构建、能够弹性伸缩集群规模
- 高性能:单台机器、整个集群都具备高性能
- 易用:好用的 API、完善的监控、运维工具、方便与其他系统集成
- 分布式系统的挑战,两个领域(分布式系统、数据库)
- 数据、状态信息的持久化
- 数据分布:如何将数据分布在多台机器、如何读写这些机器上的数据
- 负载均衡
- 运行过程中如何实现自动负载均衡
- 新增、减少服务器后如何实现自动负载均衡
- 数据迁移过程中如何不影响已有服务
- 自动迁移和容错
- 如何检测故障
- 如何将故障服务器上的数据和服务迁移到其他服务器 (failover)
- 数据一致性
- 数据如何在多副本间复制
- 异常情况如何保证副本间数据一致性
- 压缩与解压
- 如何设计合理的压缩与解压算法
- 如何平衡压缩与解压算法节省的存储空间与 CPU 开销
- 数据、状态信息的持久化
- 分布式存储系统按数据分类
- 非结构化数据:文件、文本、图像、音频、视频
- 半结构化数据:HTML 文档,通常是自描述的、模式与内容混合在一起、不需要预定义模式
- 结构化数据:二维表结构,模式和内容分开存储、需要预定义模式
- 分布式系统按处理数据类型分类
- 分布式文件系统
- 存储 BLOB 对象、定长块、大文件
- 内部按数据块(chunk)组织数据、每个数据块的大小大致相同
- 通常作为分布式表格系统、分布式数据库的底层存储
- 产品 Haystack、Google File System、Taobao File System、Amazon Elastic Block Store、
- 分布式键值系统:只提供基于主键的 CRUD 功能
- 数据模型:哈希表
- 产品:Taobao Tair、Amazon Dynamo、Memcached
- 分布式表格系统:存储半结构化数据,支持按主键的 CRUD 及按主键范围扫描,支持简单的事务、不支持多表联合查询、多表连接、子查询
- 分布式数据库:存储结构化数据
- MySQL Sharding
- Tidb
- 分布式文件系统