深度揭秘阿里云函数计算异步任务能力

在上篇文章《解密函数计算异步任务能力之「任务的状态及生命周期管理」》中,我们介绍了任务系统的状态管理,并介绍了用户应如何根据需求,对任务状态信息进行实时的查询等操作。在本篇中我们将会进一步走进函数计算异步任务,介绍异步任务的调度方案以及系统在可观测性方面所支持的各项功能。

任务调度

任务调度多指系统根据当前负载情况,将不同任务放到合适的计算资源中去执行的相关操作。一个完善的调度系统往往需要平衡不同特点的任务间的隔离以及效率最优这两个需求。函数计算异步任务采用了独立队列模型及自动负载均衡策略,具备在不影响处理性能的前提下进行多租隔离的能力。

Serverless Task 任务调度模型

当用户提交一次任务后,系统会将该任务转换为一条消息,并通过异步下发的方式放入到内部队列中。一条消息的处理流程如下图所示:

图 1

整个系统在任务调度方面的多租隔离及消息积压控制方面主要依赖的是 Scheduler 对于队列的消费及控制。我们事先会为每一位用户划分一个账号级别的队列,该用户的所有函数的异步调用(包括任务调用)会共享该队列。

这样的模型结构会保证每个用户的异步执行请求(包括任务调用)均不会受到其他用户的调用情况的影响。但是在一些大规模应用场景,如一个用户的函数很多,并且每个函数的调用量都很大的情况下,所有的异步消息共用一个队列难免造成调用间的相互影响。部分长尾调用可能会过多的消耗队列的资源,导致其他函数的执行出现饥饿的现象。

为了避免这种情况影响重要函数的执行,函数计算提供了更细力度的队列 - 函数级别的队列。可以通过对每个不同函数设置单独的队列,确保高优先级函数的消费情况不会受同账号下的其他函数执行的影响。队列间的关系如下图所示:

图 2

典型的应用场景

假设某用户 A 具有 2 个不同的任务函数。其中一个任务 A 由于下游服务的限制,需要一个消息一个消息的执行;而另外一个任务 B 是大并发任务,并且希望尽快执行完。在默认模式下,任务 A 和 B 共享同一个用户队列;这时会出现如下场景:任务 A 由于具有并发度限制,函数计算侧会对整个任务队列进行出队速率控制。这就导致了任务 B 的任务迟迟无法出队。而当任务 A 执行完后,任务 B 得到了出队机会,此时并发度升高,任务 B 的消息抢占了资源池进行执行,任务 A 又变得难以出队,很长时间也无法开始一次执行。这样的结果就是无论 A 还是 B 都受到了对方业务的严重干扰。

当进行队列调整后,任务 A 和 B 分别独占队列。在这种情况下任务 A 和 B 的消费速度不受对方影响,都可以达到自身的诉求。

目前 Serverless Task 提供了任务积压大盘,您可以在任务界面获取目前已经积压的任务数,综合分析是否需要开启函数的独占队列。

Serverless Task 任务队列负载均衡模型

上面介绍了如何通过函数级别队列来避免出现 “Noisy Neighbour” 问题。但是在一些场景下,如果任务的并发量级过大,即便对该任务划分了单队列,也会导致任务的积压。这个问题的解决需要引入 Serverless Task 的负载均衡策略。

函数计算的任务处理模块具有 Partition 的概念。每个用户默认属于一个 Partition,负责该 Partition 的 Scheduler 会监听用户对应的任务队列。当出现严重积压时,我们会为用户按照负载情况分配多个 Partition,并交由不同的 Scheduler 负责消费,来提升任务整体的消费速度。

图 3

可以看到,阿里云函数计算在任务队列管理方面默认做到了多租隔离的能力,可以适用于绝大多数场景。针对一些重负载、长执行、并发量大的场景,函数计算还支持横向扩容,加快消费速度。在任务隔离方面,函数计算支持针对不同优先级的函数进行单独隔离,避免出现 Noisy Neighbour 的问题。

可观测性

任务的可观测能力是任务系统必不可少的能力之一。强大的可观测性将有助于业务方减少在任务运行的各个阶段所需要额外进行的工作量。

  1. 开发阶段:任务的在线调试能力、运行结果的 Debug 能力将直接影响业务上线进度;
  2. 业务常规运行阶段:各种监控、流量情况的统计以及运行时日志将协助用户快速了解业务的发展、变化,以及出现故障时的快速定位 & 处理;
  3. 阶段性审计:任务的历史记录存储及保留将为用户提供良好的可追溯能力,可以根据历史信息进行后续的业务规划。

ServerlessTask 可观测性支持 - 开发测试阶段

业务的开发阶段最主要的诉求就是快速调试并定位问题。在对该阶段的支持中,ServerlessTask 提供了登录实例及实时日志的能力。当代码开发并上传后,测试 - debug - 修改代码 - 再次测试的流程可以全部在控制台完成,极大的提高了研发效率。如果有需要性能调试、第三方 Binary 调试(如音视频处理领域的 FFmpeg 调试)等可以借助登录实例功能完成。操作流程如下所示:

选择想登录实例的任务,点击实例链接。

会进入到实例监控页面,点击右上角的登录实例功能,即可登录到对应的实例上。

ServerlessTask 可观测性支持 - 业务上线后运行阶段

当业务上线后,经常容易出现因容量预估不足导致下游系统无法承载压力,导致故障。因此 ServerlessTask 提供了运行时指标,即一段时间内的任务提交数、完成数及执行情况。用户可以根据这张指标图快速了解当前业务的负载情况。当用户任务的下游消费较慢,可能造成任务积压,这种情况也很容易在指标图中反映出,进而快速做出相应的反应。目前 ServerlessTask 所提供的相关指标如下:

任务监控大盘提供以下任务监控数据:

在快速定位问题方面,函数计算支持实时查看函数日志及实例指标。您可以进入到任务的列表页面,找到实际执行失败的任务,进入日志页面及实例页面进行问题定位:

ServerlessTask 可观测性支持 - 阶段性审计

当线上任务运行一段时间后,往往需要进行一系列的阶段性审计工作,比如上一周的执行总任务数,执行失败的任务数及执行失败的时间。目前除了控制台以外,函数计算提供了丰富的 API 能力来进行任务的审计工作。主要包括以下几方面能力:

  1. 根据状态进行过滤,只查询某一个状态的执行;
  2. 根据触发时间进行过滤,如查询过去某一段时间内发起的任务;
  3. 根据任务名称查询。如果您的任务具有业务上下游的 TraceID,您可以在触发任务时指定一个有意义的任务ID。后续可以根据 ID 前缀进行范围查询;

上面的几个过滤方式可以组合,达到更便捷的需求。控制台所支持的过滤条件如下图所示:

更多参数内容可参考:https://help.aliyun.com/document_detail/256588.html

ServerlessTask 可观测性支持 - 死信队列及业务补偿

在消息领域,有一个非常重要的概念 - 死信队列。当一些消息无法被消费时,这些消息往往需要存储到一个地方,以便后续人为的介入处理,避免因未进行处理而造成业务损失。Serverless Task 也支持了这样一类功能。您可以对 Serverless Task 设置目标功能;当任务执行失败后,函数计算支持自动将执行失败的上下文信息推送到消息队列等消息服务中,以便后续处理。如果您的处理逻辑支持自动化,函数计算还支持将失败任务的上下文信息推送回函数计算,执行一段您的自定义业务逻辑来实现业务补偿。

您可以在异步调用配置页面配置成功及失败目标。

更多配置内容请参考:https://help.aliyun.com/document_detail/415755.htm。

综上所述,Serverless Task 所提供的可观测能力可以有效支持任务全生命周期的监测需求。所有控制台能力均可以使用开放 API 进行定制化开发,来满足更多的需求。Serverless Task 的目标功能除了可以做到任务失败补偿以外,还可以作为 Event-Driven 模式的数据源,自动的将处理后的事件投递到下游服务中。

作者: 渐意

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

月费 19 美元的 GitHub Copilot 企业版上线,你乐意买单吗?

近日,微软旗下的 GitHub 发布了 Copilot 企业版,推出了一个名为“Copilot for Business”的新计划。每个用户每月仅需 19 美元就能享受企业级服务。简单来说,支付月费的用户将享有简单的许可管理,管理员可以为其团队启用 GitHub C…

设计稳定的微服务系统时不得不考虑的场景

我们的生产环境经常会出现一些不稳定的情况,如: 大促时瞬间洪峰流量导致系统超出最大负载,load 飙高,系统崩溃导致用户无法下单“黑马”热点商品击穿缓存,DB 被打垮,挤占正常流量调用端被不稳定服务拖垮&a…

千万级可观测数据采集器 - iLogtail代码完整开源

2022年6月29日,阿里云iLogtail开源后迎来首次重大更新,正式发布完整功能的iLogtail社区版。本次更新开源全部C核心代码,该版本在内核能力上首次对齐企业版,开发者可以构建出与企业版性能相当的iLogtail云原生可观测性数据采集器。…

科普达人丨漫画图解什么是 eRDMA?

在一个领先的阿里云数据中心里,数百台服务器(也就是大型的计算机)在疯狂工作和通信,他们正在合力完成一个大型的大数据处理任务,每台服务器领到自己的小任务,算完之后,得把结果相互同步&#xf…

聚焦科技创新产业升级 中国联通和腾讯签署新战略合作协议

12月20日,中国联通和腾讯在“2022中国联通合作伙伴大会”上签署新一轮战略合作协议。双方将充分发挥资源和技术优势,聚焦科技创新、产业升级、网络安全等进行全方位合作,为数实融合高质量发展开辟新路径、提供新引擎,助力千行百业…

科普达人丨漫画图解 SGX 加密计算黑科技

01 从一场朋友圈的“赛富”说起 最近,小明买基金赚了不少钱,开始膨胀了,开始在朋友圈里晒豪车、晒爱马仕。小红表示不服,“最近买基金还能赚钱?肯定是P图凡尔赛。还是我买币赚得多。”炒鞋达人小孟就更不服&#xff0…

SysOM 案例解析:消失的内存都去哪了 !

在《AK47 所向披靡,内存泄漏一网打尽》一文中,我们分享了slab 内存泄漏的排查方式和工具,这次我们分享一种更加隐秘且更难排查的"内存泄漏"案例。 一、 问题现象 客户收到系统告警,K8S 集群某些节点 used 内存持续升高…

Windows 上玩转最新的 Android 13,微软悄悄在 GitHub 上官宣了!

整理 | 屠敏出品 | CSDN(ID:CSDNnews)操作系统领域有两大霸主,一个是移动端的 Android,一个自然是桌面端的 Windows。当有一天,两者在同一套系统上碰撞,将会擦除怎样的火花?想必不少…

Serverless 时代下微服务应用全托管解决方案

Serverless 时代下微服务发展与挑战 早期业务规模比较简单,大多团队开发采用单体应用,已经能够很好地满足团队的业务需求,并且能够快速迭代。但随着业务规模的不断增长,系统变得越来越复杂,单体应用逐渐无法满足线上生…

关于接口测试自动化的总结与思考

序 近期看到阿里云性能测试 PTS 接口测试开启免费公测,本着以和大家交流如何实现高效的接口测试为出发点,本文包含了我在接口测试领域的一些方法和心得,希望大家一起讨论和分享,内容包括但不仅限于: 服务端接口测试介…

最新Forrester Wave云计算报告:阿里云位居中国领导者、全球强劲者象限

近日,国际权威机构Forrester连续发布2022年全球和中国云计算市场Forrester Wave报告,在中国市场上,阿里云位居领导者象限,在市场表现、战略两大维度的评测中获评全项最高分;在全球报告中,阿里云位居强劲者象…

大促场景下,如何做好网关高可用防护

618 大促正在如火如荼进行中。《618大促来袭,浅谈如何做好大促备战》一文介绍了全方位保障大促高可用的方法论和技术手段,本文继续围绕网关,深入探讨大促场景下,如何做好网关高可用防护,将从以下几点逐一展开介绍&…

Java Agent 踩坑之 appendToSystemClassLoaderSearch 问题

从 Java Agent 报错开始,到 JVM 原理,到 glibc 线程安全,再到 pthread tls,逐步探究 Java Agent 诡异报错。 背景 由于阿里云多个产品都提供了 Java Agent 给用户使用,在多个 Java Agent 一起使用的场景下&#xff0…

消息队列 RabbitMQ 遇上可观测 - 业务链路可视化

本篇文章主要介绍阿里云消息队列 RabbitMQ 版的可观测功能。RabbitMQ 的可观测能力相对开源有了全面的加强,为业务链路保驾护航。消息队列 RabbitMQ 简介 阿里云消息队列 RabbitMQ 版是一款基于高可用分布式存储架构实现的 AMQP 0-9-1 协议的消息产品,兼…

你的 Sleep 服务会梦到服务网格外的 bookinfo 吗

作为业内首个全托管 Istio 兼容的阿里云服务网格产品 ASM,一开始从架构上就保持了与社区、业界趋势的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立。ASM 产品是基于社区 Istio 定制实现的,在托管的控制面侧提供…

巨人之舞 | Forrester Wave四季度榜单新鲜出炉,云厂商鏖战犹酣

日前,国际权威咨询机构 Forrester 发布《The Forrester Wave:2022 Q4中国公有云开发及基础设施平台(以下简称“PCDIP”)》报告。其中透露出哪些最新行业信息?有何指导意义?企业用户如何借助这份报告&#x…

EventBridge 在 SaaS 企业集成领域的探索与实践

当下降本增效是各行各业的主题,而 SaaS 应用作为更快触达和服务业务场景的方式则被更多企业熟知和采用。随着国内 SaaS 商业环境的逐渐成熟,传统企业中各个部门的工程师和管理者,能迅速决定采购提升效率的 SaaS 产品,然后快速投入…

解密函数计算异步任务能力之「任务的状态及生命周期管理」

前言 任务系统中有一类很重要的概念,即任务的状态和生命管理周期。其本质是对任务的生命周期管理。细分的状态有助于在使用时能够更清楚的了解系统发生了什么内容,便于针对性的根据业务情况进行操作。函数计算 Serverless Task 提供了多种可查询的状态&…

将 Terraform 生态粘合到 Kubernetes 世界

背景 随着各大云厂商产品版图的扩大,基础计算设施,中间件服务,大数据/AI 服务,应用运维管理服务等都可以直接被企业和开发者拿来即用。我们注意到也有不少企业基于不同云厂商的服务作为基础来建设自己的企业基础设施中台。为了更…

照妖镜:一个工具的自我超越

人和动物的最大区别,就是人会使用工具。那么,作为一个工具,如何在用户需求多变、产品功能多样的当下,不断地实现自我超越呢?今天我们就来聊一聊。 一、高开低走 听说天庭第一发明家太上老君,又引入了一条…