Alibaba Cloud Function Computing의 비동기 작업 기능에 대한 심층적인 이해

소개: 이 기사에서는 함수 계산 비동기 작업에 대해 더 자세히 살펴보고, 관찰 가능성 측면에서 시스템에서 지원하는 기능과 비동기 작업의 스케줄링 체계를 소개합니다.

저자: 점차적으로

이전 기사 "암호화 기능 계산 비동기 작업 능력의 작업 상태 및 수명 주기 관리" 에서 작업 시스템의 상태 관리를 소개하고 사용자가 필요에 따라 실시간으로 작업 상태 정보를 쿼리하는 방법을 소개했습니다. 곧. 이 기사에서는 함수 계산 비동기 작업에 대해 자세히 살펴보고 비동기 작업의 스케줄링 체계와 관찰 가능성 측면에서 시스템에서 지원하는 기능을 소개합니다.

작업 스케줄링

작업 스케줄링은 시스템이 현재 부하 상황에 따라 수행할 적절한 컴퓨팅 리소스에 다른 작업을 넣는 관련 작업을 나타냅니다. 완벽한 스케줄링 시스템은 서로 다른 특성과 최적의 효율성을 가진 작업 간의 격리라는 두 가지 요구 사항의 균형을 맞춰야 하는 경우가 많습니다. 기능 Compute 비동기 작업은 독립적인 대기열 모델과 자동 로드 밸런싱 전략을 채택하고 처리 성능에 영향을 주지 않고 다중 테넌시 격리를 수행할 수 있습니다.

서버리스 작업 작업 스케줄링 모델

사용자가 작업을 제출하면 시스템은 작업을 메시지로 변환하고 비동기 전달을 통해 내부 대기열에 넣습니다. 메시지의 처리 흐름은 다음 그림과 같습니다.

1.png

그림 1

작업 스케줄링에서 전체 시스템의 다중 테넌시 격리 및 메시지 백로그 제어는 주로 스케줄러의 사용 및 대기열 제어에 의존합니다. 미리 각 사용자에 대한 계정 수준의 대기열을 나누고 사용자의 모든 기능에 대한 비동기 호출(작업 호출 포함)이 대기열을 공유합니다.

이러한 모델 구조는 각 사용자의 비동기 실행 요청(작업 호출 포함)이 다른 사용자 호출의 영향을 받지 않도록 합니다. 그러나 사용자에게 많은 기능이 있고 각 기능에 많은 호출이 있는 경우와 같은 일부 대규모 응용 프로그램 시나리오에서는 모든 비동기 메시지가 대기열을 공유하는 것이 불가피하므로 호출 간에 상호 영향이 불가피합니다. 일부 롱테일 호출은 너무 많은 대기열 리소스를 소비하고 다른 기능 실행에서 기아를 유발할 수 있습니다.

중요한 기능의 실행에 영향을 미치는 이러한 상황을 피하기 위해 Function Compute는 더 세분화된 대기열, 즉 기능 수준 대기열을 제공합니다. 높은 우선 순위 기능의 소비가 동일한 계정에서 다른 기능의 실행에 영향을 받지 않도록 각 다른 기능에 대해 별도의 대기열을 설정할 수 있습니다. 대기열 간의 관계는 다음 그림에 나와 있습니다.이미지.gif

2.png

그림 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.png

图 3

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

可观测性

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

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

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

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

选择想登录实例的任务,点击实例链接。이미지.gif

4.png

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

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

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

5.png

이미지.gif

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

6.jpeg

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

7.png

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

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

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

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

8.png

更多参数内容可参考:

help.aliyun.com/document_de…

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

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

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

9.png

更多配置内容请参考:

help.aliyun.com/document_de…

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

往期文章

1、异步任务处理系统,如何解决业务长耗时、高并发难题

2、函数计算异步任务能力介绍-任务触发去重

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

Servereless 近期热门活动推荐

10.png

Serverless 函数计算评测征文活动来啦,6 月 28 日-7 月 31 日期间,参与产品评测投稿发布文章,即有机会获得 Beats 耳机、机械键盘、千元天猫超市卡、优酷会员季卡诸多好礼等你赢取!投稿方向可参考(但不限于):

  • 您对函数计算 FC 产品能力的体验和建议,帮助其他用户选用 Serverless 服务。
  • Function Compute FC를 기반으로 한 클라우드 블로그 구축, 탄력적이고 고가용성인 서버리스 웹 애플리케이션 구축, 서버리스 아키텍처를 기반으로 하는 탄력적이고 고가용성 비디오 처리 시스템 구축과 같은 애플리케이션을 생성하기 위해 Function Compute FC를 사용하는 시나리오 평가.

원본 링크: click.aliyun.com/m/100034876…

이 기사는 Alibaba Cloud의 원본 콘텐츠이며 허가 없이 복제할 수 없습니다.

Guess you like

Origin juejin.im/post/7119791513160122405