狠狠撸

狠狠撸Share a Scribd company logo
百度分布式数据库实践
    肖智文/尹博学
   dba@


                   DTCC2012
分布式数据库

? 产物定位
  ? 尽量保证数据库特性,提升数据规模
  ? 线上低延迟的访问
  ? 满足具有一定复杂关系的数据操作


? 设计原则
  ?   应用访问方式不变
  ?   应用知道数据逻辑分布
  ?   不同访问模式提供的功能不同
  ?   自动发现/人工决定/自动处理




                         DTCC2012
分布式架构
                                     前端APP客户端
                                                                                    管理工具
                                  (libmysqlclient/jdbc)


                                              4.merge,sort,limit
                           1.发送SQL命令
                                                 返回结果

                                                                              Zookeeper Cluster
                                                                                     ------
                                       dbproxy                 拉取数据划分信息       tbl_A 0 -> cluster1
                                                                              tbl_A 3 -> cluster1

            2.SQL命令被拆解
            成多条子请求,
            发送到一个或多
            个cluster  3.返回结果集


Cluster 1
Cluster 1                                                      Cluster n
                                                               Cluster n
                       tbl_A_00                                                       tbl_A_01
              Master   tbl_A_03                                            Master     tbl_A_02
                       tbl_B_07                                                       tbl_B_03




    slave               slave                                      slave                slave




                                                                                                    DTCC2012
数据访问模式
?Scan & Search
?基于Partition Key
  –   单表单机
  –   单表多机
  –   多表单机
  –   多表多机


?不基于Partition Key
  –   单表
  –   多表




                      DTCC2012
数据划分
? 数据划分列
  ? 划分和定位数据,不能更新该字段
  ? 与索引没有关系
  ? 只支持一维


? 实现的划分方式
  ?   范围分断(range)
  ?   散列取模(hash_mod)
  ?   枚举/枚举(list)
  ?   组合模式


? 数据关系
  ? 继承
  ? 绑定




                       DTCC2012
数据拓扑




DTCC2012
事务实现
? 支持的功能
  ? 访问落在同一分片上的请求,由mysql保证
  ? 数据绑定
  ? 小表通过继承


? 不支持
  ? 分布式事务




                            DTCC2012
读写分离
? 事务内的所有语句发往主库执行
? 保证会话一致性                                            离上一次查询
                事务未提交?   No       数据更新?         No   超过主从同步
                                                       延时



                                   Write




                                    Master




                                             Slave
                          Slave

                                                              Read


       新Query



                                                     DTCC2012
数据一致性
? metadata使用zookeeper

? 同一tablet的不同副本之间
  – 最终一致性
  – 会话一致性


? 不同tablet之间

? 不支持分布式事务




                         DTCC2012
系统可用性 - 1
? 元信息(zookeeper)
  – 数据拓扑不能变更
  – 读写功能不受影响


? 接入层(dbproxy)
  – 应用端重试


? 数据层(tablet)
  – 多副本
  – 健康检查
  – 主从切换




                      DTCC2012
系统可用性 - 2
? 心跳
  ? 对每个sharding,在主库上每秒写入当前unix_timestamp
  ? 在副本节点上读取该记录,判断同步延迟和主从同步关系


? 节点健康度
  ?   机器负载
  ?   数据不同步
  ?   数据同步延时超过阀值
  ?   同步恢复后提供读服务


? 副本节点
  ? 通知人工处理
  ? 根据配置的副本数自动添加副本




                                           DTCC2012
系统可用性 - 3

? 主节点故障
      ? 副本节点提升
      ? 副本数保全




       S1                   S4                  S3                    S4
      -----                -----                ----                 -----
       M                    M                    R                    M



S2            S3     S5            S6     S2            S1     S5            S6
---           ----   ---           ----   ---          -----   ---           ----
 R             R      R             R      R            M       R             R




                                                               DTCC2012
数据扩容
? 预防扩容
   – 单机多实例部署
   – 拆分成较多在数据


? tablet 分裂
   ? 基于mysql主从复制


? tablet 迁移

? 数据均衡
   ? 二维划分
   ? 动态路由




                   DTCC2012
管理工具
? Schema管理
  – 扩容
  – DDL


? 配置管理

? 用户管理
  ? 增删用户
  ? 属性修改


? 查询接口




             DTCC2012
MySQL功能扩展 - 1
? online schema change
   ? 只支持innodb




                                DTCC2012
MySQL功能扩展 - 2
? 支持主键查询、更新、删除的mysql引擎
  ? 内存索引
  ? 优化随机写


? 功能
  –   支持schema
  –   snapshot
  –   KV类应用
  –   原子计数


? 性能
  – QPS:6万
  – TPS:4万




                          DTCC2012
应用示例 - 1

? 应用场景
  ? 数据量上百T
  ? 每天更新量几十T


? 问题
  ? 数据导入效率
  ? 吞吐




                 DTCC2012
应用示例 - 2

? 应用场景
  ? 数据量 数T
  ? TPS 百万/秒

? 问题
  ? 并发性能




                 DTCC2012
问题与挑战

? 集群化
  ? 不同应用间的资源隔离
  ? 数据迁移、扩容的
  ? 运维的自动化程度


? 功能
  ? 自动扩容
  ? 自运维
  ? 管理工具




                  DTCC2012
DTCC2012

More Related Content

百度分布式数据实践与进展

  • 1. 百度分布式数据库实践 肖智文/尹博学 dba@ DTCC2012
  • 2. 分布式数据库 ? 产物定位 ? 尽量保证数据库特性,提升数据规模 ? 线上低延迟的访问 ? 满足具有一定复杂关系的数据操作 ? 设计原则 ? 应用访问方式不变 ? 应用知道数据逻辑分布 ? 不同访问模式提供的功能不同 ? 自动发现/人工决定/自动处理 DTCC2012
  • 3. 分布式架构 前端APP客户端 管理工具 (libmysqlclient/jdbc) 4.merge,sort,limit 1.发送SQL命令 返回结果 Zookeeper Cluster ------ dbproxy 拉取数据划分信息 tbl_A 0 -> cluster1 tbl_A 3 -> cluster1 2.SQL命令被拆解 成多条子请求, 发送到一个或多 个cluster 3.返回结果集 Cluster 1 Cluster 1 Cluster n Cluster n tbl_A_00 tbl_A_01 Master tbl_A_03 Master tbl_A_02 tbl_B_07 tbl_B_03 slave slave slave slave DTCC2012
  • 4. 数据访问模式 ?Scan & Search ?基于Partition Key – 单表单机 – 单表多机 – 多表单机 – 多表多机 ?不基于Partition Key – 单表 – 多表 DTCC2012
  • 5. 数据划分 ? 数据划分列 ? 划分和定位数据,不能更新该字段 ? 与索引没有关系 ? 只支持一维 ? 实现的划分方式 ? 范围分断(range) ? 散列取模(hash_mod) ? 枚举/枚举(list) ? 组合模式 ? 数据关系 ? 继承 ? 绑定 DTCC2012
  • 7. 事务实现 ? 支持的功能 ? 访问落在同一分片上的请求,由mysql保证 ? 数据绑定 ? 小表通过继承 ? 不支持 ? 分布式事务 DTCC2012
  • 8. 读写分离 ? 事务内的所有语句发往主库执行 ? 保证会话一致性 离上一次查询 事务未提交? No 数据更新? No 超过主从同步 延时 Write Master Slave Slave Read 新Query DTCC2012
  • 9. 数据一致性 ? metadata使用zookeeper ? 同一tablet的不同副本之间 – 最终一致性 – 会话一致性 ? 不同tablet之间 ? 不支持分布式事务 DTCC2012
  • 10. 系统可用性 - 1 ? 元信息(zookeeper) – 数据拓扑不能变更 – 读写功能不受影响 ? 接入层(dbproxy) – 应用端重试 ? 数据层(tablet) – 多副本 – 健康检查 – 主从切换 DTCC2012
  • 11. 系统可用性 - 2 ? 心跳 ? 对每个sharding,在主库上每秒写入当前unix_timestamp ? 在副本节点上读取该记录,判断同步延迟和主从同步关系 ? 节点健康度 ? 机器负载 ? 数据不同步 ? 数据同步延时超过阀值 ? 同步恢复后提供读服务 ? 副本节点 ? 通知人工处理 ? 根据配置的副本数自动添加副本 DTCC2012
  • 12. 系统可用性 - 3 ? 主节点故障 ? 副本节点提升 ? 副本数保全 S1 S4 S3 S4 ----- ----- ---- ----- M M R M S2 S3 S5 S6 S2 S1 S5 S6 --- ---- --- ---- --- ----- --- ---- R R R R R M R R DTCC2012
  • 13. 数据扩容 ? 预防扩容 – 单机多实例部署 – 拆分成较多在数据 ? tablet 分裂 ? 基于mysql主从复制 ? tablet 迁移 ? 数据均衡 ? 二维划分 ? 动态路由 DTCC2012
  • 14. 管理工具 ? Schema管理 – 扩容 – DDL ? 配置管理 ? 用户管理 ? 增删用户 ? 属性修改 ? 查询接口 DTCC2012
  • 15. MySQL功能扩展 - 1 ? online schema change ? 只支持innodb DTCC2012
  • 16. MySQL功能扩展 - 2 ? 支持主键查询、更新、删除的mysql引擎 ? 内存索引 ? 优化随机写 ? 功能 – 支持schema – snapshot – KV类应用 – 原子计数 ? 性能 – QPS:6万 – TPS:4万 DTCC2012
  • 17. 应用示例 - 1 ? 应用场景 ? 数据量上百T ? 每天更新量几十T ? 问题 ? 数据导入效率 ? 吞吐 DTCC2012
  • 18. 应用示例 - 2 ? 应用场景 ? 数据量 数T ? TPS 百万/秒 ? 问题 ? 并发性能 DTCC2012
  • 19. 问题与挑战 ? 集群化 ? 不同应用间的资源隔离 ? 数据迁移、扩容的 ? 运维的自动化程度 ? 功能 ? 自动扩容 ? 自运维 ? 管理工具 DTCC2012