微信后台存储架构
2020-02-27 156浏览
- 1.
- 2.微信后台存储架构 ! 许家滔 sunnyxu@tencent.com 微信产品部 -基础平台组
- 3.⼤大纲 微信通⽤用存储系统(Quorumkv) ! 前⾔言(需求背景) ! 系统概况 ! 系统架构 (强⼀一致性协议,存储模型,分⽚片) ! 真实系统
- 4.前⾔言- 微信分布 上海 天津 深圳 ⾹香港 加拿⼤大 … ! 同城多园区分布
- 5.系统概况 数据存储基础设施 分布式强⼀一致 同城园区级容灾 ⽀支持类SQL查询
- 6.系统概况 mem ssd,sas 50+ 业 务模块 核⼼心存 储模块
- 7.系统架构 - 背景 A.分布式问题收敛 后台逻辑模块专注逻辑,快速开发 可能读取到过时的数据是个痛点 需要看到⼀一致的数据
- 8.系统架构 - 背景 B.内部定义 数据拥有两个以上的副本 ! 如果成功提交了变更,那么不会再返回旧数据
- 9.系统架构 - 推演 1.增加⼀一个数据
- 10.系统架构 - 推演 2.序列号发⽣生器,偏序 约束:只能有⼀一个client操作 client有解决冲突的能⼒力 问题转移:client如何分布?
- 11.系统架构 3.修改集群中⼀一个指定key的value 1)覆盖它 2)根据value的内容做修改 if value = 1 then value := 2
- 12.系统架构 1.通⽤用解法: 1) paxos算法 ⼯工程难度 ! ⼀一切可控
- 13.系统架构 - 分布算法设计 2) Quorum算法 (2011) 在单个key上⾯面运算 真实系统约束 类paxos⽅方案,简化
- 14.系统架构 - 分布算法设计 ! 为每次变更选举(by key) ! 算法过程 提议/变更/同步/⼴广播
- 15.系统架构
- 16.系统架构 - 写流程
- 17.系统架构 - Replication & Sharding 权衡点 ! ⾃自治,负载均衡,扩散控制 replication -> relation ! 容灾低消 ! 同城(上海)多数派存活 三园区(独⽴立供电,独⽴立。。) !
- 18.系统架构 - Replication
- 19.系统架构 - Replication
- 20.系统架构 - Sharding ⼀一组kv6为⼀一个单位 ! 1.⼈人⼯工分段 局部扩容,影响收敛 ! 2.均匀分布 指定分段 hash32(string) 翻倍扩容 ! 3.⼀一致性哈希 具体实现? ! !
- 21.系统架构 - 概览 1.业务侧快速开发 存储需要提供强⼀一致性 丰富的数据模型⽀支持 (结构化/类SQL/KV) 条件读,条件写 ! 2.业务增长迅速,系统要能够⽅方便地横向扩容 ! 3.设备故障/短时节点失效成为常态,容灾⾃自动化,主 备可写⽆无需⼈人⼯工介⼊入 ! 4.⼩小数据 !
- 22.系统架构 - 概览
- 23.系统架构 - 存储模型 纯内存 ! Bitcask ! ⼩小表系统 ! LSM-tree
- 24.系统架构 - bitcask
- 25.系统架构 -⼩小表系统 解决写放⼤大问题 ! 数据按变更聚集存储 Affected 1 ! ChangeTable (1+2+…+ n-1 + total) / n ! 分裂与合并
- 26.系统架构 - 数据流动 ⾃自动化迁移 ! 节点同时做代理 ! 合并磁盘io
- 27.真实系统 - 同步流量 同步流量 ! 数据 vs 操作 ! 幂等 ! 保底策略
- 28.真实系统 - 通信包量 动态合并 100k qps 200% - 10% ! 权衡与估算 ! 设计要点
- 29.真实系统 - 吞吐量 异步化 ! 复杂度 ! libco
- 30.真实系统 - ⾃自动修复系统 不要让错误累积 ! 全量扫描
- 31.其他 bitcask的⼀一些变化 ! 内存限制 ! 全内存
- 32.Q&A sunnyxu@tencent.com