程序员

美团 MySQL 数据库巡检系统的设计与应用

2020-06-08  本文已影响0人  来壹杯卡布奇诺

说明
作者:王琦
来源:美团技术团队

最新互联网大厂面试真题、Java程序员面试策略(面试前的准备、面试中的技巧)请移步GitHub


我们生活中随处可见各种巡检系统,比如电力巡检、消防检查等,正是这些巡检工作,我们才能在稳定的环境下进行工作、生活。巡检对于数据库或者其他 IT 系统来说也同样至关重要,特别是在降低风险、提高服务稳定性方面起到了非常关键作用。

一、背景

为了保障数据库的稳定运行,以下核心功能组件必不可少:

图 1 数据库运维保障核心功能组件

其中,数据库巡检作为运维保障体系最重要的环节之一,能够帮助我们发现数据库存在的隐患,提前治理,做到防患于未然。对于大规模集群而言,灵活健壮的自动化巡检能力,至关重要。

任何系统都会经历一个原始的阶段,最早的巡检是由中控机 + 定时巡检脚本 + 前端展示构成的。但是,随着时间的推移,老巡检方案逐渐暴露出了一些问题:

所以我们需要一个灵活、稳定的巡检系统来帮助我们解决这些痛点,保障数据库的稳定。

二、设计原则

巡检系统的设计原则,我们从以下三个方面进行考虑:

三、系统架构

美团 MySQL 数据库巡检系统架构图设计如下所示。接下来,我们按照架构图从下到上的顺序来对巡检系统主要模块进行简单的介绍。

图 2 美团 MySQL 数据库巡检系统架构图

1. 执行层

2. 存储层

巡检数据库 :主要用来保存巡检相关数据。为了规范和简化流程,我们将巡检发现的隐患保存到数据库中,提供了通用的入库函数,能够实现以下功能:

巡检脚本 Git 仓库 :用来管理巡检脚本。为了方便 DBA 添加巡检,在系统建设过程中,我们增加了多个公共函数,用来降低开发新巡检的成本,也方便将老的巡检脚本迁移到新的体系中。

3. 应用层

**集成到数据库运维平台 **:作为隐患明细展示、配置巡检展示、管理白名单等功能的入口。为了提高隐患治理效率。我们做了以下设计。

隐患运营后台 :这个模块主要目的是推进隐患的治理。

外部数据服务 :主要是将巡检隐患数据提供给美团内部其他平台或项目使用,让巡检数据发挥更大的价值。

四、巡检项目

巡检项目根据负责方分为 DBA 和 RD,DBA 主要负责处理数据库基础功能组件以及影响服务稳定性的隐患。RD 主要负责库表设计缺陷、数据库使用不规范等引起的业务故障或性能问题的隐患。也存在需要他们同时参与治理的巡检项,比如“磁盘可用空间预测”等。目前巡检项目共 64 个,类目分布情况如下图所示:

图 3 巡检项类目分布

下面,我们通过列举几个巡检任务来对巡检项做简单的说明:

五、成果

美团 MySQL 巡检系统已稳定运行近一年时间,基于新巡检体系上线的巡检项 49 个。通过巡检体系持续运行,在团队的共同努力下,我们共治理了 8000+ 核心隐患,近 3 个月隐患治理周期平均不超过 4 天,将隐患总数持续保持在极小的量级,有效地保障了数据库的稳定。

图 4 隐患运营 - 团队内各虚拟小组隐患平均治理周期

下面的隐患趋势图,展示了近一年中隐患的个数,数量突然增长是由于新的巡检项上线。从整体趋势上看,隐患存量有非常明显的下降。

图 5 隐患运营 - 隐患总量趋势情况

除了推动内部隐患治理之外,我们还通过对接先知平台,积极推动 RD 治理隐患数量超过 5000 个。

图 6 对接先知 - 推动 RD 治理隐患

为了提升用户体验,我们在提升准确率方面也做了重点的投入,让每一个巡检在上线前都会经过严格的测试和校验。

对比其他先知接入方,DBA 上报隐患在总量、转化率、反馈率几个指标上都处于较高水平,可见我们上报的隐患风险也得到了 RD 的认可。

图 7 对接先知 - 各接入方上报隐患情况

指标说明

六、未来规划

除了继续完善补充巡检项以外,未来巡检系统还会在以下几个方向继续探索迭代:

上一篇 下一篇

猜你喜欢

热点阅读