存储与数据库
01. 经典案例
一条数据从产生,到数据流动,最后持久话的全生命周期
小明同学下载了新APP,注册一个账号
当他按下**[注册]**按钮后,数据从无到有地产生了,并且在 数十/数百 毫秒内向APP的后端服务器飞奔而去。
数据的流动
数据的持久化
不要忽略了硬件的寿命
潜在的问题
- 数据库怎么保证==数据不丢==?
- 数据库怎么处理==多人同时修改==的问题?
- 为什么用数据库,除了数据库还能存到==别的存储系统==吗?
- 数据库只能处理==结构化数据==吗?
- 有哪些操作数据库的==方式,==要用什么==编程语言==?
这些问题都会在后面的讲解中 进行回答
02. 存储&数据库简介
数据库和存储系统背景知识,它们是什么,有哪些特点?
系统概览
什么是存储系统?
一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统。
包含 用户 与 介质
要提供给用户使用,要把数据最终持久化到存储介质中。
为了设计性能高效,操作方便 还需要和内存打交道
为了开发非单机的系统,还需要和网络编程打交道
系统特点
-
作为后端软件的底座,==性能敏感==
很多架构都是有状态,涉及大量的、频繁的、并发的
-
存储系统==代码,即‘简单’又‘复杂’==
简:在IO路径上的 读写 不能太复杂,不能有很多分支,导致系统性能低下。
杂:要考虑到多种异常情况,应对软件、硬件可能出现的故障。
-
存储系统软件架构,==容易受硬件影响==
存储系统往下就是 与硬件打交道的,如果硬件出现变革,软件也必须出现相应的变革。
存储器层级结构
如下金字塔结构 硬件方面
数据怎么从应用到存储介质
硬件的写入很极端的话(一次只能写1Byte),就需要引入软件层面的缓存。
从用户态到内核态再到持久化 介质上,很有可能会经过多次数据的拷贝,拷贝是需要消耗CPU性能的。
RAID 技术
Q:单机存储系统怎么做到 ==高性能 / 高性价比 / 高可靠性== ?
A:R(edundant) A(rray) of l(nexpensive) D(isks)
出现的背景 来源于人类 对性价比的极端追求
单块大容量磁盘的==价格== > 多块小容量磁盘
单块磁盘的写入==性能== < 多块磁盘的并发写入性能
单块磁盘的==容错能力==有限,不够安全
RAID0
多块磁盘的 简单组合,数据在多块磁盘上 条带化存储。==没有额外的容错设计==
写入性能极高,但没有容错
RAID0 一时爽,数据火葬场
RAID1
一块磁盘对应一块额外的镜像盘
50%的空间利用率
容错能力强
RAID0 + 1
结合了RAID0 和 RAID1
空间利用率50%
容错能力强,写入带宽大
假如有四块磁盘,先两两组成RAID0,再把两组用RAID1组合。
或者 反转也行
----以上为 2.1 存储系统
----以下为 2.2 数据库
概览
==关系==(Relation) 是什么
Edgar.F.Codd于1970年提出==「关系模型」==
关系代数 = 对关系作==运算的抽象查询语言==
交、并、笛卡尔积……
关系 = ==集合== = 任意元素组成的若干有序偶对反应了事物间的关系
SQL = —种DSL = ==方便人类阅读==的关系代数表达形式
关系型数据库特点
是存储系统,但又发展出==其他能力==
非关系型数据库特点
也是存储系统,但==一般不要求严格的结构化==
数据库 vs 经典存储
结构化数据管理
事务能力
复杂查询能力
sql 很强哦
03. 主流产品剖析
主流存储 & 数据库 系统架构,经典产品剖析
这是一个很大的章节,本章会讲大量的存储产品、数据库产品,==千万不要==把他们搞混,也千万不要把存储与数据库的特点搞混。
3.1 单机存储
概览
==单机存储=单个计算机节点上的存储软件系统 一般不涉及网络交互==
本地文件系统
Linux经典哲学:==一切皆文件==
key-value 存储
世间一切皆key-value
------- key是你身份证,value是你的内涵 :)
常见使用方式: put(k, v) & get(k)
常见数据结构: LSM-Tree,某种程度上牺牲 读性能,追求写入性能
数据结构分为两部分 :内存部分 与 磁盘部分
不管是内存还是磁盘 都遵循顺序操作,当内存MemTable满了后,就变为灰色的Immutable MemTable,过一段时间,或者是一定条件触发将会顺序写入到磁盘上的SSTable(SortedStringTable),当Level0满后下刷到Level1,不断向下刷。
如果要读一个最新版本的数据,要读多层。
3.2 分布式存储
概览
分布式存储=在单机存储基础上实现了分布式协议,涉及大量网络交互
涉及到了 大量的网络交互,所以重点关注网络交互的有效性与网络交互的性能
分布式存储 - HDFS
HDFS : 堪称大数据时代的==基石==
提出是基于Google的一篇开源的paper
时代背景:专用的高级硬件==很贵==,同时数据存量==很大==,要求超高==吞吐==
核心特点:
-
支撑==海量数据存储==
以文件的形式提供给用户进行读写
-
==高容错性==
使用的硬件是一些比较便宜的、通用的,且故障率比专用的硬件高一两个数量级
-
弱==POSIX==语义
-
使用普通x86服务器,==性能比高==
分布式存储 - Ceph
开源分布式存储系统里的 ==[万金油]==
核心特点
-
一套系统支持对象接口、快接口、文件接口,但是==一切皆对象==
-
数据写入采用==主备复制模型==
-
数据分布模型采用==CRUSH==算法 ==(HASH + 权重 + 随机抽签)==
为了保证数据的可靠性会产生3个副本,在伍莉服务器上做存储,比如有100台服务器,这3个副本要放在哪3台上。
3.3 单机数据库
单机数据库 = 单个计算机节点上的数据库系统
关系型数据库
非关系型数据库
MongoDB、Redis、Elasticsearch 三足鼎立
Elasticsearch使用案例
==天然支持== 模糊搜索
3.5 从单机到分布式数据库
解决容量问题
单点容量有限,受硬件限制
-------------》
存储结点池化,动态扩缩容
diao!
动态扩缩容 database无感知哦
解决弹性问题
在业务发展后,对资源的需求增加
灵活应对资源需求变化
解决性价比问题
存储池 动态扩容,database不用担心。
More to Do
04. 新技术演进
老系统结合新技术,如何持续演进走向新生?
新架构? | 新硬件? | 新理论? | 人工智能?
概览
我们的软件架构需要一定的变更,现在的架构已经很多年没有大的变革。
近年来出现了很多新的技术,值得我们重点探索。
AI在存储数据库 领域还相对受限,在学术界和工业界暂时还没有特别惊艳的。
硬件变更很重要。
SPDK
Bypass OS kernel已经成为一种趋势
AI & Storage
高性能硬件
总结
很到位,很好。
==在存储&数据库领域,硬件反推软件变革十分常见!==
==在存储&数据库领域,硬件反推软件变革十分常见!==
==在存储&数据库领域,硬件反推软件变革十分常见!==
课后作业
可期
ppt 参考资料
[1]en.wikipedia.org/wiki/Memomy…
[2]《The Linux Programming Interface》 Chapter 13 FILE VO BUFFERING
[3]www.supportsages.com/ceph-part-3…
[5]spdk.io