导语
SuperSQL是腾讯自研的下一代大数据自适应计算平台。通过开放融合的架构,实现一套代码高效解决公有云、私有云、内网的任何大数据计算场景问题。我们通过将异构计算引擎/异构存储服务、计算引擎的智能化/自动化、SQL的流批一体、算力感知的智能调度纳入内部系统闭环,给用户提供极简统一的大数据计算体验。用户能够从繁杂的底层技术细节中解脱出来,专注于业务逻辑的实现,像使用“数据库”一样使用“大数据”,实现业务逻辑与底层大数据技术的解耦。
SuperSQL作为腾讯大数据智能计算平台的入口和决策中心,整合不同的大数据系统组件,旨在解决传统大数据架构下的痛点和难点问题,诸如大数据的语言门槛高、大数据引擎多而杂、大数据计算链路长而复杂、资源利用率低、存储异构、数据孤岛等。SuperSQL以自适应作为串联不同系统的能力抓手,通过自动、智能的方式解决传统大数据架构中的痛点问题:
融合计算平台已在天穹落地,服务微信、QQ、游戏等关键业务。平台每天承载百万级的计算任务,百PB级数据处理,百万级核数资源调度。本文将正式揭开新一代计算平台的面纱,揭秘如何实现大数据平台的自治化、智能化。
01
计算平台整体架构
SuperSQL提供了完整的端到端的大数据解决方案,适配公有云、私有云、内网不同的场景。整个架构可以分为四层:核心引擎层、计算层、资源层、数据编排层。
02
语法自适应:
解耦大数据语法和业务逻辑
SuperSQL支持对接不同类型的外部计算(执行)引擎,包括Presto、Livy、Hive、Flink,以及丰富多样的数据源,如MySQL、PostgreSQL/Tbase、Hive、TDW Hive (tHive)、SparkSQL/Livy、Oracle、Phoenix (Hbase)、ElasticSearch、Kylin、ClickHouse、Hermes、Druid、H2、Presto。
引擎之间、数据源之间所使用的SQL语法存在一定的差异,SuperSQL作为计算平台的入口能够有效屏蔽语法差异做到语法自适应,从而为整合不同的大数据系统组件提供基石。它能提供一套通用SQL语法,并通过SQL兼容转换功能来实现不同SQL语法之间的转换;做到在用户无需更改SQL语法的前提下实现底层执行引擎的切换,通过一套SQL语法,自动适配不同计算引擎和数据源语法。
顾名思义,SQL兼容转换功能整体可以划分为两个模块,即SQL兼容与SQL转换。
这种执行引擎的无感切换,不光能让SuperSQL平滑进行智能引擎选择,充分发挥引擎的优势特点,增加SQL执行效率;还能支持业务无感迁移,做到在用户无需更改SQL语法的前提下实现底层执行引擎的切换,并且尽量最小程度地更改用户的使用习惯。
通过SQL兼容和SQL转换,SuperSQL能够统一计算入口,整合大数据平台组件,降低大数据系统使用的门槛和繁琐程度。
03
引擎选择自适应:
智能选择引擎,加速SQL计算
智能引擎选择是自适应智能计算的核心功能之一,作为决策中心,SuperSQL通过组合算法,自动为每条用户SQL,挑选合适的不同类型的计算引擎(如Presto、Spark等)来执行,以提升用户体验(如响应时间快、可靠性高等)和资源利用率(CPU、内存等)。传统基于RBO/CBO的SQL优化框架,存在规则人工定制、统计信息缺失、历史流水闲置、失效资源浪费等几个主要问题。
针对这些问题,SuperSQL设计实现了基于历史负载的查询优化(History-based Optimization,HBO)和基于机器学习的引擎选择。HBO目标是分析处理历史用户SQL流水,以通用、抽象化的HBO策略,增强补充(非取代)已有的具体化RBO/CBO策略。机器学习算法可以自动学习SQL特征,更好地弥补人为规则的黑角。把HBO和机器学习结合起来,可以更好地降低日均提效失败(即错误选择引擎后执行失败)的SQL数,提升用户SQL的平均执行时间,减少引擎集群无效负载的同时节省宝贵的计算资源。
HBO框架的设计实现包括四个子模块,如下图中标示;它们也代表了一条用户SQL HBO优化的四个串行阶段。基于引擎选择(SQL优化)的实时性要求,整个HBO耗时必须控制在毫秒级。
作为业务效果样例,根据对接SuperSQL的某数据分析中台的SQL流水统计,HBO加持的SuperSQL智能引擎选择,可以大幅减少因为引擎选择错误导致的SQL failver。HBO规避的SQL类别大都是超大资源占用、海量分区读写、大规模Join等高计算开销类,日均可减少Presto引擎 34TB 的无效内存占用以及 33小时 的无效CPU时间。
HBO不能覆盖所有的SQL场景,对于周期性任务较为有效,但如果用户提交了新的查询,签名和历史不匹配,则难以决策。机器学习可以自动学习SQL特征,很好地弥补规则的缺失。实践中,直接把SQL字符串作为原始数据,具体训练过程如下:
机器学习可以进一步提升引擎选择的准确性,降低SQL failover率。基于内网的SQL流水测试,机器学习算法能够在HBO的基础上,SQL failover率降低60%。
04
计算运行时自适应:
实时捕捉环境变化,动态调整计算拓扑
传统的大数据架构下,整个计算链路通常是单向的,上层计算缺少底层状态(比如资源状态)的反馈。单向链路虽然简单,但会造成计算资源不均衡、资源利用不充分等问题。算力感知是自适应计算架构里底层反馈的桥梁,让上层计算具备感知资源状态的能力,进而自适应地调整资源使用。通过算力感知,可以获取计算资源整体的资源状态以及单节点详细的算力指标,上层计算借此自适应地动态调整计算决策、资源使用、任务调度等。
以Presto为例,作为一款典型的MPP架构、纯内存计算的交互式查询引擎,为了追求性能的最大化,Presto会尽可能地利用节点上可用的资源,包括CPU/内存/网络带宽等,节点间的物理资源规格也需要尽可能保持一致。然而在实际的使用场景中,节点的CPU/内存等负载(算力)是随时波动的,而Presto的原生任务调度策略并未将节点的算力考虑在内,导致在节点算力明显下降的情况下,计算任务会受到严重的影响,从而产生长尾问题。为此,天穹Presto做了针对性的优化,在动态的计算环境中,通过感知节点算力的变化,自适应地调整计算任务的调度,避免低算力节点的影响。
天穹Presto自适应任务调度主要分为:Task自适应调度与Split自适应调度,方案实现的核心思想是:根据节点的算力情况动态分配Split和Task,整体架构如下图所示:
天穹Presto Coordiantor在运行过程中,会实时感知Worker节点的算力变化情况,同时计算出对应的节点可用算力权重,在Task和Split的调度过程中,针对不同的算力权重,根据模型计算出相应的Worker上还可分配的Task或Split数目,对于算力严重下降的节点,少分配或不分配Task或Split,尽量避免长尾问题,从而做到自适应的调度。自适应调度效果:当计算Task在CPU波动比较大的节点上,会造成明显的计算长尾的问题,拖慢整个任务的运行,如下图所示,在没有开始自适应调度的情况下,Task的执行时间波动很大。
在开启自适应调度后,Task会避免调度到CPU算力差的节点,有效地消除长尾问题。如下图所示,Task的执行时间更加均衡,避免长尾问题影响整个计算任务的性能。
05
资源自适应:
资源统一池化,透明弹性伸缩
面向大规模集群部署,多集群是运维管理的常规手段。但从资源管理的角度,多集群会带来诸多问题:
资源自适应主要包括集群间弹性伸缩和集群内资源调度。每个租户对应一个虚拟K8S集群,每个租户都有最低的资源保障,租户之间能借用资源,也可以借用集群空闲资源。通过自适应调配资源,打破集群间的隔离,充分利用不同业务的潮汐效应,错峰使用资源,提升整体的资源利用率。
06
数据编排自适应:
融合异构存储,自动查询加速
在公有云、私有云、内网不同场景中,大数据底层存储是异构的,主要涉及COS、HDFS、Ceph、Ozone等。面向异构化的存储,统一融合计算平台构建了一层统一的数据编排层(DOP),位于计算和存储之间,透明化存储差异。通过适配不同的权限和认证体系的统一的存储Client,解耦计算和存储,避免不同计算引擎和不同存储间的相互适配工作,让计算和存储更加专注。
在大数据场景中,每天产生海量的数据,而数据治理往往赶不上数据积累的速度,海量元数据以及小文件会给存储Master节点(例如HDFS NameNode)极大压力,造成性能抖动。数据编排层会自适应缓存存储元数据,以及自动小文件合并,减轻Master节点压力,同时在跨DC数据访问时,加速元数据访问,提升数据访问速度。
数据编排层会针对不同的场景通过热数据缓存,加速计算性能。在内网的ad-hoc场景中,采用LRU/LRFU相结合的数据缓存策略,整体计算性能加速比2.6倍,而对于 IO 密集的SQL,加速达6.2倍。
07
场景架构自适应:
多元混合,架构统一
SuperSQL通过完善的数据下推、自研的跨DC CBO,可在多云混部架构中构建出最优的计算路径,实现更高效、更安全的数据分析。SuperSQL支持多云混合架构、跨DC、及跨云的联合数据分析,可打破数据孤岛,实现跨DC、跨云的数据访问链路,助力客户实现最大化的数据价值。在腾讯内部应用场景测试中,可以有效地降低跨DC高峰时段网络流量约30%。
08
总结 & 未来规划
未来SuperSQL会持续专注在统一融合计算平台中,打造更快、更稳定、更易用的大数据自适应智能计算架构,具体会在以下方向上持续探索潜力:
09
本文地址:http://www.gawce.com/quote/8114.html 阁恬下 http://www.gawce.com/ , 查看更多