一、背景
1.1 产品简介
基于大模型塔斯,整合传统的多项能力(NLP、OCR、CV等),构建以场景为中心的新型智能文档平台。通过文档审阅,实现结构化、半结构化和非结构化文档的信息获取、处理及审核,同时基于大模型,提供文档问答、辅助阅读等能力。
1.2 文档说明
当用户使用产品的算法能力处理文档时,因文档大小、算法资源等因素,获取算法处理结果的时长具有不确定性,所以需要一套稳定、高效的异步解耦算法任务的技术方案来调度算法任务。本文档从技术的角度分享是如何进行算法任务调度,并为大家实现异步解耦调度任务提供思路。
二、实现思路
2.1.1 步骤解读
1、2:业务服务通过mq发送执行算法任务消息给调度服务
3:任务记录落库
4:定时任务读取数据库中的未执行任务记录
5:检查执行任务是否达到上限,未达到则把任务存入redis任务执行队列
6:创建任务执行记录数据
7:定时任务从redis中获取任务执行队列
8:读取任务执行队列中需要执行的任务,向算法服务发起异步处理请求
9:将执行的任务信息存入等待结果队列,并检查等待结果队列中的任务是否超时,超时则清除,并通知业务服务任务超时
10:更新任务执行记录数据
11:算法服务处理后将结果存入oss
12:算法服务请求调度服务,通知任务执行完成
13:将完成的任务从等待结果队列中清除
14:更新任务执行记录数据
15、16:将任务结束消息通过mq通知业务服务
17:业务服务从oss读取算法处理结果
2.1 简易时序图
2.1.2 简易时序图深入解析
通过细化时序图的每个步骤,深入探讨IDP·文档审阅平台如何高效地实现算法任务调度,确保系统在处理大量、多样化的文档时,保持高度的灵活性与稳定性。
- 步骤1-2: 业务服务利用消息队列(MQ)向调度服务传递执行算法任务的需求。这一设计旨在解耦业务逻辑与算法处理,提高系统的可扩展性和响应速度。MQ作为中间件,能够有效缓冲瞬时高峰流量,保证消息的可靠传输。
- 步骤3: 任务记录被持久化至数据库,这是为了确保任务的可追踪性和审计能力,即便在系统故障情况下也能恢复任务状态。
- 步骤4-5: 定时任务周期性地查询数据库中待处理的任务,通过智能判断当前系统负载(如算法服务的执行任务上限),决定是否将新任务加入到Redis任务执行队列。Redis以其高速的读写性能,适合作为高并发场景下的任务缓存队列。
- 步骤6-8: 创建任务执行记录,并通过定时任务从Redis队列中提取任务,向算法服务发起异步请求。异步处理机制允许算法服务并行处理多个任务,显著提升整体吞吐量。
- 步骤9: 引入等待结果队列和超时检测机制,确保即使在算法处理异常延迟的情况下,也能及时反馈给业务侧,维持用户体验。超时任务的清理与通知机制,是保障系统健康运行的关键。
- 步骤10-14: 算法服务处理完毕后,结果存储于对象存储服务(OSS),随后通知调度服务任务完成。调度服务据此更新任务状态,并从等待结果队列中移除已完成任务。这系列操作确保了任务生命周期管理的闭环,提高了资源利用率。
步骤15-16: 通过MQ通知业务服务任务结束,业务服务即可从OSS获取处理结果,完成文档处理流程。这种设计确保了数据处理的高效性和低延迟性
主要的是思路,代码就不放了~
四、结语
在文档审阅的算法任务调度体系中,异步解耦的设计理念发挥了至关重要的作用。通过将任务的提交与执行分离,业务服务无需等待算法处理结果,极大地提高了系统的响应速度和整体性能。任务调度机制则确保了算法任务能够有条不紊地进行。从消息队列的任务分发,到定时任务的入队和执行管理,再到超时清理和回调通知,每一个环节都紧密配合,保障了任务的高效执行和系统的稳定运行。
这种异步解耦与任务调度的完美结合,为智能文档平台的发展奠定了坚实的基础。未来,我们将持续探索和创新,进一步优化异步解耦和任务调度的策略,以适应不断增长的业务需求和更加复杂的技术环境,为用户带来更加卓越的文档处理体验。