存储系统
存储系统概念
存储系统是计算机系统中用于保存、管理和检索数据的基础设施,用于提供数据的持久化存储、管理和访问功能。它是计算机的核心组件之一,与处理器、内存和网络一起支持信息的存储和传输。
存储系统的功能
- 数据持久化:保障数据在断电或系统故障后能够恢复。
- 数据管理:支持多种存储模型(文件、块、对象)和访问协议。
- 容量扩展:可以根据需求增加存储容量。
- 性能优化:如缓存机制、数据分片和负载均衡。
- 容错机制:提供数据冗余和副本以保障可靠性。
存储技术
RAID
(Redundant Array of Inexpensize Disks)
通过将多个硬盘组合在一起,实现数据的冗余和性能优化
关键目标
- 性能提升:通过并行读写操作提高磁盘的读写速度。
- 数据冗余:通过数据复制或奇偶校验提高容错能力。
- 容量优化:组合多个磁盘的存储容量,提高存储效率。
工作原理
RAID通过以下方式管理磁盘阵列:
- 条带化(Striping) :将数据分块并分布存储在不同磁盘上,提高读写速度。
- 镜像(Mirroring) :在多个磁盘上存储相同的数据,以提供冗余。
- 奇偶校验(Parity) :通过计算校验数据,在发生磁盘故障时重建丢失的数据。
RAID 0
- 多块磁盘的简单组合
- 数据条带化存储,提高磁盘带宽
- 没有额外的容错设计
RAID 1
- 一块磁盘对应一块额外的镜像盘
- 真实空间利用率只有50%
- 容错能力强
RAID 0+1
- 结合了RAID 0 和RAID 1
- 真实空间利用率只有50%
- 容错能力强,写入带宽好
关系是什么(Relation)
关系=集合=任意元素组成的若干有序偶对,反应了事物之间的关系
关系代数=对关系做运算的抽象查询语言
- 交,并,笛卡尔集
SQL = 一种DSL = 方便人类阅读的关系代数的表达形式
关系型数据库
是存储系统,但在存储之外,又发展出其它能力
- 对结构化数据友好
- 支持事物(ACID)
- 支持复杂查询语言(SQL)
非关系型数据库
也是存储系统,但是一般不要求严格的结构化
- 半结构化数据友好
- 可能支持事务
- 可能支持复杂查询语言
- Key-Value 是非关系型数据库的一种存储特性,与其是否是单机存储无直接关联。
事务具有
Atomicity:事务内的操作要么全做,要么不做
Consistency:事务执行前后,数据的状态是一致的
Isolation:可以隔离多个并发事务,避免影响
Durability:事务一旦提交成功,数据保证持久性
主流存储产品
单机存储
单个计算机节点上的存储软件系统,一般不涉及网络交互
- 本地文件系统
- Redis 单机模式
- Berkeley DB
分布式存储
在单机存储基础上实现了分布式协议,涉及大量的网络交互
-
分布式文件系统
-
HDFS
- 堪称大数据时代的基石
- 支持海量的数据存储
- 高容错
- 弱POSIX语义
- 使用普通的X86服务器,性价比高
-
-
分布式对象存储
-
Ceph(也是分布式文件系统)- 一切皆对象
- 数据写入采用主备复制模型
- 数据分布模型采用CRUSH算法
-
单机关系型数据库
- MySQL
- PostgreSQL
通用组件
- Query Engine
- Txn Manage
- Lock Manage
- Storage Engine
- Replication
关键内存数据结构
- B—Tree
关键磁盘数据结构
- RdoLog
单机非关系型数据库
- MongoDB
- Redis(单机模式,它还有集群模式,可以做分布式存储)
- Elasticsearch
分布式数据库
为什么要分布式架构
-
单机数据库的局限性
-
容量限制: 单机数据库存储空间受硬件资源(如磁盘、内存)的限制,无法满足大规模数据存储需求。
-
性能瓶颈:
单机数据库的处理能力有限,难以应对高并发和大数据量的查询或写入需求。
-
可靠性不足: 单点故障(SPOF,Single Point of Failure)问题严重,硬件故障可能导致数据库服务中断。
-
-
分布式架构的优势
通过存储池化实现弹性扩展
- 存储池化:将多个存储节点的资源整合成一个逻辑存储池,动态分配存储和计算资源。
- 水平扩展(Scale-Out) :通过增加节点来扩展容量和性能,而不是受限于单机硬件升级(垂直扩展,Scale-Up)。
- 缩容:根据需求移除冗余节点,降低运营成本。
解决弹性问题
- 自动扩容:在数据量或并发请求增长时,通过增加节点无缝扩展系统。
- 自动缩容:当需求下降时,减少资源使用,提升性价比。
高性价比
- 使用多台廉价商用服务器(Commodity Hardware)代替昂贵的高端服务器。
- 减少因单点故障导致的服务停机损失。