微信后台存储架构

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