AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

赶集网SQL自动上线 by 董泽润

发布者 devops
发布于 1436837289220  浏览 5171 关键词 DevOps, 数据库 
分享到

第1页

自动化运维-SQL自动上线

董泽润@赶集网



第2页

主要内容

•DBA的职责  •我们的痛点  •我们的实践  •改进及畅想



第3页

DBA的职责-工匠

• 提升数据库单机性能  -软硬件优化 

• 优化架构,应对海量数据  -分库分表中间件  -服务化,各模块解耦 

• 自动化运维,提高工作效率,减少重复工作  • 高可用,做到N个9



第4页

DBA的职责-审核人员

• 数据库上线 DDL 变更  • 日常 SQL 上线  • 慢查询监控及优化  • 业务监控及拆分



第6页

我们的痛点-标准如何落地

DDL标准

RDR急线D:,!:欧 !修紧非巴!复常急~!b上紧~ug



DD标下BBA准不A:,为:…打例不恶…回符心. - 合,-!



第7页

我们的痛点-业务快速迭代



赶集二 手车



赶集好⻋车



招聘节



本地⽣生活



易洗车



放心房



第8页

我们的痛点-人员变动频繁



这是最好的时代



第9页

我们的痛点

人是最不稳定的因素



第10页

我们的实践

• 引入项目管理工具 JIRA



第11页

我们的实践-JIRA



第12页

我们的实践-JIRA



第13页

我们的实践-JIRA

•优点  -强大的任务管理与跟踪系统  -无限制的工作流 

•缺点  -过于重量级  -相比较严格上线,任务描述过于模糊  -DBA 要改写不符合规范的上线



第14页

我们的实践

• 引入半自动上线系统



第15页

我们的实践-半自动



RD发起上线



SIM预执行



仍然不够理想



No Yes



成功



提交DBA



No



符合 规范



Yes DBA确认



第16页

我们的实践-半自动

•优点  -避免了 JIRA 模糊不清的表述  -SIM环境预执行,清楚的看到影响行数  -程序执行,避免潜在的人为误操作 

•But  -还是需要 DBA 人肉审核  -对于违规 SQL, 开发改写意愿不强  -标准得不到执行,科普成本高



第17页

我们的实践

• 针对业务特点,开发全自动上线系统



第18页

我们的实践-AutoSQL

• Python 开发  -Celery  -MySQL  -Redis  -Yacc & Lex  -Tornado



第19页

我们的实践-过滤基本原则

•对于 DML上线, where clause 必须包含主 键,唯一索引或业务区分度高的字段  •不允许做减法,drop 字段,库,表或索引操 作提交 DBA 手工执行  •有限度的自由,建库操作必须 leader 审核, 提交 DBA 手工执行  •严格遵守调度规则,禁止提前上线



第20页

我们的实践-AutoSQL

RD发起上线 SQL入库 语法解析

规则过滤



Online执行 延迟调度 备份 SIM预执行



第21页

我们的实践-DDL



DDL



SQL 结构化



Sqlparser



过滤规则



Redis

获取表行数



延迟调度



Celery



重新提交



违规



第22页

我们的实践-DDL

•字段指定 not null default xxx   •所有字段,表均需要有注释 comment  •所有新表,引擎只能用 innodb 或 queue  •所有新表,均有自增 ID 做为主键  •按照一定比例,限制新表text字段数量  •按照一定比例,规定新表索引数量  •按照业务常识,post_id, puid, userid 均有 索引



第23页

我们的实践-DML



Redis metadata



DML



SQL 结构化



Sqlparser



过滤规则



备份



限速执行



重新提交



违规



第24页

我们的实践-DML

•不允许使用 load data  •删除修改操作,where clause 必须包含主 键,唯一索引列,或是业务区分度较好列  •禁止多表 join  •禁止未决 SQL, 例如 insert into select   •所有 insert 建义指定字段  •所有 update / delete 建义使用绝对值,遵 循可重入原则



第25页

我们的实践-AutoSQL



第26页

我们的实践-AutoSQL



第27页

我们的实践

• 当前不包括业务 SQL 审核,如何破?



第28页

我们的实践

• 开发慢查询实时追踪系统 SQLTrack  -抓住上线到转天高峰期慢 SQL  -鼓励开发参与优化



第29页

我们的实践-SQLTrack

• Golang 开发  -Heka  -Kafka  -InfluxDB / ES  -Tornado



第30页

我们的实践-SQLTrack

Heka



Statsd



SQLTrack



结构化



Heka



Kafka



命中

Cache



Influxdb



Heka





Explain



第31页

我们的实践-SQLTrack



第32页

我们的实践-SQLTrack



第33页

我们的实践-SQLTrack



第34页

改进及畅想

• 支持回滚功能  • 改写 SQL, 允许复杂 DML 上线  • 追踪全日志,分析 SQL 类型占比  • 将 SQLTrack 部署到代码分发流程



第35页

期待小伙伴的加入~~



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。