15 存储的本质 - 状态| 青训营笔记

77 阅读6分钟

这是我参与「第五届青训营 」笔记创作活动的第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的思想设计

硬件反推软件变革十分常见