|
| 1 | +# Themis |
| 2 | + |
| 3 | +Themis(泰美斯),是希腊正义与法律女神,以头脑清晰见称。项目采用此名称,寓意着平台可对数据库质量公平判断,明察秋毫之意。 |
| 4 | + |
| 5 | +### 功能概述 |
| 6 | + |
| 7 | +Themis,是宜信公司DBA团队开发的一款数据库审核产品。可帮助DBA、开发人员快速发现数据库质量问题,提升工作效率。 |
| 8 | + |
| 9 | +1. 平台的核心能力旨在快速发现数据库设计、SQL质量问题。 |
| 10 | +2. 平台只做事后审核,自主优化部分放在二期实现。亦可在项目设计阶段引入,起到一部分事前审核的作用。 |
| 11 | +3. 通过WEB界面完成全部工作,主要使用者是DBA和有一定数据库基础的研发人员。 |
| 12 | +4. 可针对某个用户审核,可审核包括数据结构、SQL文本、SQL执行特征、SQL执行计划等多个维度。 |
| 13 | +5. 审核结果通过WEB页面或导出文件的形式提供。 |
| 14 | +6. 平台支持主流的Oracle、MySQL数据库,其他数据库放在二期实现。 |
| 15 | +7. 尽量提供灵活定制的能力,便于日后扩展功能。 |
| 16 | + |
| 17 | +##### 支持数据库 |
| 18 | +* Oracle(10g及以上) |
| 19 | +* MySQL(5.6及以上) |
| 20 | + |
| 21 | +##### 审核维度 |
| 22 | +* 数据库结果(对象) |
| 23 | +指数据库对象,常见的表、分区、索引、视图、触发器等。 |
| 24 | + |
| 25 | +* SQL文本(语句) |
| 26 | +指SQL语句文本本身。 |
| 27 | + |
| 28 | +* SQL执行计划 |
| 29 | +指数据库中SQL的执行计划。 |
| 30 | + |
| 31 | +* SQL执行特征 |
| 32 | +指语句在数据库上的真实执行情况。 |
| 33 | + |
| 34 | +### 实现原理 |
| 35 | + |
| 36 | + |
| 37 | +整个平台的基本实现原理很简单,就是将我们的审核对象(目前支持四种),通过规则集进行筛选。符合规则的审核对象,都是疑似有问题的。平台会将这些问题及关联信息提供出来,供人工甄别使用。由此可见,平台的功能强大与否,主要取决于规则集的丰富程度。平台也提供了部分扩展能力,方便扩展规则集。 |
| 38 | + |
| 39 | +### 平台架构 |
| 40 | + |
| 41 | + |
| 42 | +图中的方框部分,为平台的主要模块。底色不同的模块,表示当前的进度状态不同。虚线代表数据流,实线代表控制流。其核心为这几个模块: |
| 43 | + |
| 44 | +1. 数据采集模块。它是负责从数据源抓取审核需要的基础数据。目前支持从Oracle、MySQL抓取。 |
| 45 | +2. OBJ/SQL存储库。这是系统的共同存储部分,采集的数据和处理过程中的中间数据、结果数据都保存在这里。其核心数据分为对象类和SQL类。物理是采用的MongoDB。 |
| 46 | +3. 核心管理模块。图中右侧虚线部分包含的两个模块:SQL管理和OBJ管理就是这部分。它主要是完成对象的全生命周期管理。目前只做了简单的对象过滤功能,因此还是白色底色,核心的功能尚未完成。 |
| 47 | +3. 审核规则和审核引擎模块。这部分是平台一期的核心组件。审核规则模块是完成规则的定义、配置工作。审核引擎模块是完成具体规则的审核执行部分。 |
| 48 | +4. 优化规则和优化引擎模块。这部分是平台二期的核心组件。目前尚未开发,因此为白色底色。 |
| 49 | +5. 系统管理模块。这部分是完成平台基础功能,例如任务调度、空间管理、审核报告生成、导出等功能。 |
| 50 | + |
| 51 | +### 操作流程 |
| 52 | + |
| 53 | + |
| 54 | +从处理流程的角度,看看平台的整体处理过程。 |
| 55 | + |
| 56 | +##### 1.规则管理 |
| 57 | +* 初始化规则。平台本身内置了很多规则,在这一过程中到导入到配置库中。 |
| 58 | +* 新增规则。平台本身提供了一定的扩展能力,可以依据规范新增一条规则。 |
| 59 | +* 修改规则。可以根据自身情况开启或关闭规则。对于每条规则,还内置了一些参数,也可在此处修改 。此外,针对违反规则的情况,还可以设置扣分方法(例如违反一次扣几分、最多可扣几分)等。 |
| 60 | + |
| 61 | + *规则本身及相关参数、配置信息等都会存储在配置库中。* |
| 62 | + |
| 63 | +##### 2.任务管理 |
| 64 | +这是后台管理的一个部分,主要完成与任务相关的工作。系统中的大多数交互都是通过作业异步完成的。其后台是通过celery+flower实现的。 |
| 65 | +##### 3.数据采集 |
| 66 | +这部分是通过任务调度定时出发采集作业完成,也有少量部分是实时查询线上库完成的。采集的结果保存在数据库中,供后续分析部分调用。 |
| 67 | +##### 4.规则解析 |
| 68 | +这部分是由用户通过界面触发,任务调度模块会启动一个后台异步任务完成解析工作。之所以设计为异步完成,主要是审核工作可能时间较长(特别是选择审核类别较多、审核对象很多、开启的审核规则较多)的情况。审核结果会保存在数据库中。 |
| 69 | +##### 5.任务查看、导出 |
| 70 | +在用户发起审核任务后,可在此部分查看进度(处于审核中、还是审核完成)。当审核完成后,可选择审核任务,浏览审核结果或选择导出都可以。如果是选择导出的话,会生成异步后台作业生成文件,放置在下载服务器上。 |
| 71 | + |
| 72 | +### 规则说明 |
| 73 | +平台的核心就是*规则*。规则是一组过滤条件的定义及实现。规则集的丰富程度,代表了平台的能力。平台也提供了扩展能力,用户可自行定义规则。 |
| 74 | +从分类来看,规则可大致分为几类。 |
| 75 | + |
| 76 | +##### 规则分类 |
| 77 | +1. 从数据库类型来区分,规则可分为Oracle、MySQL。不是所有规则都区分数据库,文本类的规则就不区分。 |
| 78 | +2. 从复杂程度来区分,规则可分为简单规则和复杂规则。这里的简单和复杂,实际是指规则审核的实现部分。简单规则是可以描述为mongodb或关系数据库的一组查询语句;而复杂规则是需要在外部通过程序体实现的。 |
| 79 | +3. 从审核对象角度来区分,规则可分为对象类、文本类、执行计划类和执行特征类。 |
| 80 | + |
| 81 | +##### 规则参数 |
| 82 | +规则可以包含参数。 |
| 83 | + |
| 84 | +例如:执行计划规则中,有个是大表扫描。这里就需要通过参数来限定大表的定义,可通过物理大小来指定。 |
| 85 | + |
| 86 | +##### 规则权重及阀值 |
| 87 | +* 权重 |
| 88 | +权重,代表违反规则,一次扣几分。可根据自身情况进行调节。 |
| 89 | +* 阀值 |
| 90 | +阀值,代表违反规则的扣分上限。这里主要是为了避免违反单一规则过多,导致忽略了其他规则。 |
| 91 | + |
| 92 | +*规则权重及扣分,最终会累积为一个总的扣分,平台会按百分制进行折算。通过这种方式,可起到一定的量化作用。* |
| 93 | + |
| 94 | +##### 规则_对象类(Oracle部分) |
| 95 | + |
| 96 | + |
| 97 | +##### 规则_对象类(MySQL部分) |
| 98 | + |
| 99 | + |
| 100 | +##### 规则_执行计划类(Oracle部分) |
| 101 | + |
| 102 | + |
| 103 | +##### 规则_执行计划类(MySQL部分) |
| 104 | + |
| 105 | + |
| 106 | +##### 规则_执行特征类(Oracle部分) |
| 107 | + |
| 108 | + |
| 109 | +##### 规则_执行特征类(MySQL部分) |
| 110 | + |
| 111 | + |
| 112 | +##### 规则_文本类 |
| 113 | + |
| 114 | + |
| 115 | + |
| 116 | +### 界面展示 |
| 117 | + |
| 118 | +##### 对象审核报告(概览部分) |
| 119 | + |
| 120 | + |
| 121 | + |
| 122 | +##### 执行计划审核报告(概览部分) |
| 123 | + |
| 124 | + |
| 125 | + |
| 126 | +##### 执行计划审核明细报告(节选) |
| 127 | + |
| 128 | + |
| 129 | + |
| 130 | +##### 执行计划审核明细报告(节选) |
| 131 | + |
| 132 | + |
0 commit comments