onlineschemachange ddbs n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
百度实习经历报告以及 OnlineSchemaChange 项目和 ddbs 的简介 PowerPoint Presentation
Download Presentation
百度实习经历报告以及 OnlineSchemaChange 项目和 ddbs 的简介

Loading in 2 Seconds...

play fullscreen
1 / 27

百度实习经历报告以及 OnlineSchemaChange 项目和 ddbs 的简介 - PowerPoint PPT Presentation


  • 198 Views
  • Uploaded on

百度实习经历报告以及 OnlineSchemaChange 项目和 ddbs 的简介. chenqi05@baidu.com 2011-10. 百度大厦生活照. 大纲. OnlineSchemaChange 项目 OSC 的背景和需求 OSC 的实现 OSC 可能的问题和改进建议 百度 ddbs 系统 ddbs 的系统架构和功能模块的介绍 ddbs 中的基本策略. 大纲. OnlineSchemaChange 项目 OSC 的背景和需求 OSC 的实现 OSC 可能的问题和改进建议 百度 ddbs 系统 ddbs 的系统架构和功能模块的介绍

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '百度实习经历报告以及 OnlineSchemaChange 项目和 ddbs 的简介' - palmer-bolton


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
onlineschemachange ddbs
百度实习经历报告以及OnlineSchemaChange项目和ddbs的简介百度实习经历报告以及OnlineSchemaChange项目和ddbs的简介

chenqi05@baidu.com

2011-10

slide3
大纲
  • OnlineSchemaChange项目
    • OSC的背景和需求
    • OSC的实现
    • OSC可能的问题和改进建议
  • 百度ddbs系统
    • ddbs的系统架构和功能模块的介绍
    • ddbs中的基本策略
slide4
大纲
  • OnlineSchemaChange项目
    • OSC的背景和需求
    • OSC的实现
    • OSC可能的问题和改进建议
  • 百度ddbs系统
    • ddbs的系统架构和功能模块的介绍
    • ddbs中的基本策略
onlineschemachange
OnlineSchemaChange项目---- 背景和需求
  • 未作修改的Mysql做Schema Change时候的流程:
    • 对源表加读锁或者写锁以阻塞新的访问请求
    • 按照新的schema建立临时目标表
    • 将源表的数据拷贝到临时目标表
    • 将源表改名为临时表,将临时目标表改名为源表 
    • 删除临时表(源表)
    • 释放读锁或者写锁
    • 问题:整个拷表的过程是锁表的;线上业务不可接受!
  • 需求:
    • 对于使用Innodb引擎的表,进行schema change的时候,从功能上看不会影响对该表的读、写访问。
    • MySQL参数中可以配置Schema change 批量拷贝的速度,用来控制Online Schema Change的I/O对线上应用的冲击。
    • 对一个表,可以将多个schema的修改请求合在一个Alter SQL语句中。 当一个schema change正在进行时,对同一个表的后继schema change请求将被阻塞。在当前schema change完成后,后继的schema change请求才会被执行。
    • 对不同表的schema change操作可以并发进行。
slide6
大纲
  • OnlineSchemaChange项目
    • OSC的背景和需求
    • OSC的实现
    • OSC可能的问题和改进建议
  • 百度ddbs系统
    • ddbs的系统架构和功能模块的介绍
    • ddbs中的基本策略
onlineschemachange osc 1
OnlineSchemaChange项目---- OSC的实现1
  • 初始数据结构和运行环境的初始化

需要锁表,但是时间很短的

  • 源表的拷贝(非常耗时的部分)
    • 为了不影响线上业务的IO拷贝一定数量的记录后会睡眠;
    • 在这个过程中对源表的查询访问可正常进行。
    • 在这个过程中,对源表的插入、删除、更改操作也会正常进行,但会被额外的记录在OSC日志中,并且定期刷入磁盘。
  • 在线日志重演
    • 为了不影响线上业务的IO拷贝一定数量的记录(一个block)后会睡眠;
    • 在这个过程中对源表的查询访问可正常进行,对源表的插入、删除、更改操作也会正常进行,但会被额外的记录在OSC日志中,并且定期刷入磁盘。【同上】
  • 离线日志重演
    • 需要锁表;
    • 先处理日志文件中可能存在的记录,再处理内存中的记录。
onlineschemachange osc 2
OnlineSchemaChange项目---- OSC的实现2
  • 前期的判断:
    • 只有需要进行表的拷贝的时候才会触发OSC(像rename table这样的才做就不会触发OSC)
    • 判断是否属于OSC的支持类型:
    • 1、对于表的修改,只能处理增加(删除)一列或若干列。
    • 2、对于所增加的列,必须可为空。
    • 3、对于索引的增删改没有限制。

当schema的变化超出了Online Schema Change当前设计所能处理的范围,则退出,继续MySQL默认的schema change流程。

  • 日志机制:
    • 内存数组+日志文件:内存数组满了之后会刷到磁盘;每次刷到文件的记录,组成一个block,有osc_env->header指定记录条数和大小。
    • 日志重演与操作的添加有互斥锁同步,日志重演的位置会被记录在osc_env->log_file_offset中,它指向下次日志重演的文件偏移。
slide9
大纲
  • OnlineSchemaChange项目
    • OSC的背景和需求
    • OSC的实现
    • OSC可能的问题和改进建议
  • 百度ddbs系统
    • ddbs的系统架构和功能模块的介绍
    • ddbs中的基本策略
onlineschemachange1
OnlineSchemaChange---- 可能的问题和建议
  • Mysqld停掉,log_in_memory[OSC_LOG_CAPACITY]会立即被刷到磁盘吗?【schema-change没有做完,innodb会自动回滚重做】。
  • 两次更改的问题,在旧表中的操作被记录在日志中以后,又会在新表中重演;
  • 暂停拷表的时间间隔osc_io_interval是否可考虑随着线上服务请求的繁忙程度而动态改变;
  • 内存日志记录容量OSC_LOG_CAPACITY是否也可以动态;以便适应复杂的环境;
slide11
大纲
  • OnlineSchemaChange项目
    • OSC的背景和需求
    • OSC的实现
    • OSC可能的问题和改进建议
  • 百度ddbs系统
    • ddbs的系统架构和功能模块的介绍
    • ddbs中的基本策略
slide12
ddbs系统框架 ---- 整体架构

客户端

客户端

5 dbproxy

tablet_server_cluster

tablet_server_cluster

tablet_server

1tablet_server

2 zookeeper

ts_agent

4 ts_agent

管理员

3 cli

slide13
目前在使用的百度产品线
  • 百度百科
  • 音乐电台——百度听
  • Linkcache——百度新闻的缓存
  • Logdata——某产品的日志文件
  • 等等
slide14
ddbs系统框架 ---- 系统接口
  • 支持的命令
    • 有限制select/insert/update/delete/replace/
      • 如果只涉及到单机表,且在同一个ts上,无论多复杂都可以支持。
      • 分布式表,不支持嵌套子查询。
      • 如果是单表单机或者多表单机,支持order by / group by / limit/ 单机事务。
      • 如果是单表多机的情况,支持order by / group by,支持不带offset的limit,不支持分布式事务。
    • 事务命令start transaction/beigin/commit/rollback,不支持分布式事务
    • set命令
    • use命令
  • 不支持的命令
    • prepare,正在开发中…
    • 调用存储过程、 show、kill
    • CREATE 类、ALTER类的DDL命令
slide15
ddbs系统框架 ---- 数据划分
  • 数据划分:在DDBS中,将一张分布式表按照指定的Partition Key和Partition Mode分成多个数据片(称为Tablet),分散在多个数据存储节点中,一般情况下,一个cluster里面只有一个Tablet。
  • Partition Key:是 DDBS 中用于数据划分和定位的属性,该属性是应用创建的分布式表中的一个字段。Partition Key 的选择决定了数据按照哪个字段来进行数据分布和组织,一张分布式表只能有一个 Partition Key。 Partition Key 与 Tablet的索引并无强制对应关系。
  • Partition Mode:是 DDBS 中用于数据划分的方式,常用的数据划分方式包括基于Partition Key 的按范围划分、按散列取模划分、按时间划分、按枚举/列表划分、以及前几种划分方式的组合(称为组合划分)等。
slide16
ddbs系统框架 ---- 数据划分(例子)
  • CREATE DISTRIBUTED TABLE IF NOT EXISTS disIntRange1
  • (
  • intIDINT NOT NULL PRIMARY KEY,
  • name VARCHAR(1000)
  • )ENGINE = InnoDB
  • PARTITION KEY (intIDINT)
  • PARTITION BY RANGE
  • {
  • ([MIN, 1000], 'tablet__fengchao__disIntRange1__0' TO 'tablet_server_cluster__fengchao__1'),
  • ([1001, 10000], 'tablet__fengchao__disIntRange1__1' TO 'tablet_server_cluster__fengchao__2'),
  • ([10001, MAX], 'tablet__fengchao__disIntRange1__2' TO 'tablet_server_cluster__fengchao__3')
  • };
ddbs zookeeper
ddbs各模块功能介绍(zookeeper)
  • zookeeper:主要用于存储元数据,包括表信息、划分信息、权限信息等等。
    • /ddbs/sys_usertsagent的帐户相关信息;
    • /ddbs/machine 集群机器;
    • /ddbs/command_status/clicli登录信息;
    • /ddbs/product/产品名/ tablet_servermysql信息;
    • /ddbs/product/产品名/ tablet_server_clustermysql_cluster信息;
    • /ddbs/product/产品名/ tablet_server_agent管理代理信息;
    • /ddbs/product/产品名/ table 表信息;
    • /ddbs/product/产品名/ tablet 表的分片信息;
    • /ddbs/product/产品名/ dbproxydbproxy的配置信息;
    • /ddbs/product/产品名/ product_user应用用户帐户信息;
ddbs cli
ddbs各模块功能介绍(cli常用命令)

table:create/register single/distributed; truncate; remove; alter distributed;

tablet_server:show; add; set; remove;

tablet_server_agent:show; add; set; remove;

sys_user:show; add; set; remove;

machine:show; add; set; remove;

tablet_server_cluster:show; add; set; remove;

product_user:show; add; set; remove;

dbproxy:show available_dbproxy/dbporxy_conf/dbproxy; set dbproxy_conf;

其它:install ddbs; install product; show product list;

ddbs dbproxy
ddbs各模块功能介绍(dbproxy)

配置文件更新,及重启服务

服务框架

客户端网络:连接,认证,读,写

后端网络:conn_pool管理数据库连接,负载均衡

用户权限认证,连接数管理

日志分析和定期上传

sql协议的实现,mysql internal protocol

sql语句解析:解析sql的类型,各部分

处理请求

sql语句分解:分解原sql到为多个sql语句

sql路由:将分解后的sql转发到相应的ts,包括读写分离;

穿透指定数据库服务器功能

缓存命令处理

结果合并:按不同策略合并结果

ddbs tsagent
ddbs各模块功能介绍(tsagent)

DBA控制命令

传递cli传递过来SQL命令给ts:包括DDL命令、SHOW命令。

监控Tablet Server的运行情况

监控Tablet Server是否存活, 监控主从同步是否正常, 监控Table Server的数据量, 监控Table Server的负载,主从切换等。

监控Tablet Server所在机器的运行情况

检查本机的资源状况,例如:内存情况,网卡流量情况,磁盘空间情况、磁盘I/O情况、CPU 情况,并计算本机的负载估计值。

slide21
大纲
  • OnlineSchemaChange项目
    • OSC的背景和需求
    • OSC的实现
    • OSC可能的问题和改进建议
  • 百度ddbs系统
    • ddbs的系统架构和功能模块的介绍
    • ddbs中的基本策略
slide22
重要策略----主从分离

query->args

当前是否在事务中

上次query在事务中

写操作

读,但时间未到;

读操作

MS_SLAVE

MS_MSTER

load balance
重要策略----load balance
  • 如果当前连接池中有干净的连接实例,那就从中取出。如果没有,或者连接失败了,需要重新建立一个新的连接。
  • 如果一条命令落在主库上,因为只有一个节点,所以不需要负载均衡处理;
  • 如果一条读命令落在从库上,有多个从库可选,那么从中选出 当前连接数/权值(权值是配置的) 最小的一个slave。
tsagent
重要策略----tsagent的单点切换
  • 当检测到master不存在时,开始单点切换(由leader来控制,当前cluster中nodes中id最小的为leader)
  • 查找tinker,并与tinker进行出具补齐;
  • 在slave节点中查找并选举master
      • leader节点向集合R集合查询各个节点的权值,找到权值最大的节点,记为master。
  • 通知R+S新master,R+S各结点都change master到新master
  • 完成单点切换并清理
      • Leader通知master完成切换
      • Mater如果存在parent则尝试加入
      • master写running_info/master
      • master删running_info/status
      • Leader回到S4状态
slide25
重要策略----结果合并
  • 检查结果是否都执行成功;
  • 如果是单机命令,返回单机结果;否则,
  • 对insert, update, replace, delete操作,执行merge_without_result_set,超过500个分片时候,有问题;
  • 对select操作执行merge_with_result_set,具体如下:
slide26
百度实习的收获
  • 1、工程经验——段错误的处理,core文件;
  • 2、做事的专业程度——执行力;
  • 3、与同事的沟通;
slide27
Q&A

谢谢!