这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
存储系统
存储系统是一个提供了读写和控制类接口,能够安全有效地将数据持久化的软件。作为后端服务数据的最后一环,存储系统分性能非常敏感,因此其 IO 代码必须尽可能简单以提高性能;存储系统作为数据持久化的提供者,其稳定性和安全性备受重视,因此其错误处理及故障恢复相关逻辑便非常复杂。
除此之外,由于硬件的多种多样,存储系统需要根据硬件不同做出修改。然而在单机系统上仍然难以做到高性能、高可用性和高性价比。此时出现了 RAID(Redundant Array of Inexpensive Disks)技术,解决单块硬盘相较于多块小硬盘性价比低、效率低和可靠性低的问题。
常见的 RAID 方案:
- RAID0:多块磁盘同时写入文件的一部分,总体容量为这些磁盘单独容量的和。无容错设计,任意一块磁盘损坏,全部数据丢失(RAID0 一时爽,数据火葬场)
- RAID1:两块硬盘互为镜像,保证数据的可用性,总体容量为较小的那块磁盘的容量
- RAID01或RAID10:两块磁盘组成一个 RAID0(RAID1),在将两个这样的组合组成RAID0(RAID1)。
- RAID5:由三块磁盘组成,每块磁盘存储一部分数据的同时存储另外两块磁盘的奇偶校验数据。任意一块磁盘损坏,可根据另外两块磁盘的校验数据恢复该磁盘的数据。
数据库
数据库系统分为关系型数据库系统(RDBMS)和非关系型数据库系统(NRDBMS)。“关系”(Relation)指任意元素制成的序偶~~(离散数学老师正在提着刀赶来)~~。
SQL 是用于操纵数据库的一种 DSL(Domain Specific Language),具有便于人类阅读的特点。
关系型数据库是一种存储系统,但在此之外还有其他特性,比如事务(ACID)。非关系型数据库不具有很强的结构性,对事务的支持不一定好,但其结构简单,效率较高。
主流存储产品
单机存储
单机存储系统是指单个计算节点上的存储系统,包括本地文件系统和 key-value 存储两类。
Linux 上的文件系统都遵守统一的 VFS 接口,文件系统的两大数据结构为 inode(Index Node)和 dentry(Directory Entry)。inode 记录文件的元数据等,会被持久化到磁盘上,其总数在创建文件系统时就已确定;dentry 始终位于内存中,记录文件名、inode 指针等。inode 与 dentry 对应关系为 N:1(因为硬链接的存在)。
key-value 系统的常见数据结构是 LSM-Tree,牺牲读取性能以追求更高的写入性能。HDFS便是分布式存储系统的一个代表性产品。
分布式存储
分布式存储系统在单机存储系统基础上实现了分布式协议,涉及到网络通信。
类似 RAID,HDFS 也是在大型设备性价比较低的背景下产生的,追求用大量廉价的小型机获得高性能和高可靠性。HDFS 支持大量数据存储、具有高容错性、弱 POSIX 语义、使用普通 x86 设备运行。
除了 HDFS,,Ceph 也是分布式存储系统的重要产品之一。遵守“一切皆对象”的哲学~~(你是 Java 派来的救兵叭)~~,采用主备复制模型进行数据写入,使用 CRUSH 算法构建分布式模型。
单机数据库
单机数据库是指在单个计算节点上运行的数据库系统,事务在单机内执行。
单机关系型数据库系统著名产品有 Oracle、MySQL 和 PostgreSQL,非关系型数据库常见的有 MongoDB(灵活)、Redis(数据结构丰富,不支持 SQL)和 Elasticsearch(擅长模糊搜索)。
分布式数据库
由于业务规模的变化,为了弹性部署项目,分布式数据库应运而生。
本文若有不足之处,欢迎纠正(≧^.^≦)喵~
我的其他笔记,可在掘金或 Github( github.com/DoudiNCer/I… )阅读