这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记。
存储系统
一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统。
存储器层级结构
数据从应用到存储介质
单机存储系统怎么做到高性能/高性价比/高可靠性?RAID
关系型数据库和非关系型数据库都是存储系统
单机存储
单机存储 = 单个计算机节点上的存储软件系统,一般不涉及网络交互
-
本地文件系统
- Linux文件系统两大数据结构:Index Node & Directory Entry
-
key-value存储
- 常见数据结构:LSM-Tree,某种程度上牺牲读性能,追求写入性能。
- RocksDB
-
分布式存储
分布式存储 = 在单机存储基础上实现分布式协议,涉及大量网络交互
HDFS核心特点
- 支持海量数据存储
- 高容错性
- 弱POSIX语义
- 使用普通x86服务器,性价比高
Ceph核心特点
- 一套系统支持对象接口、块接口、文件接口,但是一切皆对象
- 数据写入采用主备复制模型
- 数据分布模型采用CRUSH算法
常见关系型数据库:Oracle、MySql、PostgreSQL 非关系型数据库:MongoDB、Redis、ElasticSearch
跟RDBMS相比,ES能够实现模糊搜索,还能算出关联程度
SPDK
Storage Performance Development Kit
-
Kernel Space -> User Space
避免syscall带来的性能损耗,直接从用户态访问磁盘 -
中断 -> 轮询
- 磁盘性能提高后,中断次数随之上升,不利于IO性能
- SPDK poller可以绑定特定的CPU核不断轮询,减少cs,提高性能
- 无锁数据结构 使用Lock-free queue,降低并发时的同步开销