数据库系统
存储系统
一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件
代码即简单又复杂
对外接口分支少,清晰
异常处理,要全覆盖
软件架构,容易受硬件影响
系统和存储介质之间要有抽象统一的接入层
RAID技术,将单机存储系统做到高性能/高性价比/高可靠性
Redundant Array Of Inexpensive Disks
RAID0,多块磁盘简单组合;条带化存储,提高带宽;没有额外容错设计
RAID1,一块磁盘对应一块额外镜像盘;空间利用率50%;容错能力强
RAID0+1,一组RAID0加上一组RAID1;空间利用率50%;容错能力强;写入带宽好
数据库
关系,任意元素组成的若干有序偶对
关系代数,关系运算的抽象查询语言
SQL,一种DSL,domain-specific language,领域特定语言,方便阅读的关系代数表达式
关系型数据库
是一种存储系统
结构化数据友好
支持事务
支持复杂查询语言
非关系型数据库
不要求严格的结构化
可能支持事务
事务能力
Atomicity 原子性操作
Consistency,执行前后,数据状态一致
Isolation,可以隔离多个并发事务
Durability,持久化
主流产品
单机存储系统,单个计算机节点上的存储软件系统,不涉及网络交互
本地文件系统,Linux一切皆文件
key-value存储,LSM-Tree,牺牲读性能,追求写入性能;RocksDB;追求顺序写入
分布式存储系统,涉及网络交互
分布式文件系统,HDFS,海量数据存储;高容错性;弱POSIX语义;性价比高;Management Node对Storage Node进行管理和路由
分布式存储,Ceph,一切皆对象,支持对象/块/文件接口;主备复制模型;数据分布式模型采用CRUSH算法,一份数据分为多副本进行冗余存储,HASH+权重+随机抽签
单机数据库,单个计算机节点上的数据库系统,事务在单机内执行
关系型数据库,Oracle/MySQL/PostagreSQL,内存树状结构,每一个节点都是一个page,保存在磁盘的page file中
非关系性数据库,Mongodb/Redis/Elasticsearch
分布式数据库
解决容量/弹性/性价比的问题,存储节点池化,动态扩缩容资源
解决多写/内存弹性/分布式事务
演进
架构/AI增强/新硬件
SPDK(Storage Performance Development Kit),Bypass OS Kernal,绕开内核,避免调用内核态,中断调整为轮询,避免上下文切换,无锁数据结构,Lock-free queue
AI/Machine Learning结合数据存储,改变数据存储格式,通过AI决定行存/列存/行列混存
高性能硬件,RDMA网络(新网络协议栈,将用户态内存映射给网卡,减少CPU拷贝开销);Persistent Memory;可编程交换机(P4 Switch配备可计算单元);CPU/GPU/DPU
RDBMS
关系型数据库
Transaction,事务,一组SQL语句组成的一个程序执行单元,体现ACID
Consistency,一致性,业务的合法性
Isolation,两个操作同时对一个对象操作,应该保持隔离,避免互相影响
数据库应该有高并发/高可靠/高可用
DBMS,按照某种数据模型来组织、存储和管理数据的仓库
网状数据库,每个数据都是一个节点,N对N的树形结构,一个父节点可以有多个子节点,一个子节点,可以有多个父节点
层次数据库,树形结构,一个父节点有多个子节点,一个子节点只能有一个父节点
关系数据库,实体和实体的关系通过二维表结构表示
关键技术
sql的执行过程
解析器,解析sql,生成语法树,Abstract Syntax Tree
优化器,生成plan tree
执行器,进行执行
Parser,解析器,解析出语句的执行目标
词法分析,解析关键字,进行语句分类
语法分析,生成语法树
语义分析,检查语句合法性
Optimizer,优化器,选择最优的执行路径
RBO,Rule Base Optimizer,基于规则的优化
CBO,Cost Base Optimizer,基于代价的优化,选择整体并发处理花费最少的时间
Executor,执行器
火山模型,层层算子向下执行,数据向上层层返回,每个算子都是独立的,相互没有耦合;每次计算,都有函数调用,CPU效率不高
向量化,每次返回数据,都是一批数据;CPU Cache命中率更高;利用CPU的SIMD机制(Single Instruction Multi Data,单指令多数据流,一条指令控制多个处理器同时处理)
编译执行,动态编译,将操作过程编译成一个动态执行函数,减少函数调用
InnoDB,存储引擎
In-Memory/On-Disk,内存部分(缓存池)和磁盘部分(元信息/日志文件)
Buffer Pool,每个页面16K存储数据,每个chunk128M,整个Buffer Pool分为instance;HashMap映射位置;LRU机制管理内存空间
Page,16k,存储的最小单位。变长字段列表/NULL值标志位/id信息/
B+ Tree(层高低,减少IO次数),构建索引;页目录中使用二分查找对应的槽,遍历该槽对应分组中的记录找到对应的记录
事务引擎
Atomicity,原子性,通过Undo Log,记录数据的变化的逆逻辑,方便进行回滚
Isolation,隔离性,通过锁,读读共享,写写互斥;MMVC(Multi-Version Concurrency Control,多版本并发控制),读写互不阻塞,降低死锁概率,实现一致性,通过roll ptr,对数据的版本形成链表
Durability,持久化,通过Redo Log,WAL(Write-ahead logging,预写式日志),记录页面变化,通过日志更新到磁盘
实践
大流量
Sharding,数据库分表分库,业务层水平拆分
代理层实现数据路由
突增流量
扩容DB物理节点数量,利用影子表进行压测,通过路由层对请求进行分片,保证集群可以承担预期流量
代理连接池,业务侧/代理侧预热连接池,连接预先缓存
稳定性和可靠性
3AZ高可用,有多个独立的机房,通过日志进行数据同步,进行流量调度和监控报警
HA管理,高可用管理,及时切换宕机节点,自动屏蔽故障宕机节点
Tos对象存储实战
Top/头条 objects storage
对象存储,数量无限制;云原生,按需申请使用;成本低;具有冷热数据分级存储能力
结构
Bucket为一个数据库,里面包含数个对象
支持HTTP接口,支持restful API
适用场景
适用于存储多种静态资源
不适用于结构化数据/关系型数据/KV缓存数据/随机写/Append写/更新频繁
使用
申请Bucket
业务逻辑开发,Restful风格
PUT,上传对象
GET,对象内容
HEAD,对象元信息
DELETE,删除对象
大对象的上传,分部分上传
InitUpload
UploadPart,分块上传
CompleteUpload,整合
分页查看
ListPrefix
测试
字节实践
架构
接入层,接入解析并处理接口请求,租户隔离/数据校验
元信息层,存储对象元信息
存储引擎层,存储对象内容
业务场景
容量型,片源存储/转码,海量/高吞吐/高持久度,需要可扩展性/成本低/持久度高
QPS型,源视频审核中每秒需要抽帧,操作频繁,QPS需可线性扩展
可扩展性
Partition,分治处理,分布式存储
存储/计算/压力都要均匀分布
通过partition Logic,实现负载均衡
持久度
不可靠的硬件/软件/自然灾害/太阳黑子,单节点存储不可靠
Replication,数据复制多份,强吞吐能力,多个副本提供服务
拷贝方式,同步复制/异步复制/半同步复制(写入的节点个数满足指定条件,表示写入成功)
一致性问题,因果(线程A修改过,线程B访问的为最新值)/读写/会话/单调读/单调写(写操作顺序执行)
成本
EC,Erasure Coding,冗余编码,通过校验块可以推断出故障数据块的数据
低冗余度,需要额外计算
EC编码,纠删码,Reed Solomon算法,m个数据库+n个校验块,有多少个校验块就最多可容忍多少个块丢失
多机房EC,分布式EC。一个线程定期扫描数据,比如对数据块和校验块做crc校验,如果发现有数据块或者校验块失效,则启动恢复线程;恢复线程先根据EC组现有的数据情况,从远程或本地获取必要的数据进行解码,恢复失效数据
冷热转换,冷的数据放到便宜的、差的设备
高可用
拆分降低爆炸半径,一个集群拆分成多个集群
镜像灾备,主备Bucket,增量双向同步,进行容灾
未来展望
容量治理
成本优化
大数据生态
稳定性提升
整体架构