第五届字节跳动青训营Class15笔记 | 青训营笔记

123 阅读7分钟

这是我参与「第五届青训营 」笔记创作活动的第15天

1.经典案例

数据传输

一条用户注册数据

{
    "user_name":"小明"
    "password":"helloworld"
    "password_hint":"coding"
}
graph LR
注册数据 --> 后端服务器-->数据库-->其他系统

数据持久化

  • 校验数据合法性:“小明”是否已经存在
  • 修改内存:用高效的数据结构组织数据
  • 写入存储介质:以寿命&性能友好的方式写入硬件

2.存储&数据库简介

存储系统概览

  • User
  • Medium
  • Memory
  • Network

系统特点

  • 作为后端软件的底座,性能敏感
  • 存储系统软件架构,容易受硬件影响
  • 存储系统的代码,既简单又复杂

存储器层级结构

image.png

由金字塔上层到下层,存储数据的速度递减,寄存器是最快的,其次是缓存,等等......

数据怎么从应用到存储介质

image.png

  • 缓存很重要,贯穿整个存储体系
  • 拷贝很昂贵,应该尽量减少
  • 硬件设备五花八门,需要有抽象统一的接入层

RAID技术

R(Rebundant)A(Array)of I(Inexpensive)D(Disks)

RAID背景

  • 单块大容量磁盘价格>多块小容量磁盘
  • 单块磁盘的写入性能<多块磁盘的并发写入性能
  • 单块磁盘的容错能力有限

数据库概览

关系=集合=任意元素组成的若干有序偶对反应了事物间的联系 关系代数=对关系作运算的抽象查询语言

关系型数据库的特点

关系型数据库是存储系统,但是在存储之外又发展出其他能力

  • 结构化数据友好
  • 支持事务
  • 支持复杂查询语言

非关系型数据库的特点

非关系型数据库也是存储系统,但是一般不要求严格的结构化

结构化数据管理

以本文开头的注册数据为例

写入关系型数据库,以表形式进行管理,非关系型数据库则要以链式结构维护一段不定长的空间。

事务能力

凸显数据库支持事务的优越性 考虑事务的ACID特性,一个事务之内,对于操作保持一致性和隔离性,结构化的数据内保持一致,事务操作的结构化数据之间也保持一致。

image.png

支持复杂查询能力

例:查询名字以xiao开头,且密码提示问题小于10个字的人,并按性别分组统计人数

image.png

数据库的使用方式

Everything is D(Domain)S(Specific)L(Language)

以SQL为例,操作数据的时候要有通过组合能完整操作数据库的DDL语句和DML语句

3.主流产品剖析

单机K-V存储

Linux经典哲学:一切皆文件

  • 文件系统的管理单元:文件
  • 文件系统接口:文件系统繁多,如Ext2/3/4,sysfs,rootfs等,但都遵循VFS的统一抽象接口
  • Linux文件系统的两大数据结构:Index Node & Directory Entry

Index Node:记录文件元数据,如id,大小,权限,磁盘位置等,inode是文件的唯一标识,会被存储在磁盘上的inode总数在格式化文件系统的时候就固定了

Directory Entry:记录文件名、inode指针,层级关系(parent)等,dentry是内存结构,与inode的关系是N:1(hardlink实现)

  • 常见使用方式:put(k,v),get(k,v)
  • 常见数据结构:LSM-Tree,某种程度上牺牲读性能,追求写入性能
  • 拳头产品:RocksDB

image.png

SSTable:磁盘上有序的Table

分布式存储

HDFS:大数据时代的基石

  • 时代背景:专用的高级硬件很贵,同时数据存量很大,要求超高吞吐
  • HDFS核心特点:支持海量数据存储、高容错性、弱POSIX语义、使用普通的x86服务器,性价比高

Ceph

Ceph:开源分布式存储系统里的万金油

  • 一套系统皆支持对象接口、块接口、文件接口,一切皆对象
  • 数据写入采用主备复制模型
  • 数据分布模型采用CRUSH算法:Hash+权重+随机抽签

单机数据库

单机数据库=单个计算机节点上的数据库系统,事务在单机内执行,也可能通过网络交互实现分布式事务

关系型数据库

  • 商业产品:Oracle
  • 开源产品:MySQL&PostgreSQL

关系型数据库的通用组件

  • Query Engine:负责解析Query,生成查询计划
  • Txn Manager:负责事务的并发管理
  • Lock Manager:负责锁相关的策略
  • Storage Engine:负责组织内存/磁盘数据结构
  • Replication:负责主备同步

关键内存数据结构:B-Tree、B+-Tree、LRU List

关键磁盘数据结构:WriteAheadLog(RedoLog)、Page

image.png

树里面每一个节点都是一个Page,用户需要更新数据,就是在更新Page,每更新一个Page,就会生成一条Redo Log来描述对Page进行的操作。

Temp存储一些join或者排序的结果,在全部过程结束之后拼接结果,返回给用户

非关系型数据库

MongoDB、Redis、Elasticsearch三足鼎立

  • 交互方式各不相同
  • schema相对灵活
  • 尝试支持SQL(子集)、事务

image.png

Elasticsearch使用案例

发布过程中:POST form:

{
    "user_name":"xiaoming"
    "content":"c++编程有点难"
    "create_at":"2022-05-01 14:30:00"
}

搜索操作中:requestbody:“编程语言哪个好,哪个难度大”

后端处理搜索内容:

{
    "query":{
        "match":{
            "content":"编程语言,好,难度"
            }
        },
        ...
}

ES进行模糊搜索得到结果,并且自动算出关联程度

从单机数据库到分布式数据库

解决容量问题

  • 单点容量有限,受硬件限制 --> 存储节点池化,动态扩缩容

解决弹性问题

  • CPU资源紧张 --> 搬迁全量数据进行扩容

解决性价比问题

  • 容量不够但是CPU利用率低,可以用于替代的设备性价比不高 --> 共享存储池

更多的优势

  • 单写vs多写
  • 从磁盘弹性到内存弹性
  • 分布式事务优化

4.新技术演进

概览

  • 软件架构变更:Bypass OS kernel
  • AI增强:智能存储格式转换
  • 新硬件革命:存储介质变更,计算单元变更,网络硬件变更

SPDK(Storage Performance Development Kit)

Bypass OS kernel已经成为了一种趋势

  • Kernel Space -> User Space:避免syscall带来的性能损耗,直接从用户态访问磁盘
  • 中断->轮询:磁盘性能提高后,中断次数随之上升,不利于IO性能
  • 无锁数据结构,使用Lock-free queue,降低并发时的同步开销

AI&Storage

AI决策行存/列存,从而达到行列混存的目标

高性能硬件

RDMA网络

  • 传统的网络协议栈需要基于多层网络协议处理数据包,存在用户态和内核态的切换,足够通用但是性能不是最佳
  • RDMA是kernel bypass的流派,不经过传统的网络协议栈,可以把用户态虚拟内存映射给网卡,减少拷贝开销,减少cpu开销

Persistent Memory

  • IO时延介于SSD和Memory之间,约百纳秒量级
  • 可以用作易失性内存,也可以用作持久化介质

可编程交换机

可编程交换机在交换机层对网络包做计算逻辑,在数据库场景下,可以实现缓存一致性协议等

CPU/GPU/DPU

CPU多核化、GPU显存空间增加、DPU异构计算,减轻CPU的workload

总结

本节课程从一条数据的存储过程引入,介绍了存储系统和数据库的概念,根据几种类型的数据库以及linux文件系统来介绍数据库的基本原理,存储系统的文件管理机制等,最后展望了新的技术可能为数据持久化带来的新变化。