带你认识存储的本质 | 青训营笔记

83 阅读5分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 17 天

主要内容

这节课主要学习了存储系统的相关知识。包括存储系统的相关概念、RAID技术,数据库的概念,并且了解了主流的数据库产品和存储系统产品,最后了解了新技术存储系统的影响。

详细内容

做存储系统相关工作的人要格外注意硬件的演变。

存储和数据库介绍

存储系统

存储系统:一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件(简化的定义)。

存储系统会跟介质、内存、网络打交道。 其特点是性能敏感,既“简单”又“复杂”,且软件架构易受硬件影响。既“简单”又“复杂”指存储系统在IO的路径上代码要简单,在错误、异常处理等路径上代码要复杂。软件要根据硬件的发展及时做出调整,甚至会把代码整个推翻,重新开发一套。

存储器的层级结构是金字塔型的。其中缓存很重要,是贯穿整个存储体系的。

RAID技术:为了让单机存储系统能够做到高性能、高可靠性,因此产生了RAID(Redundant Array Of Inexpensive Disks)。

其背景是单块大容量磁盘的价格大于多块小容量磁盘。
学习了RAID 0RAID 1

RAID 0就是多块磁盘的简单组合,但是没有任何额外的容错设计。其优点是性能高,但容错能力差。
RAID 1正好相反,它是为了容错,一块磁盘对应一块额外的镜像盘,磁盘利用率低。之后又产生了RAID 0+1,结合了两者的特点,其写入性能好,但磁盘使用率仍然为50%。

数据库

数据库有关系型和非关系型。关系,最早是Edgar提出的关系模型,关系反应了事物间的联系,关系代数就是对关系作运算的抽象查询语言。SQL是一种方便人类阅读的关系代数表达式。

关系型数据库是存储系统,但又有其他的能力,其对结构化数据友好,支持事务,支持复杂查询语言。 非关系型数据库是存储系统,但不要求严格的结构化,对半结构化数据友好,不一定支持事务,也不一定支持复杂查询语言(取决于产品自身)

将数据写入关系型数据库中往往是以表的形式进行管理,使用较为简单,而将其写入文件中,需要自行定义管理的结构。关系型数据库最强的地方就在于支持ACID。用经典存储去实现ID较为困难。关系型数据库实现复杂查询较为简单,而经典存储要实现相同的功能就较为困难(需要自己去写实现逻辑)
通常我们通过DSL(比如说SQL)来使用数据库。

主流产品

该节主要学习了单机存储、分布式存储、单机关系数据库、单机非关系数据库、分布式数据库,要注意进行区分,不能把特点记混。

单机存储

单机存储是指单个计算机节点上的存储软件系统,一般不涉及网络交互。主要学习了本地文件系统和单机的K-V存储。
在Linux中一切皆文件,其文件管理系统的最小单元就是文件。有多个文件系统,ext2/3/4,sysfs等。 其两大数据结构为Index Node和Directory Entry。Index Node和Directory Entry是n比1的关系。
K-V存储,常见的使用方式是put(k,v)和get(k,v)。其常见的数据结构是LSM-Tree,这个数据结构的特点是追求写入性能,牺牲读取性能。其产品之一为RocksDB。

分布式存储

分布式存储是指在单机存储系统基础上实现了分布式协议。其经典产品为分布式文件存储系统和分布式的对象存储系统。
分布式文件存储系统学习了HDFS。 HDFS的产生背景是专用的高级硬件很贵,同时数据存量很大。HDFS的特点是支持海量数据,具有高容错性,性价比高。在HDFS基础上,产生了Hadoop体系。
Ceph是开源分布式存储系统的万金油。其认为一切皆对象,其数据分布模型采用CRUSH算法。该算法的核心HASH+权重+随机抽签。老师说感兴趣的话可以看看Ceph的源码。

单机数据库

单机数据库是在单个计算机节点上的数据库系统。学习了关系型和非关系型数据库。

其中关系型数据库商业产品Oracle称王,开源产品有Mysql和Postgresql。关系型数据库的组件有Quary Engine, txn Manager, Lock Manager, Storage Engine, Replication,分别负责解析query,事务并发管理,锁相关,内存、磁盘数据结构,主备同步。
内存数据结构有B-TREE,B+-TREE,LRU list等,磁盘数据结构有Page,WriteAheadLog等。

非关系型数据库是MongoDB,Redis和Elasticsearch三足鼎立。并学习这三种各自的特点。

分布式数据库

由于在容量、弹性、性价比等方面遇到问题,因此引入了分布式架构。用分布式的池化解决容量问题、弹性问题和性价比问题。解决这些基础问题后,还面临多写、内存弹性伸缩、分布式事务优化等问题。

新技术介绍

目前有硬件架构演变、ai、以及新的硬件变更(存储介质、计算单元、网络硬件)。之后学习了SPDK、AI、Storage的影响。高性能硬件包括RDMA网络、Persistent Memory、可编程交换机等。

总结

经过这节课的学习,主要是学习了存储系统与数据库的关系,以及当下主流的存储系统和数据库有哪些,以及它们的特点。后续还需要抽空阅读一下Ceph的源码。