这是我参与「第五届青训营 」笔记创作活动的第16天
课程回顾 存储系统 块 文件 对象 k-v存储
数据库系统 关系型 非关系型
分布式架构 数据分布策略 数据复制协议 分布式事务算法
1经典案例 2发展历史 3关键技术 4企业实践
1经典案例 1.1红包雨
1.2RDBMS事务ACID 事务 Transaction 一组SQL语句组成的一个程序执行单元 满足ACID特性 原子性Atomicity 一致性Consistency 隔离性Isolaton 持久性Durability
1.3红包雨与ACID 1.4 不存在中间状态 每个状态必须合法 多个操作互相不影响 表现为串行 操作更新成功后 结果应永久保留下来不丢失
1.5红包雨与高并发Concurrency
1.6高可靠High Reliability/Availability
1.7大家一起薅羊毛
2发展历史 2.1前DBMS时代-人工管理
2.2-文件系统
2.3DBMS时代 数据库管理系统 网状 层次 关系数据库
2.3.1DBMS数据模型-网状模型 多对多父子节点
2.3.2-层次模型 树型结构 每个子节点只有一个父节点 一对多
2.3.3-关系模型 二维表 实体 实体间联系
2.4DBMS模型 网状模型 优势 能直接描述现实世界 存取效率较高 劣势 结构复杂 用户不易使用 访问程序设计复杂
层次模型 优势 结构简单 查询效率高 可以提供较好的完整性支持 劣势 无法表示M:N的关系 插入、删除限制多 遍历子节点必须经过父节点
关系模型 优势 实体及实体间的的联系都通过二维表结构表示 可以方便的表示M:N关系 数据访问路径对用户透明 劣势 关联查询效率不够高 关系必须规范化
2.5SQL语言 Structed Query Language
2.6历史回顾
3关键技术
3.1一条SQL的一生
SQL引擎 事务引擎 存储引擎
3.2SQL引擎-Parser 词法分析Lexical analysis 语法分析Syntax analysis 语义分析Semantic analyzer
-Optimizer 优化器 基于规则的优化RBO Rule Base Optimizer 条件化简 表连接优化 总是小表先连接 Scan优化 唯一索引 普通索引 全表扫描
基于代价的优化CBO Cost Base Optimizer 时间
-Executor 火山模型 优点: 每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单 缺点: 每计算一条数据有多次函数调用开销,导致CPU效率不高。
向量化 Batch 优点: 函数调用次数降低为1/N;CPU cache命中率更高; 可以利用CPU提供的SIMD(Single Instruction Multi Data)机制。
编译执行 LLVM动态编译执行技术
3.3存储引擎-InnoDB
3.3-Buffer Pool instance chunk LRU
3.3-Page
3.3-B+Tree 页面内: 页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录。 从根到叶:中间节点存储
3.4事务引擎-Atomicity与Undo Log 逻辑日志 记录数据增量变化 保证事务原子性 实现MVCC
3.4-isolation与锁
-Isolation与MVCC 读写不堵塞 降低死锁频率 实现一致性读
-Durability与Redo Log 事务提交页面前写盘 WAL Write-ahead logging
4企业实践 4.1春节红包雨挑战 流量大 流量突增 稳定性
4.2大流量-Sharding 单节点写容易成为瓶颈 单机数据容量上限
解决方案 业务水平进行水平拆分 代理层进行分片路由
实施效果 数据库写入性能线性扩展 容量线性扩展
4.3流量突增-扩容
问题背景 活动流量上涨 集群性能不满足要求
解决方案 扩容DB物理节点数量 利用影子表进行压测
实施效果 数据库集群提供更高的吞吐 保证集群可以承担预期流量
4.4-代理连接池 问题背景 ·突增流量导致大量建联 ·大量建联导致负载变大,延时上升
解决方案 业务侧预热连接池 代理侧预热连接池 代理侧支持连接队列
实施效果 避免 DB被突增流量打死 避免代理和DB被大量建联打死
4.5稳定性&可靠性-3AZ高可用
三机房部署 机房级别容灾 机房级别流量调度
proxy 读写分离,分库分表 限流,流量调度
监控报警 实时监控集群运行状态 提前上报集群风险
HA High Availability 实时监控DB运行状态 宕机快速切换
HA管理 问题背景 .db 所在机器异常宕机.db节点异常宕机
解决方案 ha服务监管、切换宕机节点·代理支持配置热加载 代理自动屏蔽宕机读节点
实施效果 读节点宕机秒级恢复 写节点宕机30s内恢复服务