从 0 到 1 搭建技术中台之 SQL 审核平台

云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!

自去年开始,中台话题的热度不减,很多公司都投入到中台的建设中,从战略制定、组织架构调整、协作方式变动到技术落地实践E t m 6 * & $,每个环节都可能出现各种各样的问题。技术中台最坏的状况是技术能力太差,不能支撑业务的发展,其次是技术脱离业务,不能服务业务的发展。前者是能力问题,后者是意识问题。在本专^ a ] 8 C &题中,伴鱼技术团队分享了从 0 到 1 搭建技术中台的过程及心得。

背景

随着伴鱼业务的快速发展,公司各产品线的业务不断丰富,日常的 SQL 上线也在不断增加。 SQL 审核与执行,作为 DBA 每天工作中相+ # Q当重要的一环,如何保证 SQL 语句的质量,对于系统的高效运行和长久稳定有着很大的影响。

本文在对开源 SQL 审核平台 (例如 Yearning、See 和 AN / # c * 4 Xrchery 等) 进行调研,并结合 DBA 在 SQL 上线实践经验的基础上,设计了伴鱼 SQL 审核平台。相比其它 SQL 审核平台,新系统9 i 9 2 4 G主要包括以下核心功能:

  • 基于 TiDB Parsel m R v 做 SQL 语法解析,践行 SQL 规范
  • 基于公司组织架构做权限管理和流程审核
  • 基于审核规则列表的动态开关
  • 支持 SQL 执行数据备份和回滚
  • 支持任务定时调度执b S v _ g _ :

下面从整体架构、流程设计等方t N B _ L o y }面详细介绍下伴鱼 SQL 审核平台以及设计背后的一些思考。

整体架构

SQL 审核架构,如下图所示,主要包括 web 前端、 SQL 审核后端8 I 7和数据存储 Tid N ? ADB。

从 0 到 1 搭建技术中台之 SQL 审核平台

流程设计

SQL 语句的质量对于系M } ( ) z -统的稳定高效运行有很大影响,因此 SQL 审核平台必须加强语句质量的审核。其次, SQL 审核平台在确保数据库平稳运行的同时,1 ] 6 % r f 7尽量提高上线的效率。

规则8 s /设计

通过系统约束是践行K { & _ Y q @数据库规范最有效的手段。 SQL 审核规则除了加入业界认可的规则外,我们0 - H还根A 4 5 L ) x u }据日常 SQL 上线暴露的一些风险场景,加入我们设计的一些规则。 SQL 审核部分规则列表,如下图所F l , {示。

从 0 到 1 搭建技术中台之 SQL 审核平台

数据的删改关系到数据安全和 SQL 性能,其中 SQL 性能关系到线上服务的稳定性。这里简单介绍下a N 2 t H | T“删改数据规则”,主要包括以下三条规则:

  • 删改数据索引不完全匹配
  • 删改数据影响行数超过 100
  • 影响行数超过 3000

下面对这 3 条规则进行解释:

  • 日常数据, O + ` a修改,大多数场景只涉及少部分数据修改,所以只要完全走索引,性能基0 I w ;本没问题。如果系统检测到语句条件与线上索引不完全匹配,检测结h n $ . I n g果就会不通过。
  • 在某些特殊场景下,p : 4 a p # _ _ h索引完全匹配,但数据影响的实际行数可能较多 (大于配置影响行数 100),这样检测结果也是不通过。
  • 当然在表数据量不大 (万级d g 5 4 L + Q + S别以内) 和索引没法覆盖等极少数场景下,可以通过关闭 1、2 两条规则,同时满足F N 9 c [ i 3 这条规则的前提下,检测通过。

规则这样e : ` z X配置,一方面系统根据语句条件备份时,保证了快速高效;其次,数据执行权限已经下放给业务负责人,系统尽可能保证 SQL 的执行性能。

任务设计

业务 aY / Vpp 大版本上线,涉及s v 0 n M SQL 上线条数众多,在任务设计上主要做了如下几点考虑:

  • 通常业务大版本上线,涉及多个业务线,所以 SQL 任务必须支持多库多A Y [
  • SQL 任务通常包括建l ] o ~ 表、改表和增删改数据三种类型,每种任务需要区别对待,比如建表不会锁表,但需要关注表的R G ~ @ J E索引;改表需要关注数据大小,任务最好不要在业务高峰期3 = ! q执行;增删改数据需要在执行前对数据进行备份,保证数据安全

基于以上两点要求D @ .和任9 | 3 h务提交的易用性,我们设计了任务检测页面,如下图所示。

从 0 到 1 搭建技术中台之 SQL 审核平台

其中,对于建表选项,我们要求每个输入框只输入一条建表语句,并备注每个表的查询和更新,这样设计的原因h : / ! / @ b ,是符合 DBA 审核习惯,方便 DBA 审核索引好坏P * X U Q ( k R

任务检测

研发提交 SQL 任务检测后,后台基于 SQL 审核规则,对语句进行语法和规则2 L _进行检查,并将检测结果反馈给研发。在任务检测结果页,从易用性角度做了如下几点考虑:

  • 提交检测的 SQL 众多,如果其中某些 SQL 不满足要求,需要支持在检测结果页直接修改并立即检测,不R i @需要重新编辑所有任务再次提交
  • 改表 (除加s 6 D A Y }索引操作外) 只修改元数据,不需要拷贝数据,影响行数为 0,形象的“代表”执行速度很快
  • 删改数据,我们需要将数据真正影响的行数展示给s m _ - t研发,让他们看到实际操作的数据条数d Z y b K A /,形象的K i Q“告诉”数据操作是否符合目标
    检测结果页,如t d 7 ` 3 U & .下图所示。

从 0 到 1 搭建技术中台之 SQL 审核平台

其中:

  • 修改数据条件与索引不匹配,检测状态为失e A / u Z k败;
  • 增加索引,需要拷贝全表数据,影响行数为表总条数;
  • 增加字段和数据类型加大,只涉及修改元数据,影响行数为 0;
  • 第 4 条更新语句,满足删改规则,检测状态通过;
  • c c = ` F个任务单,有条语句未J G ^ ; J ] U ]通过,只需要修改该条语句满足审核规则,整个任务单才才可以提交审核,进入下一步流程。

任务审核

任务审核角色有 2 个,一级审核为业务负责人,负责审核任务提交同学的 S$ 7 j d B YQL 质量,二级审核为 Dp $ 6 1 ] KBA ,进一步审核和提高 SQ! , * ?L 质量。审核流程,如下图所示。

从 0 到 1 搭建技术中台之 SQL 审核平台

目前,任务审核流程如下:

  • 对于增删改数据操作,审核规则已经保证 SQL 性能和数据备份,审核和执行权限下放给一级审核人
  • 对于建表, DBA 关r ^ 5 l注表的p - O W j T [索引好坏问题,审核k : v q 7 X 8 ~ f y n c D O I执行权限由 DBA 负责
  • 对于改表,涉及添加索引操作,需要关注语句的性能,审核和执行权限由 DBA 负责

任务执行

任务执行阶段,主要考虑 2 个问题,包括大表添加索引可能导致的性能问题和数e C n O 3 3 P 1 !据删改可能导致的数据误操作问题。针对这 2 个问题,我们采取的措施如下:

  • 定时调度,大表加索引操作,可以设置调度时间,调度: ] s & _ 6 3 n到业务低峰期执行
  • 数据备份,对于删改数据操作,在真正执行前,会根据语句条件,对数据进行备份

任务待0 h g执行列表,如下图所示。任务如. ! j } z % %果设置了定时调度,后台调度到该设置的时间点执行,p 4 , h b当然待调度的任务也可以修b t k v P u改调度时间或者人工调度立即执行。

从 0 到 1 搭建技术中台之 SQL 审核平台

任务历史

任务历史主要保存 SQL 语句操作记录F ? Q E,便于审计。同时对于删改操作,任务历史提供数据回滚入口,如下图所示。

从 0 到 1 搭建技术中台之 SQL 审核平台

总结及规划

目前,伴鱼3 r @ 0 4 SQL 审核平台简化了 DBA 的工作,提高了研发 SQL 上线效率和研发使用数据库的水平。系统已稳定运行近w r J半年时间,审核规则也不断完善,更加契合公司内部场景。& Q - p未来,我x H e U们有以下几点需要完善:

  • 建表,目前小表采用自增主键,大表主键依赖公司分布式 id 生成器,后续版本升级到 4.0,小表主键可以使用 TiDB 自带 auto_* h ^ % f A Jrandom 方式生成
  • 建表,索引的好坏,还需要 DBA 人工平台审核。在没有有效的方式阻止引入性能较差的 SQL 到线上前,目前还不打算将执行权限下放给业务负责人。后续将对这块继续进行研究,争取做到自动化。

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群! p M 8 Q 1 b S F】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-08-/ S S ~ 0 : /01
本文作者:伴鱼技术团队
本文来自:“infoq”,了解z B . j相关信息可以关注“inf) ( - voq”