阿里数据库智能优化技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
阿里数据库智能优化技术
本文介绍基于阿里的场景和规模所做的一些思考和实践。
首先在阿里对数据库优化服务的诉求,大家在数据库性能优化方面都有很多的经验教训,不同公司对优化的具体做法也不太一样。在方式上,大部分企业应该还是重人工模式,就是由数据库能力比较强的人,比如DBA,来解决数据库性能问题。但阿里今天的数据库规模非常大,不管我们有多少DBA,我们的人员增长速度都无法跟上业务发展的速度,单纯依赖DBA已经无法满足业务发展需求。
第二方面分析CloudDBA是如何做的,里面涉及到哪些技术,希望把这些技术分享给大家。如果大家所在的公司也在做类似的事情,希望能够提供一些参考和帮助。
第三方介绍目前正在探索的一些事情。现在人工智能技术比较火,数据库相对来说是比较传统的领域。如果我们将机器学习、深度学习这样的技术引入到数据库领域,它到底能做些什么,具体到数据库优化领域又能做什么,这是我们正在探索的一些事情。
一、阿里数据库优化服务诉求
1、业务诉求
首先从整个阿里数据库的角度看一下对于数据库优化服务的业务诉求,这也是我们做这个产品最大的驱动力。
(1)服务产品化。阿里业务发展速度远远超过了DBA团队发展的速度,单独依靠DBA重人工支持模式变得越来越困难,因此我们在几年前开始尝试通过产品来完成DBA人工做的一些工作。通过产品解决DBA人工服务的扩展性问题,是我们最直接的诉求,希望能把DBA人工服务产品化。
(2)全局规模优化。站在全局角度来看,数据库规模迅速增大的同时也带来了巨大的成本压力。成本这块怎么理解呢?只要业务有需求,理论上可以通过增加更多的机器来满足业务需求。但从另外一个角度来讲,这些机器是不是一定要加?是不是有一些机器可以通过优化节省下来给新的业务服务?当规模非常大时,所做的一小点规模化优化,所节省的成本可能都是很可观的。因此我们需要有全局规模优化的能力,仅仅一个数据库实例内部做的优化都是一些局部优化,以全局角度来看是不够的。
(3)主动诊断。从运维的角度来看,阿里同其它公司一样,就是要尽量避免故障的发生。在阿里的业务场景下,大部分业务跟数据库有着非常紧密的关系。数据库一个微小的抖动,都可能对业务造成非常大的影响,所以如何让数据库更稳定是非常重要的业务诉求。比如一个最常见的情况,有很多线上SQL性能是有问题的,这些SQL会给业务稳定性带来一定的风险。那么,我们能不能通过产品主动对线上有问题的SQL进行主动诊断,提前做优化,而不是SQL引起故障后才去优化。
(4)智能异常发现。线上业务负载不断地变化,业务行为、用户行为也在不断地变化。传统基于阈值设置报警的方式无法可靠、及时地发现数据库故障或者异常。如何可靠地去发现数据库异常,甚至是提前预测到故障的发生并进行及时干预,是有很强的业务需求的,但同时也有非常大的技术挑战,尤其是在阿里这么大数据库规模场景下。
(5)容量预估。还有一些业务诉求是容量预估的需求。比如什么时候需要扩容,如何更精准地对数据库容量做出预估,这些后面我会稍微展开一下。
2、用户诉求
另外一部分诉求是使用数据库这些人的诉求,也就是我们的开发人员。每个公司数据库服务方式有所不同。这里我列了一些开发人员经常会问到的一些问题,这些问题背后的诉求让我们思考我们的产品站在开发者的角度,要解决什么问题。
在业务发生异常时,需要快速定位到整个链路到底哪块出了问题。之前DB对于开发者来说是一个黑盒,不管是信息透明方面,还是大家对数据库领域的知识方面,对于DB的了解程度可能都不够,不知道DB是什么状态,发生了什么问题。具体来讲用户诉求主要有:
(1)信息透明,自助优化。我们期望用户能够自助发现和解决数据库的性能问题,并非发现问题先去找DBA,这样整个流程会比较长,时间成本也比较高。但做到自助化,首先用户能够全面了解数据库的运行情况。
(2)持续优化。只要业务在线上运行就会不断的变化,业务负载不断变化、用户行为也会不断变化。所以数据库优化是个持续的过程,并不是今天发现一个问题解决了,以后就不出现问题了。尤其是互联网的应用,持续优化尤其重要。
(3)量化跟踪,流程闭环。开发人员经常会问到一个问题,上次帮他做的优化,结果到底怎么样。我们知道并不是每个优化都是实际有效的,因为很多优化方案是基于当时的信息和场景做的一个判断,实际优化结果只有当应用之后才能真正去做评估、做衡量,所以我们要提供量化跟踪和评估的能力。另外,我们期望整个优化流程,从发现问题到最终解决问题在产品内能够闭环,开发人员能够自己完全自助化走完整个流程,而不需要DBA的参与。流程闭环也是产品必须具备的能力。
(4)输出产品,而不是人。不断有新的业务上线,而我们的DBA就这么多人,并且每个人有不同的侧重。对于一些快速发展的业务,在早期我们可能没有DBA去做特别支持的,但这些业务的数据库反而是容易出问题的。开发人员如果能够通过产品解决问题,而不是凡事都去找DBA,解决问题的效率会更高。将我们DBA的能力通过产品进行输出,更好去支持我们的业务。
未来数据库优化服务会从自动化发展到智能化,这是我的判断。今天仍然有很多问题是解决不了的,比如精确的容量预估,智能的异常发现,故障提前预警等。现在我们有非常多的数据,也有数据加工分析的技术,所以我们开始进行一些探索,通过数据分析和机器学习等技术手段来解决之前解决不了的问题。比如最简单的容量预估,每年都会做预算,做容量预估。至少我现在还没有看到特别多的公司去用很科学的方式,完全基于业务目标以及历史数据的分析来做容量预估。很多时候容量预估是靠拍脑袋决定的,但是今天有了大量的数据和加工数据的技术手段,我们是不是可以做更精准的容量预估。举这个例子来说明一下,未来很多的优化应该向智能化方向去思考,去探索。
CloudDBA在阿里大概是这样的一个发展历程,我们今天还处于自动化阶段,但同时也有一些智能化的实践。未来我的判断是一定向智能化去走,后面会在这方面尝试更多的探索。说了这么多,CloudDBA到底是什么?这有一句话:
“CloudDBA是一个数据库智能优化产品,面向开发人员提供自助化诊断优化服务,致力于成为用户身边的数据库专家。”
CloudDBA不是给DBA开发的工具,从一开始我们的用户定义就很明确。我们是面向使用数据库的开发人员提供这种自助化的诊断优化服务,我们的用户不是DBA,而是真正使用数据库的开发同学。面向DBA和面向开发同学对产品来讲是完全不同的概念。比如开发同学没有太多数据库背景知识,我们即使做简单的信息透明,也需要做一些翻译,能够让开发同学理解。用户定义不同,数据的加工、分析以及最终的呈现,都是完全不一样的。