未来,软+硬+AI三位一体化自治数据库
在2022世界人工智能大会(WAIC)上,腾讯云数据库技术负责人程彬为大家分享了数据库与 AI 相结合背后的故事。在专场《当数据库遇上 AI 》中,程彬基于腾讯云数据库在 AI 智能化的探索与实践,剖析数据库与 AI 融合背后的技术关键点,为产业界提供前沿解决方案。以下为演讲实录:
线上、线下的朋友们,大家好,我是腾讯云数据库工程师程彬,非常荣幸能够在这个时期跟大家一起交流数据库技术。今天我代表我们团队,和大家一起谈谈AI和数据库结合的技术思考,并结合腾讯云数据库的实战经验分享一下 AI 工程化落地实践。
云数据库面临的新挑战
随着数字化转型的深入,越来越多的企业生产从线下到线上,大量的数据存储、查询就需要使用到数据库。从腾讯云数据库的发展情况也能看出市场对于数据库需求的不断增大。其实,规模增长的背后也给云数据库带来了新的挑战。
对云厂商来说,大规模运营下的可用性、成本和运营效率遇到了空前的挑战。比如,可用性上,百万数据库实例规模下如何降低故障绝对次数,这里就对可用性指标有更高的要求;怎么能高效率服务好几十万家企业,帮助他们管理好百万规模的数据库?怎么充分发挥规模运营效率,去不断的帮助企业降低成本?
另外一方面,对企业来说,在数字化转型过程中,需要开发大量的企业IT系统,这里就有开发效率、运营效率和成本的问题。比如,开发人员怎么能快速的写出高效的SQL语句?运维人员怎么管理越来越多的云上数据库?面对线上业务负载潮汐效应,怎么实现最合理的资源投入?
总的来说,规模的快速增长,传统的运营服务模式已经无法满足业务需求,数据库需要进一步智能化技术升级。
方法论升级
我们进一步深入思考发现,在传统数据库工程中无法完美的解决上面的问题。
传统数据库工程是软件结合硬件的方法来design数据库,在这种设计模式下,数据库能很好的处理预先设定好的问题。比如,通过if else else这样枚举方式,去处理各种我们能想到的异常分支。但在大规模运营下,我们发现约2.29%的异常场景难以靠人工快速发现,这些小概率极端故障场景,随着规模的增大,故障爆炸半径会不断放大。我们团队想到了AI的频率模式来挖掘,在软件、硬件的基础上,结合AI来重新design数据库,实现系统的自分析和自演进。
于是我们升级了数据库构建的方法论,从传统的软硬件设计演进到软硬件+AI三位一体的云原生自治数据库设计方法。
云数据库背后的三角关系
有了新的方法论之后,我们该怎么去具体构建云原生自治数据库呢?
我们先看看云数据库背后的一个三角关系:客户使用云厂商提供的服务资源来开展业务活动,云厂商利用和管理硬件资源,为客户提供服务。它背后有三个效率,系统效率、运营效率和业务效率:
- 业务效率,指怎么帮助业务去快速开发数据库应用程序,这里面就需要能尽可能简化开发人员使用数据库门槛。例如,不同水平的开发人员写出不同效率的SQL语句,但是数据库都能以最优的效率返回查询结果。
- 运营效率,云厂商怎么保证大规模下运营的效率。例如:现在系统故障了,怎么快速排查和定位故障的原因并且快速恢复?
- 系统效率,系统效率重点考虑两个问题,一是如何把CPU内存、硬盘这些资源全部用出去,不要闲置;二是,用相同的资源如何能处理更多的请求。
我们就是以极致效率为目标来打造云数据库的自治能力。
业务效率
为什么需要数据库参数智能调优服务?
传统数据库参数调优有三个问题:
- 调参效率低:整个过程需手动操作,准备数据、压测、调整参数等多轮操作,过程繁琐;
- 人力成本高:往往依靠专家经验,人时成本很高;云上的一些用户可能缺少专职运维团队和DBA;
- 调参难度大:数据库参数很多,业务的数据库设计和负载也各不相同;
腾讯云自治数据库智能参数调优服务 CDBTune,是一个端到端的一站式参数调优服务,无需人为介入,基于深度强化学习等AI技术实现,可根据场景自动探索优化参数。同时在调优速度上也实现了突破,通过沉淀专家经验和加入遗传算法等实现,调优速度可以通过增加并发度实现准线性的提升,调优时间大幅度缩短。
目前CDBTune共支持六千多种调参场景,自5月份灰度上线以来,总计支持300+实例调优。场景化调优 TPS 性能提升最高300%,平均提升43%。调优时效从原来人工花费几天缩短到两小时以内;对于预调优的场景,调优时间在10分钟以内。
由于数据库领域的特殊性质,ML工程化落地案例较少,智能参数调优服务需要实现从0到1的突破。为此需要解决三个难点:
- 巨大的参数空间:比如,MySQL系数据库,400+参数带来的指数级组合,参数空间巨大;
- 耗时冗长:参数空间巨大也带来了调优耗时费力,需要大幅度提升调优效率,获得更好的调优效果;
- 基于用户负载的调优:场景化调优只是解决了通用场景调优,由于每个业务workload都有不确定性和各自特征,因此只有支持了基于用户负载的调优,才能真正意义上实现参数最最优,覆盖实例新购、快速迭代和稳定运行阶段;
为了解决参数空间巨大的问题,我们使用了深度强化学习算法DDPG。
强化学习是机器学习算法中的一种,它通过学习如何把当前的情境映射成动作,使收益最大化。它通过已有的经验去学习,并且以一定的代价去探索未知的环境,在两者之间进行一个权衡。
由于数据库的状态(性能指标)和它的动作空间(参数配置的组合)是非常大的,通过表格来学习是不现实的,为此需要引入深度强化学习的算法,通过神经网络进行拟合。经过多次实验比较,这里我们选择了DDPG,深度确定性策略梯度算法。
其次,为了提升训练速度,我们在模型里首先加入了专家经验和遗传算法(GA)进行预热。基于专家经验,可以根据实例的规格、负载的类型等条件,获得相对较好的参数推荐。然后使用遗传算法,经过选择、交叉和变异,进一步获得一批高质量样本。这两种方法可以加快整个调参的速度。
同时,我们使用了并行架构。通过腾讯云数据库提供的克隆实例功能,我们可以批量获得相同的训练实例。通过并行训练,可以大大缩短训练所需的时间。
我们在不同的数据库配置和不同的负载下,做了很多测试,CDBTune的效果都比较不错。这里列出了其中一个场景的调优效果,在某些情况下CDBTune基本能达甚至超过一个资深DBA的水平。在sysbench和tpcc的场景下,吞吐的提升一般在10%-50%左右。
在去年年底腾讯内部举行的数据库性能调优比赛中,CDBTune作为参赛选手,最终性能获得了第二名的成绩,与人类选手的最优成绩相差不大,同时在调优时间上有巨大的优势。
场景调优在业务新上线和快速迭代阶段,可以帮助业务高效调优。但是场景仍然有限,不能完全契合业务需求。在业务稳定运行阶段,需要基于用户负载进行调优。
负载回放本身是一个难题,包括负载的并发处理,回放完之后的数据恢复等,这些问题导致我们想要多次执行负载变得困难。另外,有些时候希望灵活的控制负载的压力,在不同压力场景下进行调优。
我们使用负载仿真来解决这个问题,通过对原始负载进行抽象化与再现,尽可能的再现业务负载特征。
- 通过提取事务和SQL模板,保留负载基本特征;
- 根据数据类型和数据分布生成测试数据,保留数据特征的同时进行数据脱敏;
- 根据SQL的数据访问分析,统计数据访问分布,重现数据访问热点;
- 按需调整负载,自定义数据量和测试压力;
我们目前实验室环境可以达到80%的仿真度。通过负载仿真,可以尽可能做到与原始负载近似,同时又可以按需自定义负载的压力等属性,并且可以反复执行。由此,也可以在多种场景下进行应用,比如:
- 功能上线前, 首先在我们生成的不同规模的负载下进行验证, 判断其可能存在的瓶颈;
- 参数调优、索引推荐等自治数据库方法应用时, 通过我们生成的负载进行推荐, 以较低的代价实现针对用户负载的优化;
以上智能调参技术分别收录在2019和2022年的数据库顶会 SIGMOD 的论文中。
我们最新的研究成果在数据库顶级会议SIGMOD 2022已经发表,介绍了算法实现、模型设计和效果评估等。大家感兴趣可以去官网查阅相关资料,也可以在腾讯云数据库公众号上查阅哦,传递门见下,点击即可查看详情哦:
【2022SIGMOD】面向个性化需求的在线云数据库混合调优系统 | SIGMOD 2022入选论文解读
【2019SIGMOD】AI调参新纪元,腾讯数据库论文被SIGMOD收录
运营效率
大规模运营发现,大概有2.29%的故障场景常规探测无法完美覆盖,海量场景下这个问题也会是灾难性的。
例如,在一个电商客户直播带货时候,由于拨测无法及时发现数据库节点异常,就有可能导致客户这次活动的失败。
为了更好的保障业务连续性,做到故障切换时间P99=20秒,我们从常规探测切换的方式升级到全景化的业务连续性保障。
- 故障前,通过预测负载变化、硬件故障检测等发现异常提前处理;
- 故障中,DB、OS和硬件的实时检测,实现秒级的精确故障发现;
- 故障后,基于数据库代理的连接保持和事务保持能力,连接不中断,事务不回滚,切换过程几乎可以做到客户无感知;
- 在故障诊断能力上,结合客户负载变化和多级检测信息,生成全链路诊断报告和根因分析,提升运维效率并持续发现优化更多异常场景;
基于全景化业务连续性的能力,我们的RTO恢复时长,从19年到现在减少了74%。举个例子:通过腾讯云数据库SHIELD异常诊断系统,我们生成里实例的全链路诊断报告和根因分析。
上图中的实例产生了拨测不通的情况,在短时间内发生了多次HA,通过对实例的监控、日志等指标多维关联分析,得到了故障的根因分析 - 实例高负载 。同时整个切换过程以及切换的时间是符合预期的,符合SLA要求。
腾讯云数据库在日常运营中,会持续对实例的健康状态进行检测。目前,日均检测出超过一千万次的异常事件,亚健康实例占比约有15%,持续高负载实例约1%,资源超用的实例占比约10%。同时,由于各种异常也带来了大量的工单,比如高负载、高并发和资源占用过多的咨询等。
如此多的异常,显然不能靠人力分析。为此我们构建了实时的、多场景覆盖、多维度智能分析和处理的闭环能力:
- 通过秒级的日志和监控采集能力,实时发现异常;
- 在静态和动态阈值检测的基础上,结合趋势、偏移、周期性、尖刺、3σ 等算法,准确检测异常;
- 基于规则的分析,比如慢查询、SQL审计和活跃会话的TOP分析,找到大SQL、慢SQL等;通过监控指标的相关性分析,找到与异常相关的指标;通过常见场景的诊断路径,直接定位到根因;
- 基于学习的分析,通过聚类、人工标注和神经网络的学习,结合专家经验,学习一些异常的pattern并给出根因分析;
目前异常检测可以做到在30秒内发现问题,在1分钟内给出相应的分析结果和优化建议,异常处理的时间大幅下降80%。举个例子:
- 高负载、高并发问题,可以通过异常诊断闭环,主动推送优化建议,比如优化参数,开启线程池等;
- 通过规则化配置,可以快速获得运营过程中的整体统计(如资源的不合理使用和调度的情况)发现运营过程中的问题。
系统效率
数据库主要使用的机器资源有CPU、内存和磁盘,传统数据库通常需要在购买时选定固定的规格,客户必须为峰值性能买单。而云原生数据库TDSQL-C通过计算存储分离架构,将存储池化,计算无状态化,实现了极致弹性能力,因而客户可以为实际使用买单。
在增强弹性能力的同时,也带来了网络延时。所以,云原生数据库通常会引入RDMA、AEP等新硬件,并通过采用软硬结合的方式,避免分层架构引入的性能开销。
此外,TDSQL-C 打破传统固定规格的产品形态,打造根据业务的负载对计算资源进行自动伸缩,按照实际使用计费,不使用不计费的serverless形态。为了实现计算资源的自动伸缩,数据库在启停方面做了很多优化,保证系统能在几秒内完成停机和重启恢复,提升极致业务体验。目前我们结合微信小程序的生态,为成千上万的客户提供服务。
为了更充分的使用资源,在使用传统的BestFit算法进行装箱和调度的基础上,同时也考虑了实例当前和未来对资源的使用情况。通过AI算法对业务负载进行合理预测,实现更加智能的 Serverless 产品形态。
未来展望
未来我们继续探索架构的先进性、极致的软件工程能力。与此同时,我们会深刻理解客户业务场景,把架构能力、软件工程能力覆盖到更多的业务场景中。
在智能技术实践上,我们继续践行软硬AI三位一体化的自治数据库:
-
AI for DB,探索AI与数据库的有机结合,实现基于学习的数据库组件
内置业务优化组件,如基于负载的智能索引管理,负载优化等;
查询优化组件,如基数估计、代价估计、谓词分析、学习型优化器等;
数据组织方式,学习型索引,智能冷热数据分层,智能压缩等; -
DB for AI,内置机器学习,在数据库中实现近数据的机器学习算法执行,帮助所有机器学习的开发者能有一个更安全和渐变的基数设施,赋能AI工程化应用
执行更快、更安全(数据不出库)、成本更低;
简化AI工程化应用复杂度,进一步赋能产业;
让我们拭目以待!