SLS分析加速-SQL独享版实现原理和使用实践

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: SLS提供对海量日志数据进行聚合计算的分析能力(SQL),日志数据一旦写入,用户即可开箱即用地使用SQL进行计算分析,所见即所得。分析能力用户在使用SLS查询分析时,当数据规模(100+亿行记录)越来越大,查询时间范围(30+天)越来越长时,可能会遇到“查询结果不精确”或者直接“执行超时”的尴尬;或...

SLS提供对海量日志数据进行聚合计算的分析能力(SQL),日志数据一旦写入,用户即可开箱即用地使用SQL进行计算分析,所见即所得。 ​

一、痛点

用户在使用SLS查询分析时,当数据规模(100+亿行记录)越来越大,查询时间范围(30+天)越来越长时,可能会遇到“查询结果不精确”或者直接“执行超时”的尴尬;或者在中小数据规模(1~10亿行记录)下,希望拥有更高性能的分析能力,查询延时更短,为了解决用户的这类痛点和需求,我们推出“SQL增强”功能,为SLS分析提供加速能力。

二、实现原理

图1是典型的分布式计算架构,存储层负责数据的读写,计算层负责计算和分析。 SLS中将存储层抽象为分区(Shard),同时将计算层抽象为SQL,对用户提供免费的计算资源,以实现查询分析能力。 针对上述痛点,想要实现SLS的分析加速,从本质上来说,是要提升计算层的计算能力。在实践和使用过程中,也产生了如下几种实现方案,我们分享在此,并与SQL增强做对比,希望读者更清楚地理解SQL增强的实现原理。 image.png图1 ​

2.1 扩展分区(Shard)实现一定的计算能力扩展

当分析能力不够的时候,我们可以通过手动分裂Shard来扩展一定的计算能力,如图2所示 image.png图2 ​

然而这种方式并非完美,存在诸多不足:

  • 首先,Shard分裂对历史数据无法失效,只对新写入数据生效,当用户对历史存量数据进行统计分析,通常情况下用户往往无法做到提前的准确规划和部署

  • 其次,活跃Shard会产生额外的租用费用(详见《为什么会产生活跃Shard租用费用?》),用户为了少量的超大规模的查询分析而长期持有大量活跃shard,对成本造成一定的浪费

  • 此外,Shard分裂对计算能力的扩展有限,其本质上是扩展存储层的能力,计算层由于是多租户分时租用,为了保障多租户间的隔离性,会对单次查询的计算资源做限制(如查询并发数、扫描数据量等)

  • 最后,Shard分裂、合并操作均需要用户手动处理,且仅对新数据生效,很难满足用户弹性多变的查询分析需求

2.2 大查询分割成多个小查询,进行二次聚合

针对大规模数据无法计算精确的问题,很多有经验的SLS用户使用了这种方式:既然一次查询计算不了,那就将单个大查询切分成多个小查询,然后再进行二次聚合,最终得出需要的分析结果。 但是这种方式弊端也很明显:

  • 上层有维护和开发成本,需要保存小查询的计算结果,并进行二次聚合

  • 维度爆炸,业务的分析需求往往是复杂多变的,每当分析维度变化,都可能带来二次聚合的变更成本

  • 数据规模本身非常大,切分粒度已经控制得很小了,但是计算仍然比较吃力

2.3 SQL增强,弹性扩展计算能力

为了解决用户对计算资源的需求,我们提供了“SQL增强”功能,当用户需要大规模计算分析能力的时候,为用户提供弹性的独享计算资源,实现真正的弹性扩展计算能力、按需使用。图3为SQL增强的实现原理,当用户在查询时开启SQL增强后,SLS会根据本次查询的实际计算需求,合理调度独享资源参与计算,加速整个查询分析过程。 image.png图3

相比以上两种方式,SQL增强实现了真正的计算能力的弹性扩展,且有以下几点优势:

  • 计算资源弹性扩展,按需使用

  • 计算与存储(Shard)无强制绑定,无需用户提前规划和运维管理

  • 突破免费资源的分时租用限制,享受独享资源

  • 免除额外的开发和运维成本,不管什么数据规模(从几万-千亿级别),一条SQL帮您搞定分析,无需再做上层二次聚合

三、普通SQL和SQL增强的特性对比

** 下表列举出目前普通SQL和SQL增强在各个维度上的对比:**

| | 普通SQL | SQL增强 | | --- | --- | --- | | 并发查询数 | 单个Project支持的最大分析操作并发数为15个 | 单个Project支持的最大分析操作并发数为150个 | | 扫描数据量 | 单个Shard单次仅支持分析1 GB数据 | 单次分析最大支持扫描2000亿行数据 | | 计算资源 | 免费资源,分时租用有使用限制 与分区Shard数有一定的配比关系 | 独享资源,资源上限有用户自定义 与分区Shard数无绑定关系 | | 费用 | 免费 | 目前公测免费 后续计划根据实际使用的CPU时间付费,更多信息,请参见计费项| | ​ | | 更多增强特性,敬请期待。 |

四、什么场景下推荐使用SQL增强

我们推荐在遇到如下场景时,使用SQL增强:

  • 超大数据规模的计算分析(如SLS报“计算结果不精确”)

  • 历史周期长且数据规模大的计算分析(如SLS报“execution timeout”)

  • burst高并发查询(如定时告警、定时调度等,可能一次性同时触发多个SQL请求,如SLS报“user can only run 15 query concurrently”)

五、使用实践

为了让读者更真切地体会SQL增强,我们提供了一个1000+亿行Nginx访问日志的模拟环境,供SLS用户免费在线体验,享受SQL增强带来的极致加速感。 image.png

接下来,我们分别在不同数据规模(1000+亿、10+亿、1+亿)下演示SQL增强的使用实践 我们使用上述模拟环境,选择查询时间段为3天,对1000亿行日志数据进行计算分析,使用SQL测试用例如下:

  • | select sum(request_length), avg(request_time), avg(upstream_response_time) ​

1000+亿数据规模下的计算分析

使用普通查询

image.png

使用SQL增强

使用SQL增强非常简单,只需要在SLS控制台查询页面右侧,点亮“SQL增强”按钮即可。 如果您是开发者,使用SDK或者API调用,也可以开启SQL增强,详情请参考GetLogs的powerSql参数。 image.png下表是普通SQL和SQL增强,在1000+亿数据规模、同样SQL下的执行表现对比:

| | 普通SQL | SQL增强 | 提升效果 | | --- | --- | --- | --- | | 日志总条数 | 100,000,863,644 | 100,000,863,644 | | | 查询状态 | 查询结果不精确 | 结果精确 | | | 扫描行数 | 9,084,644,562 | 100,000,863,644 | 10X | | 查询时间 | 3,054ms | 7,258ms | 10倍数据扫描量,仅增加了1.38倍延迟 | | 消耗CPU时间 | 392.759s | 9,459.867s | 23X | | 结果行数 | 1 | 1 | |

可以看到,开启SQL增强后,能够在7.3s内扫描1000+亿行数据,并完成精确计算。相比普通SQL,计算结果精确、扫描行数提升10倍、运行CPU时间提升23倍,延时仅增加了1.38倍。 ​

10+亿数据规模下的计算分析

使用普通查询

image.png

使用SQL增强

image.png下表是普通SQL和SQL增强,在10+亿数据规模、同样SQL下的执行表现对比:

| | 普通SQL | SQL增强 | 提升效果 | | --- | --- | --- | --- | | 日志总条数 | 1,006,371,097 | 1,006,371,097 | | | 查询状态 | 结果精确 | 结果精确 | | | 扫描行数 | 1,006,371,097 | 1,006,371,097 | | | 查询时间 | 2,176ms | 1,692ms | 延时缩短了22% | | 消耗CPU时间 | 60.18s | 93.517s | 提升了55% | | 结果行数 | 1 | 1 | |

1+亿数据规模下的计算分析

使用普通查询

image.png

使用SQL增强

image.png下表是普通SQL和SQL增强,在1+亿数据规模、同样SQL下的执行表现对比:

| | 普通SQL | SQL增强 | 提升效果 | | --- | --- | --- | --- | | 日志总条数 | 123,306,893 | 123,306,893 | | | 查询状态 | 结果精确 | 结果精确 | | | 扫描行数 | 123,306,893 | 123,306,893 | | | 查询时间 | 1,036ms | 831ms | 延时缩短了20% | | 消耗CPU时间 | 7.183s | 11.021s | 提升53% | | 结果行数 | 1 | 1 | |

结合上面三种不同数据规模下的使用实践,可以看到,在超大数据规模(1000+亿)下,SQL增强通过提供额外的独享计算资源,可以完成普通SQL无法完成的精确计算任务,并大幅提升了计算效率;而在10+亿和1+亿数据规模下,普通SQL和SQL增强均可完成精确计算,但是SQL增强可以投入更多CPU资源(约50~55%)加速计算,使计算延时缩短20%左右。 ​

控制和管理SQL独享资源使用上限

在提供了SLS分析加速能力的同时,我们还贴心地为用户提供了独享资源使用上限(SQL独享实例CU数)的设置,默认值1000,该值表示一次查询可并发运行的任务数,它有效控制了计算核时的资源,**避免意外造成的计算资源使用过量,产生不必要的费用。**用户可以前往目标Project的概览页面中进行自定义的配置。 image.png

参考文档

开启SQL独享实例:https://help.aliyun.com/document_detail/223777.htm

SLS SQL分析概述:https://help.aliyun.com/document_detail/53608.html

1000+亿日志数据模拟器:https://sls4service.console.aliyun.com/lognext/project/simulator-parallel-sql-demo/logsearch/nginx-log?encode%3Dbase64%26queryString%3D%26queryTimeType%3D99%26startTime%3D1626710400%26endTime%3D1626969600&isShare=true&readOnly=true&hideTopbar=true&hideSidebar=true

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
SQL 存储 API
Flink实践:通过Flink SQL进行SFTP文件的读写操作
虽然 Apache Flink 与 SFTP 之间的直接交互存在一定的限制,但通过一些创造性的方法和技术,我们仍然可以有效地实现对 SFTP 文件的读写操作。这既展现了 Flink 在处理复杂数据场景中的强大能力,也体现了软件工程中常见的问题解决思路——即通过现有工具和一定的间接方法来克服技术障碍。通过这种方式,Flink SQL 成为了处理各种数据源,包括 SFTP 文件,在内的强大工具。
101 15
|
21天前
|
缓存 监控 算法
分析慢日志文件来优化 PHP 脚本的性能
分析慢日志文件来优化 PHP 脚本的性能
|
13天前
08-06-06>pe_xscan 精简log分析代码 速度提升一倍
08-06-06>pe_xscan 精简log分析代码 速度提升一倍
|
2月前
|
存储 分布式计算 大数据
【Flume的大数据之旅】探索Flume如何成为大数据分析的得力助手,从日志收集到实时处理一网打尽!
【8月更文挑战第24天】Apache Flume是一款高效可靠的数据收集系统,专为Hadoop环境设计。它能在数据产生端与分析/存储端间搭建桥梁,适用于日志收集、数据集成、实时处理及数据备份等多种场景。通过监控不同来源的日志文件并将数据标准化后传输至Hadoop等平台,Flume支持了性能监控、数据分析等多种需求。此外,它还能与Apache Storm或Flink等实时处理框架集成,实现数据的即时分析。下面展示了一个简单的Flume配置示例,说明如何将日志数据导入HDFS进行存储。总之,Flume凭借其灵活性和强大的集成能力,在大数据处理流程中占据了重要地位。
43 3
|
2月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
2月前
|
SQL 流计算
Flink SQL 在快手实践问题之由于meta信息变化导致的state向前兼容问题如何解决
Flink SQL 在快手实践问题之由于meta信息变化导致的state向前兼容问题如何解决
39 1
|
2月前
|
SQL 安全 流计算
Flink SQL 在快手实践问题之Group Window Aggregate 中的数据倾斜问题如何解决
Flink SQL 在快手实践问题之Group Window Aggregate 中的数据倾斜问题如何解决
57 1
|
1月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
67 0
|
2月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
40 0
|
2月前
|
SQL 数据采集 数据挖掘
为什么要使用 SQL 函数?详尽分析
【8月更文挑战第31天】
25 0