这是我参与「第五届青训营 」笔记创作活动的第15天
1经典案例
2存储&数据库简介
3主流产品剖析
4新技术演进
1经典案例 -数据的产生 -数据的流动
注册数据-后端服务器-数据库-其他系统
-数据的持久化
校验数据合法性-修改内存-写入存储介质
-潜在的问题
数据不丢 多人同时修改 别的存储系统 结构化数据及? 操作方式 编程语言
2存储&数据库简介 2.1存储
-系统概览 提供了读写、控制类接口 俺去那有效把数据持久化的软件
用户User 介质Medium 内存Memory 网络Network
-系统特点
性能敏感 代码 既简单又复杂 易受硬件影响
-存储器层级结构
-数据怎么从应用到存储介质 缓存很重要 贯穿整个存储体系 拷贝很昂贵 尽量减少 硬件五花八门 抽象统一的接入层
-RAID技术
Redundant Array Inexpensive Disks
价格 性能 容错能力
2.2数据库
关系型 非关系型数据库
关系=集合=任意元素组成若干有序偶对 反映事物间关系
关系代数=对关系作运算的抽象查询语言
SQL=一种DSL=方便人类阅读的关系型代数表达形式
-关系型数据库特点 存储系统 其他能力 结构化数据友好 支持事务(ACID) 支持复杂查询语言
-非关系型特点 存储系统 不要求严格结构化 半结构化数据友好 可能支持事务 可能支持复杂查询语言
2.3数据库VS经典存储-结构化数据管理 用户数据 写入关系型数据库 以表达式管理 写入文件 自行定义管理结构
-事务能力 事务特性 Atomicity 全做/不做 Consistency 执行前后 数据状态一致 Isolation 隔离多个并发事务避免影响 Durability 一旦提交成功 数据保持永久性
-复杂查询能力
Domain Specific Language->maybe SQL
3主流产品剖析
3.1单机存储 3.2分布式存储 3.3单机关系型数据库 3.4非关系型 3.5分布式数据库
3.1单机存储-概览 单个计算机节点上存储软件系统 一般不涉及网络交互 本地文件系统 key-value存储
-本地文件系统 Linux经典哲学 一切皆文件
文件系统接口 都遵循VFS的统一抽象接口 Index Node &Directory Entry
-key-value存储 常见使用方式:put(k,v)&get(k) 常见数据结构:LSM-Tree牺牲读性能 追求写入性能 拳头产品:RocksDB
3.2分布式存储-概览 实现了分布式协议 分布式文件系统 分布式对象存储
-HDFS 堪称大数据时代的基石
高级硬件很贵 数据存量很大 超高吞吐
核心特点 支持海量数据存储 高容错性 弱POSIX语义 使用普通x86服务器 性价比高
-Ceph 开源分布式存储系统里的万金油 支持对象 块 文件接口 一切皆对象 数据写入采用主备复制模型 数据分布模型采用CRUSH算法 HASH+权重+随机抽签
3.3单机数据库-概览 事务在单机内执行 也可能通过网络交互实现分布型事务 关系性型 非关系型数据库
-关系型数据库 商业产品Oracle 开源产品MySQL PostgreSQL
关系型数据库通用组件 Query Engine 解析query 生成查询计划 Txn Manager 事务并发管理 Lock Manager 锁相关策略 Storage Engine 组织内存/磁盘数据结构 Replication 主备同步 关键内存数据结构 B-Tree、B+-Tree、LRU List 关键磁盘数据结构 WriteAheadLog(RedoLog) Page
-非关系型数据库 MongoDB、Redis、Elasticsearch
交互方式各不相同 没有关系约束后 schema相对灵活 都在尝试SQL(子集)和事务
Elasticsearch 面向文档存储 可序列化成JSON支持嵌套 存在index 存储和构建索引能力依赖lucene引擎 实现大量数据结构&算法 支持RESTFUL API支持弱SQL交互
mongoDB 面向文档存储 可序列化成JSON/BSON支持嵌套 存在collection 依赖wiredTiger引擎 4.0后支持事务 多文档跨分片 常用client/SDK交互 插件转译支持弱SQL
Redis 数据结构丰富hash表 set zset list 超高性能 基于内存 支持AOF/RDB持久化 常用redis-cli/多语言SDK交互
-Elasticsearch使用案例 擅长模糊匹配 跟RDBMS相比 ES天然能做模糊搜索 还能自动算出关联程度
3.5从单机到分布式数据库 问题 挑战 容量 弹性 性价比
-解决容量问题 单点容量有限 受硬件限制 存储节点池化 动态扩缩容
-解决弹性问题 -解决性价比问题
-More to Do 单写 多写 磁盘弹性 内存弹性 分布式事务优化
4 新技术演进 -概览 软件架构变更 Bypass OS kernel AI增强 智能存储格式转换 新硬件革命 存储介质变更 计算单元变更 网络硬件变更
-SPDK Storage Performance Development Kit Kernel Space->User Space 避免syscall带来的性能损耗 直接从用户态访问磁盘 中断->轮询 磁盘性能提高后中断次数随之上升 不利于IO性能 SPDK poller可绑定特定cpu核不断轮询 减少cs提高性能 无锁数据结构 Lock-free queue 降低并发操作时同步开销
4.3-AI&Storage 数据存储格式转换 行列混存
-高性能硬件 1RDMA网络 kernel bypass流派 用户态虚拟内存映射给网卡 减少拷贝开销 减少cpu开销
2Persistent Memory 百纳秒量级 可用作易失性内存 也可用作持久化介质
3可编程交换机 可实现缓存一致性协议
4CPU/GPU/DPU CPU:multi-core走向many-core GPU:算力 显存空间 DPU:异构计算 减轻CPUworkload
总结 存储系统 块存储:存储软件栈里的底层系统,接口过于朴素 文件存储:日常使用最广泛的存储系统,接口十分友好,实现五花八门 对象存储:公有云上的王牌产品,immutable语义加持 key-value存储:形式最灵活,存在大量的开源/黑盒产品
数据库系统 关系型数据库∶基于关系和关系代数构建的,一般支持事务和SQL访问,使用体验友好的存储产品 非关系型数据库:结构灵活,访问方式灵活,针对不同场景有不同的针对性产品
分布式架构 数据分布策略︰决定了数据怎么分布到集群里的多个物理节点,是否均匀,是否能做到高性能 数据复制协议∶影响IO路径的性能、机器故障场景的处理方式 分布式事务算法∶多个数据库节点协同保障一个事务的ACID特性的算法,通常基于2pc的思想设计
硬件反推软件变革十分常见