暂无图片
暂无图片
14
暂无图片
暂无图片
26
暂无图片

降价46%,Hologres Serverless Computing 快速入门

原创 阿里云大数据AI技术 2025-03-11
91

作者:恒定 Hologres 研发

Hologres Serverless Computing 可以通过按量付费的形式稳定执行大规模ETL与查询,实现资源负载隔离,同时提高查询速度,降低成本,针对北京、上海、杭州、深圳四个地域,Hologres Serverless Computing 已于2025年 1月20日 10:00 起调价,由 0.66元/CUH 降至 0.3542元/CUH(与独享资源按量付费单价相同)。

云计算对资源的利用经历了多个阶段,从传统裸机阶段资源利用率大概为 10% 至 20%,到引入虚拟化和容器化技术后资源利用率为 50% 左右。随着云计算所承载业务的复杂度不断提高,Serverless 实现了资源的按需分配,做到了对资源的高效利用,在实时数据仓库领域向 Serverless 化方向演进的背景下,Hologres 提出了一种新的云计算执行模型 Serverless Computing,具有灵活性、可扩展性、成本效益、负载隔离、高效开发、可靠性等核心优势,为用户提供了一种更加高效、灵活、可扩展性强和更低成本的解决方案。

Hologres Serverless Copmuting在阿里集团每天使用超过2万Core,综合内存水位下降50%,成本节约20%-30%。在具体双11大促的使用场景中,性能提升200%,延迟降低85%。

本文将首次对外公开揭秘 Hologres Serverless Computing 的整体架构及使用以下章节会对此进行详细介绍。

1.  整体架构

1.1 Serverless Computing 架构介绍

在 Hologres 使用过程中,通常会面对以下场景与难题:

  • 实例的预分配资源数量难以契合实际业务资源需求的波动:Hologres 采用独占的预分配资源模式,用户一般采用最大计算资源需求量作为实例的规格,但用户全天整体负载通常呈现潮汐分布,难以做到全天候资源的有效利用,空闲阶段的低负载导致用户预留的大部分闲置资源被浪费,高峰阶段易出现数据量突增导致实例资源紧张。
  • 不同类型的负载互相影响:Hologres 作为一体化实时数仓,支持多种不同类型的工作负载,例如实时写入,OLAP Query 等;如果未能管理好各类负载,不同类型工作负载之间的 Query 互相竞争计算资源,导致 Query 性能不稳定,造成一定的抖动现象。

针对上述痛点,Hologres 提出了 Serverless Computing 来解决用户使用中遇到的资源难题,其架构如下图所示:

Serverless Computing Pool 是由 Hologres 托管的公共资源池,允许用户将实例中的任务提交至 Serverless Computing Pool 中,每个任务可以根据实际需求进行动态的资源分配,确保每个任务的高效执行。使用Serverless Computing Pool 资源执行后,有如下优势:

  • 按需付费,无需保留资源:Serverless Computing 可以根据用户需求动态的调整资源分配,并且具有弹性扩展的能力。用户不再需要担心资源过度或不足的问题,应用程序可以处理突发的流量高峰而无需人工干预,保证任务的灵活高效执行。
  • 弹性资源,即用即释放:Serverless Computing Pool 的资源一般比用户实例的资源大很多,且具备很好的弹性扩缩能力,可以应对用户复杂的潮汐流量等场景,支持用户使用超出本实例规格数的资源,用户任务执行成功后,资源立刻释放。
  • 资源隔离,运行稳定:Serverless Computing Pool 由整个可用区的所有用户共享,所有用户之间公平调度,用户任务申请到资源后独占使用,避免了不同任务间的资源竞争导致的互相干扰,保证大任务稳定高效的执行。

1.2 Serverless Computing 解决的问题

通过使用 Serverless Computing,用户可以解决但不仅限于以下几个问题:

  1. 用户的大任务、大 ETL 跑得慢、跑失败、跑 OOM 的问题。

如果用户提交的某任务所涉及的资源需求量和用户实例的预留资源数量不匹配,出现了跑得慢、跑失败甚至是跑 OOM 的问题,影响到了任务的成功率,将该任务转为使用 Serverless 资源运行后,可以根据任务所需的资源量进行按需分配,支持分配比预留资源数更多的来自 Serverless Computing Pool 的资源来加速任务执行,保证任务的灵活性和可扩展性。

  1. 用户的大任务、大 ETL 争抢资源,给生产等其它查询带来的抖动问题。

如果用户存在混合负载的工作场景,在未能管理好各类负载的情况下,很有可能会发生资源争抢的问题,例如某一用户提交的 Ad hoc query 进行了全表扫描,消耗资源过大导致实例的生产任务抖动。Serverless Computing 能很好的应对这种突发式的高资源需求场景,做到完美的负载隔离能力,保证用户始终拥有流畅无缝的体验。

  1. 用户需要为大任务、大 ETL 预留大量资源,支付了高昂的费用问题。

用户通常需要为日常的大任务预留充足的计算资源,并随着实际业务应用场景的演进不断调整预留资源数,用户将大任务转为使用 Serverless Computing 后,不需要为大量的闲置资源付费,仅按实际使用量付费,而且可以以很低的成本使用背后上万 Core 的 Serverless Computing Pool 的资源来加速自己的任务,在资源上可以有几十倍甚至百倍的优势。

1.3 Serverless Computing 的价值

Serverless Computing 的价值主要体现在以下几个方面:

成本效益和负载隔离:用户很难将实例的预分配资源做到 24 * 7 的高效利用,以最大资源需求量作为实例规格造成了成本浪费,Serverless Computing 的按需资源分配和用完即释放的能力,用户只需为实际使用的资源付费,大大降低了成本,且可以实现完美的负载隔离能力。

灵活性和可扩展性:Serverless Computing 可以根据用户需求动态的调整资源分配,并具有弹性扩展的能力,能很好的处理负载变化难以预测和负载时常剧烈变动的应用,用户无需担心资源过度或不足的问题,免去对实例资源变配等运维负担,提高用户的灵活性和可扩展性。

高效开发:Serverless Computing 使用简单,用户仅需通过简单的配置即可使用 Serverless Computing,用户不需要将精力关注在资源使用和负载管理上,使用户更加专注与业务创新和业务逻辑的开发,极大提高开发效率和敏捷性。

可靠性:Serverless Computing 使用的计算资源是由 Hologres 托管的公共资源,由 Hologres 提供商负责管理和维护,保证任务的可靠性。

总体来说,Hologres Serverless Computing 具有灵活性、可扩展性、成本效益、负载隔离、高效开发、可靠性等优势,为企业和开发人员带来了诸多价值,随着云计算技术的不断发展和完善,Serverless Computing将在各个领域发挥越来越重要的作用,成为推动数字化转型和创新的重要工具,是未来云计算发展的重要趋势。

2. 最佳实践

2.1 Serverless Computing 使用入门

Serverless Computing 的使用非常简单,下文将从基本使用、资源分配,观测工具三个方面介绍 Serverless Computing 的使用入门。

基本使用

  1. 实例级别开启和关闭 Serverless Computing

目前 Hologres 支持通用型和计算组类型开启 Serverless Computing,具体操作如下图所示:

  • 对于新购实例,可直接在购买页面选择实例具体配置时,将 Serverless Computing 开关打开即可;
  • 对于存量实例,将实例管控台页面上的 Serverless Computing 开关,按照指引操作即可。

注意事项:

  • 如果上述操作页面中的 Serverless Computing 开关为灰色,则说明当前可用区或者地域内暂不支持 Serverless Computing,可在管控台提交工单进行咨询。
  • Hologres 2.1.17 版本以上支持开启 Serverless Computing。但 2.1 版本仅支持 DML 类型的 SQL,2.2 及以后的版本,支持 DQL 和 DML 类型的 SQL。
  • 实例级别开启和关闭 Serverless Computing 均会导致实例重启,应选择在业务的低峰期进行变配操作,通常需要花费 2-5 分钟。实例级别关闭 Serverless Computing 后,不再支持指定 Serverless 资源,且当前运行和排队的 Serverless 任务均失败。

  1. 如何使用 Serverless Computing

目前 Hologres 支持在多个级别下使用 Serverless Computing,分别是 SQL 级别、USER 级别、DB 级别和 Query Queue 级别。如下代码所示,仅需加上简单的配置即可使用 Serverless 资源,无需对业务进行调整。

建议用户在 SQL 级别和 USER 级别上设置 Serverless,不推荐在 DB 级别下默认设置,一旦在 DB 级别默认设置后,该 DB 下所有能使用 Serverless 资源的 Query 都将使用 Serverless 资源,易造成排队,甚至大幅降低实例资源利用率。

-- 1. SQL级别设置
SET hg_computing_resource = 'serverless';
-- 2. 某用户在某DB下提交的SQL,默认使用 Serverless Computing 资源执行
ALTER USER <user_name> IN DATABASE <db_name> SET hg_computing_resource = 'serverless';
-- 3. 某用户提交的所有SQL,默认使用 Serverless Computing 资源执行
ALTER USER <user_name> SET hg_computing_resource = 'serverless';
-- 4. 设置目标Queue中的查询全部通过 Serverless Computing 资源运行
CALL hg_set_query_queue_property('<query_queue_name>', 'computing_resource', 'serverless'); -- 通用型实例
CALL hg_set_query_queue_property('<warehouse_name>', '<query_queue_name>', 'computing_resource', 'serverless'); -- 计算组型实例
复制

Serverless Computing 的使用有一些限制,例如 Fixed Plan 的实时写入 Query 以及多行 DML 事务的 Query 均不支持使用,具体限制请参考文档。在开发时,可以通过 explain 工具查看 Query 的执行计划。如下图所展示的执行计划中:

  • 第一条 query 将 computing resource 设置为 serverless,且满足使用条件,其执行计划中将出现 Computing Resource:Serverless的关键字。
  • 第二条 query 为 Fixed Plan 的实时写入 Query,不支持由 Serverless Computing 资源运行。
  • 第三条 query 将 computing resource 设置为 local,将默认使用用户实例的资源执行,不会显示 Serverless 相关关键字。

此外,Serverless Computing 支持和 Query Queue,Dynamic Table 等功能联动,做到更优的负载均衡和资源管理:

  • Query Queue 支持大查询管理,对于 Queue 中的超过执行时长或内存溢出指定阈值的大查询,支持使用Serverless Computing 资源进行自动重跑,保证大查询不对影响实例负载,确保系统的稳定性和响应效率。具体请参考文档
  • Query Queue 支持指定某个查询队列中的查询全部由 Serverless Computing 资源执行,保证某一类 Query 的资源隔离,具体请参考文档
  • Dynamic Table 支持指定计算资源,可以有效地提升刷新任务的稳定性,避免本实例内多任务间的资源争抢,具体请参考文档

资源管理

Serverless Computing 在使用过程中和资源申请及分配密切相关,本节将介绍 Quota,资源申请以及资源管理等能力。

  1. Quota

Quota 指的是用户实例在运行阶段内的 Serverless Query 所占用的 Serverless Computing 资源的上限值。这个值一般是实例独享资源的 3 倍,具体规则如下:

  • 若 32 CU <= 实例计算资源 <= 688 CU,Serverless Computing 资源 Quota 为实例计算资源的 3 倍
  • 若实例计算资源 >= 688 CU,支持最高达到 2048 CU 的资源配额。

如果用户当前使用的 Quota 超出限制或 Serverless Computing Pool 资源紧张时,提交的 Query 会进入排队状态等待资源。用户可在管控台的监控指标上看到 Quota 使用率的变化,并对 Quota 的使用情况进行实时监测。

  1. 资源申请

Hologres 在申请 Serverless Computing 资源前,会对资源需求数进行估算,目前估算的资源数量有两种方式,分别为:

  • 自动估算资源:根据 Query Plan 的整体复杂度及读写表所在的 Table Group Shard 数量进行综合预估,保证资源申请的利用率最优;
  • 手动执行资源:通过设置参数 hg_experimental_serverless_computing_required_cores 手动指定资源数量,单位为 CU。

下图是一条简单 SQL 的两个不同的执行计划,分别是对一个表的两列做 COUNT_DISTINCT 操作。左边的执行计划中使用的 CTE 将复用对该表两列的扫描。后续两个 COUNT_DISTINCT 操作会复用 CTE 的扫描结果。右侧的执行计划分别对表的两列做两次 Scan 操作,再 Append。两种不同的方式展示了同一条SQL的不同执行计划,在 Serverless Computing 中,两个不同的执行计划可能会分配到不同数量资源。

  1. 资源管理

管理好 Quota 可以提高资源利用率,下文介绍资源管理和 Query 优先级设置的方式。

单条 Query 可使用的 Serverless Computing 资源量由以下三个参数决定。系统将取以下三个参数的最小值进行资源申请。

  • Quota;
  • 参数hg_experimental_serverless_computing_max_cores:每条 Query 可被分配的资源上限;
  • 当前 Query 所需的计算资源数,默认使用自动估算资源值,若手动设置参数hg_experimental_serverless_computing_required_cores,则将采用该值。

Serverless Computing 目前提供五个优先级供用户管理 Serverless 资源的使用,通过参数 hg_experimental_serverless_computing_query_priority 进行设置,默认值是 3,优先级的范围是[1,5],数值大则代表优先级越高,即优先分配资源。

例如,假设现有Hologres实例规格为 32 CU,该实例可使用的 Serverless Computing 资源上限为 96 CU。当 Query A 正在使用 Serverless Computing 的 64 CU资源运行,同时,Serverless 任务队列中已有 Query B(需要申请 48 CU资源,优先级5)、Query C(需要申请32 CU资源,优先级3)等待运行。此时,系统会等待 Query A 执行完成后优先申请 48 CU 资源用于执行 Query B,而非先使用剩余的 32 CU 资源来执行 Query C。

根据不同 Query 任务场景下紧急程度的不同,进行优先级的设置,避免阻塞排队现象,保证利用率最优。例如,对于一些 OLAP Query,可以设置高优先级,对于一些离线场景的 ETL 导入,可以使用较低优先级,避免影响其他 Serverless Query 的排队时间,保证 Quota 利用率最优。

观测工具

本节介绍 Serverless Computing 相关工具,以对 Serverless Computing 进行实时的观测和监控。

  1. 活跃 Serverless Computing Query 管理

系统视图 hg_stat_activity 提供活跃 query 的管理能力,如下图所示,running_info 字段包括 Computing Resource、Query 执行阶段,排队时间及资源申请情况,用户可通过查看 hg_stat_activity 视图来对活跃的 Serverless Query 进行实时管理,并实时监测 Serverless Computing Query 的排队时间,避免发生阻塞现象。

  1. 历史 Serverless Computing Query 记录

系统视图 hologres.hg_query_loghologres.hg_serverless_computing_query_log 提供完整的历史 query 运行记录,具体介绍请参考文档

下图展示了一条历史 Query 的运行记录,查询相关字段可获取执行细节,如排队时间、资源分配信息、运行时的 Query 优先级以及单条 Query 使用资源的上限等。

  1. 手动优化 Serverless Computing Query 资源申请量
  • 在开发调试时,可通过查询历史 Serverless Computing Query 记录的资源申请信息,也可以根据 SQL 指纹查询同类型 Query 的历史资源消耗,以作为手动设定 Serverless Computing 资源数量的参考。
  • Explain Analyze 会手动执行 SQL 一次,并获取详细的统计信息。在开发时,可以参考 Explain Analyze 结果提供的实际分配的 Serverless 资源信息、Query的优先级以及排队时间等信息,作为手动指定资源申请数量的参考。该工具会将提交的 SQL 实际执行一次,会申请资源并收取相应的费用。
  1. 监控指标

Hologres 管控台提供了 Serverless Query 最长运行时长、Serverless Computing Query 排队数量、Serverless Computing 资源 Quota 使用率的监控指标。在日常使用中,用户可以对这三个监控指标设置相应的监控报警规则,以实时监控实例中的 Serverless Computing Query。使用流程请参考文档

2.2 Serverless Computing 适用场景

Serverless Computing 功能适用的场景如下:

  • 大 SQL 作业频繁OOM,期望提升作业成功率与实例稳定性
  • 场景示例:当前独享实例规格较小,独享计算资源量较少,大数据量导入、大数据量查询的作业频繁遇到OOM(out of memory)报错。
  • 优化建议:推荐使用 Serverless Computing 执行该部分作业,最多可申请实例独享计算资源的3倍资源,作业执行期间该部分资源不与其他任务共享,显著提升大作业执行成功率,显著提升生产实例稳定性。
  • 当前实例在流量低峰期资源闲置较多,期望提升资源利用率、降低成本
  • 场景示例:当前实例为了一部分低频率的大作业而扩容计算资源,该部分大作业每天的执行总时长小于8小时。
  • 优化建议:推荐使用 Serverless Computing 执行该部分作业,缩容独享实例预留计算资源。即可显著提高独享实例资源利用率,不需为大量闲置资源付费,仅需为大作业的计算资源实际使用量付费。
  • 适用于当前实例在流量高峰期资源紧张,且通过分时弹性增加一倍资源仍难以缓解资源压力,期望进一步提升资源量、解决流量峰值问题的场景。
  • 优化建议:推荐按用户或查询队列级别进行设置,在流量高峰期,使用 Serverless Computing 执行某个用户或某个查询队列的全部请求。由于 Serverless Computing 最多可申请本实例独享计算资源的三倍资源,因此可显著缓解流量高峰时的查询压力。

Serverless Computing计算资源不能完全替代独享计算资源,主要区别在于:

  • Serverless Computing 计算资源由当前可用区所有用户共享,用户之间公平调度,查询请求可能会受当前Serverless Computing Pool 的资源水位影响而增加排队时长;独享计算资源为当前实例预留,实例或计算组在 running 状态时不会回收,不会受其他用户实例影响。因此,在查询延时敏感的场景下,更适合使用独享计算资源。
  • Serverless Computing 无法支持在线服务场景,包括通过Flink实时写入、DataWorks 数据集成实时写入、Holo Client实时写入、通过Fixed Plan的在线点查等,详情请参见文档

2.3 Serverless Computing 应用实践

Hologres 作为一体化实施湖仓平台,Serverless Computing 已在阿里云上以及阿里集团内部客户的多种不同生产场景中得到了广泛的验证和使用,极大地提高了数据开发和应用效率。

  1. 用户使用 Serverless Computing 之前,其独享资源实例规格是 512 Core,在夜间的写入任务用掉了大部分计算资源,但在白天的实例负载较低。用户使用 Serverless Computing 之后,将实例降配至 256 Core,并将夜间的写入任务使用 Serverless 资源运行,实现了大任务的资源隔离,保证独享实例的可用性,实现了整体降本。

  1. 在云上某客户应用案例中,通过使用 Serverless Computing 实现了资源的按需分配和按量付费,节省了预留的计算资源费用,实现了 100% 的 ETL 执行成功率。

3. 展望与总结

目前 Serverless Computing 通过实现按需动态分配资源、支持资源隔离等能力,用户解决了 大任务/大ETL 跑不出来、大任务/大ETL影响其它查询带来抖动、大任务/大ETL需要支付高昂的资源成本费用等一系列问题,未来我们也在规划通过 Serverless Computing 解决更多的问题:比如可以基于 Serverless Computing 实现 Query 的自动加速 (Query Acceleration Service) 、自动的大查询隔离、自动的负载隔离等能力。

Serverless Computing 作为一种新的云计算执行模型,具有灵活性、可扩展性、成本效益、负载隔离、高效开发、可靠性和安全性等核心优势,为用户提供了一种更加高效、灵活、可扩展性强和更低成本的解决方案,真正做到了为业务降本增效。期待 Serverless Computing 未来在各个领域发挥越来越重要的作用,成为推动数字化转型和创新的重要工具。

开启Serverless Computing>>>

Serverless Computing操作demo>>>

最后修改时间:2025-03-24 12:04:07
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

小草
暂无图片
12天前
评论
暂无图片 0
降价46%,Hologres Serverless Computing 快速入门
12天前
暂无图片 点赞
评论
ccc
暂无图片
16天前
评论
暂无图片 0
火山引擎ByteHouse助力抖音集团降本60%
16天前
暂无图片 点赞
评论
数据中心
暂无图片
16天前
评论
暂无图片 0
灵犀科技实现计算效率提升
16天前
暂无图片 点赞
评论
风行
暂无图片
16天前
评论
暂无图片 0
降价46%,Hologres Serverless Computing 快速入门
16天前
暂无图片 点赞
评论
雪狼sunny
暂无图片
16天前
评论
暂无图片 0
降价46%,Hologres Serverless Computing 快速入门
16天前
暂无图片 点赞
评论
铜线
暂无图片
16天前
评论
暂无图片 0
计算效率提升10倍,存储成本降低60%
16天前
暂无图片 点赞
评论
查看更多 >