这是我参与「第五届青训营」伴学笔记创作活动的第 12 天
本节课主要介绍:
三、主流产品剖析
3.1单机存储
文件系统的管理单元:文件
文件系统接口:如:Ext2/3/4,sysfs,rootfs等,但是都遵循VFS的统一抽象接口
Linux文件系统的两大数据结构:
1.Index Node:
记录文件元数据(id、大小、权限、磁盘位置等)
inode是文件的唯一标识,会被存储到磁盘上
inode的总数在格式化文件系统时就固定了
2.Directory Entry
记录文件名、inode指针,层级关系(parent)等
dentry是内存结构
key-value存储:
常见使用方式:put(k,v)&get(k)
常见数据结构:LSM-Tree,追求写入性能
3.2分布式存储:
在单机基础上实现分布式协议
3.2HDFS:
核心特点:
1.支持海量数据存储
2.高容错性
3.弱POSIX语义
4.使用普通x86服务器,性价比高
3.2Ceph
核心特点:
一套系统支持对象接口、块接口、文件接口(一切皆对象)
数据写入采用主备复制模型
数据分布模型采用CRUSH(hash+权重+随机抽签)
3.3单机数据库
Mysql:
关系型数据库的通用组件:
Query Engine——负责解析query,生成查询计划
Txn Manager——事务并发管理
Lock Manager——锁相关的策略
Storage Engine——组织内存/磁盘数据结构
Replication——主备同步
PostgreSQL:
1.关键内存数据结构:
B-Tree
B+-Tree
LRU List等
2.关键磁盘数据结构:
WriteAheadLog(ReddoLog)、Page
3.4非关系型数据库
关系型数据库一般直接使用SQL交互, 而非关系型数据库交互方式各不相同
非关系型数据库的数据结构千奇百怪, 没有关系约束后,schema相对灵活
不管是否关系型数据库,大家都在 尝试支持SQL(子集)和“事务”
Elasticsearch:
面向「文档」存储
文档可序列化成JSON,支持嵌套
存在「index」,index=文档的集合
存储和构建索引能力依赖Lucene引擎
实现了大量搜索数据结构&算法
支持RESTFUL API,也支持弱SQL交互
mongoDB:
面向「文档」存储
文档可序列化成JSON/BSON,支持嵌套
存在「collection.」,collection=文档的集合
存储和构建索引能力依赖wiredTiger引擎
4.0后开始支持事务(多文档、跨分片多文档等)
常用client/SDK交互,可通过插件转译支持弱SQL
redis:
数据结构丰富(hash表、set、Zset、list)
C语言实现,超高性能
主要基于内存,但支持AOF/RDB持久化
常用redis-cli/多语言SDK交互
四、新技术演进
4.1新技术演进一概览
软件架构变更:
Bypass OS kernel
AI增强:
智能存储格式转换
新硬件革命:
存储介质变更
计算单元变更
网络硬件变更
4.2新技术演进一SPDK
1.Kernel Space -User Space
避免syscall带来的性能损耗,直接从用户态访问磁盘
2.中断->轮询
磁盘性能提高后,中断次数随之上升,不利于IO性能
SPDK poller可以绑定特定的cpu核不断轮询,减少cs,提高性能
3.无锁数据结构
使用Lock-free queue,降低并发时的同步开销
4.3新技术演进一Al&Storage
AI领域相关技术,如Machine Learning在很多领域:如推荐、风控、视觉领域证明了有效性
4.4新技术演进一高性能硬件
O1.RDMA网络
传统的网络协议栈,需要基于多层网络协议处理数据包,存在用户态&内核态的切换,足够通用但性能不是最佳 RDMA是kernel bypass的流派,不经过传统的网络协议栈,可以把用户态虚拟内存映射给网卡,减少拷贝开销,减少cpu开销
02.Persistent Memory
在NVMe SSD和Main Memory间有一种全新的存储产品:Persistent Memory
·IO时延介于SSD和Memory:之间,约百纳秒量级
·可以用作易失性内存(memory mode),也可以用作持久化介质(app-direct)
03.可编程交换机
P4 Switch,配有编译器、计算单元、DRAM,
可以在交换机层对网络包做计算逻辑。在数据库场景下,可以实现缓存一致性协议等
04.CPU/GPU/DPU
CpU:从multi-.core走向many-core
GPU:强大的算力&越来越大的显存空间
DPU:异构计算,减轻CPU的workload