数据库系统与TOS对象存储实战|青训营笔记

145 阅读8分钟

数据库系统

存储系统

一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件

代码即简单又复杂

对外接口分支少,清晰

异常处理,要全覆盖

软件架构,容易受硬件影响

系统和存储介质之间要有抽象统一的接入层

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,增量双向同步,进行容灾

未来展望

容量治理

成本优化

大数据生态

稳定性提升

整体架构