DRDS新一代分布式SQL引擎

2018 年 1 月 23 日 阿里巴巴数据库技术 孙梦石(梦实)

      1月19日,在阿里巴巴本部举办的面向企业 CTO、CIO和数据架构师的双11数据库技术峰会上, DRDS负责人梦实为大家带来新一代分布式SQL引擎介绍,下面是他的分享:

      大家好,我是DRDS产品的技术负责人,做DRDS产品已经有五六年时间了。我今天主要是给大家介绍DRDS即将发布的全新的SQL引擎,这个引擎会带给大家很多的惊喜。

      既然是一个全新的SQL引擎,到底新在哪里?

      首先性能和公有云卖的DRDS版本相比性能提升了3倍,当然不同定义不一样,可能有人觉得3倍是否有水分,不是这样。可以简单地理解为我们花在DRDS的钱,比如你是私有云的用户,要部署DRDS的话需要花很多钱。但是如果在里面的话,硬件成本只要花之前1/3的费用就可以了。

      DRDS最主要是功能是对SQL的执行,在公有云上,是以每秒可以执行的SQL数定义其规格。所以这个性能的提升是指每秒SQL数的上升,在这个版本中可以支撑到接近10万的量级,原来只有不到3万。

      我们是通过什么样的方式实现它达到这样的效果?

      首先,在DRDS中对Plan Cache做了优化,当第二次执行同模式的SQL的时候,所有CPU的开销没有了,而只剩下执行的开销。

      另外是来自于阿里巴巴开源的druid,我们对parser做了进一步的优化,称之为fastsql,这个组件以后会开源出来。

      另外定制化的底层驱动。

      最后,来自阿里JVM团队的黑科技,在代码没有改动的情况下让系统能量提升了30%,称之为Wisp协程。

      该性能的提升300%是指针对一些场景,这些场景是否真的是我们平时所用到的?在哪些场景下提升了300%?

      比如最常见的单条的写入操作,比如常见的带拆分键的SELECT语句,或者是做读写分离的时候,针对单纯读写分离的场景。在这些场景做到了300%的性能提升,如果你的场景主要是这些场景的,在DRDS的硬件成本上可以节省2/3。

      对于其他的几类场景,比如跨库聚合,或者是一些分布式的事务,也是有一些提升,但是提升的不是很多,大概有200%的提升。这是新的SQL引擎带给大家的硬件成本上的节省。希望让大家感觉比较高兴。

      数据库中的东西成本有很多方面,硬件成本只是其中一点,还有一些运维成本、开发成本都是算在成本中的。

      第二,新的SQL引擎会降低你使用的成本,使用的成本怎么理解?如果一个SQL放在里面需要改来改去,需要不停地对它做一些很奇葩的优化才能玩转它,我们认为使用成本比较高。如果SQL放进来没有太多问题,可能很轻松地跑起来,而且性能不错。那这时候我们认为使用成本会变得很低。

      对于DRDS来讲,尤其是新版本的DRDS,拥有一个我们认为最好的当前在市面上能见到分布式优化器,甚至没有之一。为什么是最好?首先对于一个分布式数据库来讲,一个SQL怎么执行效率比较高?自然是让CPU以及存储在一起。对于这种分库分表的解决方案来讲只是让SQL尽量到MySQL来执行,这样效率可能更高一点。

      但是简单SQL的下推大家都会操作,关键是我们都是单数据库来的,我写SQL的时候希望一条SQL功能越多越好,你的SQL中可能包含一堆的子查询,哪些子查询可以推下去,哪些子查询、哪些聚合等在下推之后对二次结果再做运算,这里有非常多的优化逻辑。

      对于DRDS来讲,它查询优化器拥有最多的下推优化规则的判断,而这些规则都是基于淘宝的业务一点一点积累出来的。在这个优化器上能够利用到淘宝经过十几年的时间沉淀的所有的SQL优化上的规则。

      下面是DRDS相对于竞品最大不一样的地方,它有一个真·分布式执行器。我们后面会讲一个SQL,这是对分布式数据库最简单的试金石。我们有很多竞品,当你试用他们东西的时候,你会发现他们有非常多的限制,比如虽然说支持JOIN,但是必须是纬度相同的JOIN,如果不相同的时候会告诉你不能做。大家把这种东西也称之为分布式JOIN,这是很丢人的事情。和JOIN类似,对于子查询、聚合、排序、函数计算,DRDS不仅支持这个东西该下推就下推下去,如果识别出来不能下推的时候,在内存中会进行精准的运算,并且更准确地找到高效的运算方式,所以我们称之为真·分布式优化器,希望大家有所区分。

      对于DRDS来讲虽然出身于中间件,现在越来越像一个数据库了,因为具备了一个数据库应有的几乎所有元素,除了存储是MySQL以外,即使把存储能力抛弃掉,依然可以在内存中把我们的数据库做的东西做好。

      另外技术同学更加关心的东西是,比如在DRDS中子查询是基于Semi-Join的优化,Cost-Based模型等,以求大家会有很多机会了解它,这个机会我们会放到后面讲。

      除了强大的优化器之外,我们还能怎么样降低使用成本?在使用分布式数据库的时候都有一个疑问,我发现在单机数据库学的东西没有用了,比如我们要看MySQL的执行计划,这是很简洁的东西,基本上可以判断出SQL执行怎么样,但是要看懂分布式执行计划,真的太复杂了,非常罗嗦,不知所云。为了解决这个问题我们提出了一个小目标,我们希望新版的DRDS执行计划能够被我们任何一位技术同事看得懂,也能改动它,能自己做一些SQL的优化。

      举个例子,这个例子是我所说的对于分布式数据库的一个SQL执行能力的试金石。我们有这样一张表,是ID的拆分键,可以做COUNT(*)操作,对COUNT(*)结果做一个排序,这是很简单的聚合SQL。对于假·分布式执行器的产品来讲,没有办法执行这个SQL,因为这个SQL光下推到MySQL是不够的,你需要对不同节点的数据的结果加起来之后的结果再做排序。至少会要求你的分布式引擎能够有排序的能力。

      对于新版的DRDS会生成这样的执行计划,大家可以简单地看一下执行计划,下面执行到MySQL的物理SQL,会做一个归并排序,这样可以把COUNT(*)的节点结果加起来,然后做一个内存中的排序,把结果返回。

      虽然该执行计划还有优化的空间,但是我相信在座技术同学可以清晰地看出来SQL是怎么做的。

      不仅如此,我们还做了一个东西,类似于MySQL中EXPLAIN的功能,SQL是如何变成执行计划,把每一步输出给你看,比如对于刚刚的SQL,我们中间的执行计划是这样。大家可以发现,这个执行计划中聚合函数还在上面单独的节点中,物理SQL是简单的操作,这个执行计划也可以做,无非把数据全部拉到内存,在内存中做。这显然不是很优的执行计划。

      这个命令输出告诉你在这里有优化策略,可以把其中一部分下推到MySQL中,这里的节点发生变化了,不是做COUNT(*)操作,而是把COUNT(*)结果加起来,最后变成假装是COUNT(*)返回给我们。

      这样还不够,有一个优化规则,会生成一个排序的节点,当然是生成内存排序的节点,对排序的结果做优化。这样优化还不够,还会经历另外一个优化规则,把排序下推到MySQL上,这样可以发现内存的排序变成了高效的规定排序。

      这样的SQL是如何一步一步变成一个相对高效的执行计划。这在帮助大家了解分布式数据库的过程中会起到很大的作用,会帮助你达成刚刚所说的目标,任何人都可以学会分布式SQL的优化。

      关于更低使用成本——原生分布式事务。

      DRDS新版本将提供原生分布式事务的能力,即不需要申请也不需要执行奇怪的语句直接使用,更重要的一点是,比如你是私有云用户,您会发现它零依赖,除了DRDS以外不依赖任何组件,不需要购买其他的机器,当然事务的方案和之前一样,是柔性事务的方案,这里的容量可以提升百分之百。

      关于Outline,比如你觉得SQL比较慢,对于单机MySQL来讲是在前面加一个FORCE_INDEX,这时候开发可能会说,要改代码,要等着上线,要重启应用,对业务可能有损失,并且MySQL是DBA同学做,而改这个SQL需要开发同学做。在DRDS中可以通过这样的Outline为这样的SQL创建一个Outline,这个Outline中带有FORCE_INDEX,这样应用不需要做任何的修改,只要DBA同学自己做SQL马上可以走到这个索引。

      再举个例子,DRDS做读写分离的时候有一个MASTER/SLAVE HINT,如果发现有一个非常大的SQL,觉得这个东西不应该在主库上执行,因为可能会影响执行业务。你可以通过这样的Outline把这一类SQL全部转到只读实例上。

      更多功能比如可以创建一个Outline动态限制SQL的执行,甚至可以限制并发度,比如一类SQL超过10秒就可以干掉,你可以通过创建Outline的方式动态地干涉在DRDS中所干涉的执行计划,干涉的不仅是DRDS的Hint,也包含了所有的Hint,在使用Outline的时候,也可以对特定参数的SQL,比如就像对ID=1的SQL做限制也可以,也可以对一个模式的SQL做定义,这些都可以,不需要改任何的程序可以生效,DBA同学可以完成这样的操作。这可以试用下面的场景,动态地SQL做调整。

      我们认为这会极大地降低对DB的运维成本,对DB优化性的工作。

      回顾新一代SQL引擎给大家提供了哪些东西?

      首先是性能上的提升带来成本降低;原生分布式事务的支持和最好的查询优化器所带来使用成本的降低;Outline所带来的运维成本的降低。我希望大家对这个东西有所期待。

      3月31日在公有云购买的DRDS是这样的版本(公测时间)。

      这是一个开源的版本,我们会把代码放出去。


      现在大家应该有很多问号,我相信大家不想等到圆桌会得时间再提问,所以我先解答一下大家的疑问。

      这个版本会持续维护吗?是否是搞一个噱头,放出来一年更新一次代码。不会。

      功能是否被阉割?是否说你刚才所说的东西到了我们这里也只能下推,本来有100条优化策略只开源了10条出来?不会。

      是否是把几年前的老版本开源出来?不是。

      那开源出来的东西是否依赖淘宝内部的东西?阿里之前开源的东西可能会依赖内部的系统,不会。

      我敢它来生产吗?当然敢。

      跟其他开源产品比,怎么选?当你的场景是分库分表能够解决并且可能希望一些轻量AP操作的时候不需要选择这款产品。

      什么时候开源?8月1日。

      开源协议会不会是那种很恶心的不敢用的协议?不会。

      关于开源内容,这可以解决大家很多疑问,GitHub上DRDS的仓库就是我们内部DRDS同学开发所使用的仓库,所以这可以解决你很多疑问,比如是否是最新的,是否是阉割,是否会持续维护,相信通过这样的措施可以打消大家的疑虑。包含了DRDS的完整的代码,包括fastsql、优化器、执行器等等会开源出来。

      我们还会提供Docker镜像,可以直接上去敲SQL了,我们还会提供ESC镜像,用这个镜像在阿里云上把生产环境搭建出来。一个本地化的部署方式,零依赖,只需要在DRDS配置MySQL的用户名密码和IP端口就可以了。

      一个东西是否可以上线,光这些还不够,还提供基本的配套方案,比如运维文档,我们会出一个方案,这个方案会使用同样开源的组建帮助大家完成一个基本的生产条件,比如监控,数据的迁移,数据的同步,为什么这些东西和DRDS用在一起很好?大家可能知道几件事情,现在中国最流行的数据迁移和同步产品的作者就坐在我隔壁,他们会和DRDS做非常紧密的联动,让它变成一个完整的开源解决方案。您不需要依赖阿里云DRDS一套很复杂的管控系统,可以在自己的生产环境中用起来,并且由我们所说的功能,我相信如果想对它进行二次开发,也会变得简单。

      我希望说完这些之后让大家感觉到有一点兴奋。


登录查看更多
1

相关内容

SQL 全名是结构化查询语言,是用于数据库中的标准数据查询语言,IBM 公司最早使用在其开发的数据库系统中。
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
【大规模数据系统,552页ppt】Large-scale Data Systems
专知会员服务
60+阅读 · 2019年12月21日
【阿里技术干货】知识结构化在阿里小蜜中的应用
专知会员服务
96+阅读 · 2019年12月14日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
每个架构师都应该培养业务思维
InfoQ
3+阅读 · 2019年4月21日
亿级订单数据的访问与存储,怎么实现与优化?
码农翻身
16+阅读 · 2019年4月17日
爱奇艺基于AI的移动端自动化测试框架的设计
前端之巅
18+阅读 · 2019年2月27日
OLAP引擎这么多,为什么苏宁选择用Druid?
51CTO博客
12+阅读 · 2018年12月20日
干货 | 双11总峰值超8亿OPS 阿里分布式NoSQL如何岿然不动稳如山?
阿里巴巴数据库技术
10+阅读 · 2018年12月12日
为什么分布式一定要有消息队列?
互联网架构师
4+阅读 · 2018年7月5日
一篇文章读懂阿里企业级数据库最佳实践
阿里巴巴数据库技术
5+阅读 · 2017年12月20日
Arxiv
101+阅读 · 2020年3月4日
Neural Response Generation with Meta-Words
Arxiv
6+阅读 · 2019年6月14日
VIP会员
相关资讯
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
每个架构师都应该培养业务思维
InfoQ
3+阅读 · 2019年4月21日
亿级订单数据的访问与存储,怎么实现与优化?
码农翻身
16+阅读 · 2019年4月17日
爱奇艺基于AI的移动端自动化测试框架的设计
前端之巅
18+阅读 · 2019年2月27日
OLAP引擎这么多,为什么苏宁选择用Druid?
51CTO博客
12+阅读 · 2018年12月20日
干货 | 双11总峰值超8亿OPS 阿里分布式NoSQL如何岿然不动稳如山?
阿里巴巴数据库技术
10+阅读 · 2018年12月12日
为什么分布式一定要有消息队列?
互联网架构师
4+阅读 · 2018年7月5日
一篇文章读懂阿里企业级数据库最佳实践
阿里巴巴数据库技术
5+阅读 · 2017年12月20日
Top
微信扫码咨询专知VIP会员