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

文章探讨了如何通过异步任务处理系统解决业务中的长耗时和高并发问题,介绍了任务处理系统的架构,包括任务API/Dashboard、任务分发和任务执行。系统通过动态队列资源伸缩、负载随机分片和自适应下游处理能力的分发策略,实现大规模多租户环境下的稳定运行。同时,文章强调了任务处理系统的可观测性、重试策略和错误处理能力,以及资源利用率和成本效益。
摘要由CSDN通过智能技术生成

当我们构建一个应用,总是希望它是响应迅速,成本低廉的。而在实际中,我们的系统却面临各种各样的挑战,例如不可预测的流量高峰,依赖的下游服务变得缓慢,少量请求却消耗大量 CPU/内存资源。这些因素常常导致整个系统被拖慢,甚至不能响应请求。为了让应用服务总是响应迅速,很多时候不得不预留更多的计算资源,但大部分时候,这些计算资源都是闲置的。一种更好的做法是将耗时缓慢,或者需要消耗大量资源的处理逻辑从请求处理主逻辑中剥离出来,交给更具资源弹性的系统异步执行,不但让请求能够被迅速处理返回给用户,也节省了成本。

一般来说,长耗时,消耗大量资源,或者容易出错的逻辑,非常适合从请求主流程中剥离出来,异步执行。例如新用户注册,注册成功后,系统通常会发送一封欢迎邮件。发送欢迎邮件的动作就可以从注册流程中剥离出来。另一个例子是用户上传图片,图片上传后通常需要生成不同大小的缩略图。但图片处理的过程不必包含在图片上传处理流程中,用户上传图片成功后就可以结束流程,生成缩略图等处理逻辑可以作为异步任务执行。这样应用服务器避免被图片处理等计算密集型任务压垮,用户也能更快的得到响应。常见的异步执行任务包括:

  • 发送电子邮件/即时消息
  • 检查垃圾邮件
  • 文档处理(转换格式,导出,……)
  • 音视频,图片处理(生成缩略图,加水印,鉴黄,转码,……)
  • 调用外部的三方服务
  • 重建搜索索引
  • 导入/导出大量数据
  • 网页爬虫
  • 数据清洗
  • ……

Slack,Pinterest,Facebook 等公司都广泛的使用异步任务,实现更好的服务可用性,更低的成本。根据Dropbox 统计,他们的业务场景中一共有超过100种不同类型的异步任务。一个功能完备的异步任务处理系统能带来显著的收益:

  • 更快的系统响应时间。将长耗时的,重资源消耗的逻辑从请求处理流程中剥离,在别的地方异步执行,能有效的降低请求响应延时,带来更好的用户体验。
  • 更好的处理大量突发性请求。在电商等很多场景下,常常有大量突发性请求对系统造成冲击。同样的,如果将重资源消耗逻辑从请求处理流程中剥离,在别的地方异步执行,那么相同资源容量的系统能响应更大峰值的请求流量。
  • 更低的成本。异步任务的执行时长通常在数百毫秒到数小时之间,根据不同的任务类型,合理的选择任务执行时间和更弹性的使用资源,就能实现更低的成本。
  • 更完善的重试策略和错误处理能力。任务保证被可靠的执行(at-least-once),并且按照配置的重试策略进行重试,从而实现更好的容错能力。例如调用第三方的下游服务,如果能变成异步任务,设置合理的重试策略,即使下游服务偶尔不稳定,也不影响任务的成功率。
  • 更快的完成任务处理。多个任务的执行是高度并行化的。通过伸缩异步任务处理系统的资源,海量的任务能够在合理的成本内更快的完成。
  • 更好的任务优先级管理和流控。任务根据类型,通常按照不同的优先级处理。异步任务管理系统能帮助用户更好的隔离不同优先级的任务,既让高优先级任务能更快的被处理,又让低优先级任务不至于被饿死。
  • 更多样化的任务触发方式。任务的触发方式是多种多样的,例如通过 API 直接提交任务,或是通过事件触发,或是定时执行等等。
  • 更好的可观测性。异步任务处理系统通常会提供任务日志,指标,状态查询,链路追踪等能力,让异步任务更好的被观测、更容易诊断问题。
  • 更高的研发效率。用户专注于任务处理逻辑的实现,任务调度,资源扩缩容,高可用,流控,任务优先级等功能都由任务处理系统完成,研发效率大幅提高。

任务处理系统架构

任务处理系统通常包括三部分:任务 API 和可观测,任务分发和任务执行。我们首先介绍这三个子系统的功能,然后再讨论整个系统面临的技术挑战和解决方案。

任务 API/Dashboard

该子系统提供一组任务相关的 API,包括任务创建、查询、删除等等。用户通过 GUI,命令行工具,后者直接调用 API 的方式使用系统功能。以 Dashboard 等方式呈现的可观测能力也非常重要。好的任务处理系统应当包括以下可观测能力:

  • 日志:能够收集和展示任务日志,用户能够快速查询指定任务的日志。
  • 指标:系统需要提供排队任务数等关键指标,帮助用户快速判断任务的执行情况。
  • 链路追踪:任务从提交到执行过程中,各个环节的耗时。比如在队列中排队的时间,实际执行的时间等等。下图展示了 Netflix Cosmos 平台的 tracing 能力。

任务分发

任务分发负责任务的调度分发。一个能应用于生产环境的任务分发系统通常要具备以下功能:

  • 任务的可靠分发:任务一旦提交成功后,无论遇到任何情况,系统都应当保证该任务被调度执行。
  • 任务的定时/延时分发:很多类型的任务,希望在指定的时间执行,例如定时发送邮件/消息,或者定时生成数据报表。另一种情况是任务可以延时较长一段时间执行也没问题,例如下班前提交的数据分析任务在第二天上班前完成即可,这类任务可以放到凌晨资源消耗低峰的时候执行,通过错峰执行降低成本。
  • 任务去重:我们总是不希望任务被重复执行。除了造成资源浪费,任务重复执行可能造成更严重的后果。比如一个计量任务因为重复执行算错了账单。要做到任务只执行一次(exactly-once),需要在任务提交,分发,执
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值