分享如何通过Mq、Redis、XxlJob实现算法任务的异步解耦调度
一、背景
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获取处理结果,完成文档处理流程。这种设计确保了数据处理的高效性和低延迟性
主要的是思路,代码就不放了~
四、结语
在文档审阅的算法任务调度体系中,异步解耦的设计理念发挥了至关重要的作用。通过将任务的提交与执行分离,业务服务无需等待算法处理结果,极大地提高了系统的响应速度和整体性能。任务调度机制则确保了算法任务能够有条不紊地进行。从消息队列的任务分发,到定时任务的入队和执行管理,再到超时清理和回调通知,每一个环节都紧密配合,保障了任务的高效执行和系统的稳定运行。
这种异步解耦与任务调度的完美结合,为智能文档平台的发展奠定了坚实的基础。未来,我们将持续探索和创新,进一步优化异步解耦和任务调度的策略,以适应不断增长的业务需求和更加复杂的技术环境,为用户带来更加卓越的文档处理体验。
相关文章:
分享如何通过Mq、Redis、XxlJob实现算法任务的异步解耦调度
一、背景 1.1 产品简介 基于大模型塔斯,整合传统的多项能力(NLP、OCR、CV等),构建以场景为中心的新型智能文档平台。通过文档审阅,实现结构化、半结构化和非结构化文档的信息获取、处理及审核,同时基于大…...
发布:大彩科技DN系列2.8寸高性价比串口屏发布!
一、产品介绍 该产品是一款2.8寸的工业组态串口屏,采用2.8寸液晶屏,分辨率为240*320,支持电阻触摸、电容触摸、无触摸。可播放动画,带蜂鸣器,默认为RS232通讯电平,用户短接屏幕PCB上J5短接点即可切换为TTL电…...
集合类不安全问题
ArrayList不是线程安全类,在多线程同时写的情况下,会抛出java.util.ConcurrentModificationException异常 解决办法: 1.使用Vector(ArrayList所有方法加synchronized,太重) 2.使用Collections.synchronized…...
【基于SprintBoot+Mybatis+Mysql】电脑商城项目之上传头像和新增收货地址
🧸安清h:个人主页 🎥个人专栏:【Spring篇】【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🚀1.上传头像 -持久…...
AI知识库和全文检索的区别
1、AI知识库的作用 AI知识库是基于人工智能技术构建的智能系统,能够理解、推理和生成信息。它的核心作用包括: 1.1 语义理解 自然语言处理(NLP):AI知识库能够理解用户查询的语义,而不仅仅是关键词匹配。 …...
20240817 联想 笔试
文章目录 1、选择题1.11.21.31.41.51.61.71.81.91.101.111.121.131.141.151.161.171.181.191.202、编程题2.12.2岗位:Linux开发工程师 题型:20 道选择题,2 道编程题 1、选择题 1.1 有如下程序,程序运行的结果为 (D) #include <stdio.h>int main() {int k = 3...
IntelliJ IDEA 安装与使用完全教程:从入门到精通
一、引言 在当今竞争激烈的软件开发领域,拥有一款强大且高效的集成开发环境(IDE)是开发者的致胜法宝。IntelliJ IDEA 作为 JetBrains 公司精心打造的一款明星 IDE,凭借其丰富多样的功能、智能精准的代码提示以及高效便捷的开发工…...
【JVM详解一】类加载过程与内存区域划分
一、简介 1.1 概述 JVM是Java Virtual Machine(Java虚拟机)的缩写,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成。JVM屏蔽了与操作系统平台相关…...
250207-MacOS修改Ollama模型下载及运行的路径
在 macOS 上,Ollama 默认将模型存储在 ~/.ollama/models 目录。如果您希望更改模型的存储路径,可以通过设置环境变量 OLLAMA_MODELS 来实现。具体步骤如下: 选择新的模型存储目录:首先,确定您希望存储模型的目标目录路…...
Win10 部署llama Factory 推荐教程和遇到的问题
教程 【大模型微调】使用Llama Factory实现中文llama3微调_哔哩哔哩_bilibili 大模型微调!手把手带你用LLaMA-Factory工具微调Qwen大模型!有手就行,零代码微调任意大语言模型_哔哩哔哩_bilibili 遇到问题解决办法 pytorch gpu国内镜像下载…...
如何在Android Studio中开发一个简单的Android应用?
Android Studio是开发Android应用的官方集成开发环境(IDE),它提供了许多强大的功能,使得开发者能够高效地创建Android应用。如果你是Android开发的初学者,本文将引导你如何在Android Studio中开发一个简单的Android应用…...
ubuntu下迁移docker文件夹
在 Ubuntu 系统中迁移 Docker 文件夹(如 Docker 数据存储文件夹 /var/lib/docker)到另一个磁盘或目录,通常是为了释放系统盘空间。以下是迁移过程的详细步骤: 1. 停止 Docker 服务 在进行迁移之前,必须停止 Docker 服…...
嵌入式面试题 C/C++常见面试题整理_7
一.什么函数不能声明为虚函数? 常见的不能声明为虚函数的有:普通函数(非成员函数):静态成员函数;内联成员函数;构造函数;友元函数。 1.为什么C不支持普通函数为虚函数?普通函数(非成员函数)只能被overload,不能被override,声明为虚函数也没有什么意思…...
使用OBS推流,大华摄像头 srs服务器播放
说明: ffmpeg可以推流,但是是命令行方式不太友好,还可以使用主流的OBS开源推流软件,可从官网Open Broadcaster Software | OBS 下载最新版本,目前很多网络主播都是用它做直播。该软件支持本地视频文件以及摄像头推流。…...
CSS 组合选择符详解与实战示例
在 Web 开发过程中,CSS 用于定义页面元素的样式,而选择器则帮助我们精确定位需要添加样式的元素。今天我们主要来讲解 CSS 中的组合选择符,它们能够根据 DOM 结构中元素之间的关系来选中目标元素,从而写出结构清晰、易于维护的 CS…...
Window系统通过Docker本地安装ollama和deepseek
在 Windows 系统上安装 Ollama 和 DeepSeek 的步骤如下: 安装 Ollama 安装 WSL(Windows Subsystem for Linux): 如果还没有安装 过WSL的(安装过的你直接跳过就行了),可以按照以下步骤进行安装&…...
镜头放大倍率和像素之间的关系
相互独立的特性 镜头放大倍率:主要取决于镜头的光学设计和结构,决定了镜头对物体成像时的缩放程度,与镜头的焦距等因素密切相关。比如,微距镜头具有较高的放大倍率,能将微小物体如昆虫、花朵细节等放大成像࿰…...
P3413 SAC#1 - 萌数
题目背景 本题由世界上最蒟蒻的 SOL 提供。 寂月城网站是完美信息教室的官网。地址:http://191.101.11.174/mgzd。 题目描述 蒟蒻 SOL 居然觉得数很萌! 好在在他眼里,并不是所有数都是萌的。只有满足“存在长度至少为 22 的回文子串”的数是萌的——也就是说,101 是萌…...
[RabbitMQ] RabbitMQ常见面试题
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
Java运行时数据区
JVM主要流程包括三部分: 首先是 ClassLoard 类加载器,加载数据源文件到jvm当中然后将加载好的数据存放在运行时数据区最后由引擎进行解释和编译的工作 1.Java 内存区域: 1.1 程序计数器 程序计数器(Program Counter Register&a…...
VINS-Mono跑EUROC数据集后,如何用evo工具包进行轨迹精度评估与可视化(附完整命令)
VINS-Mono轨迹精度评估实战:从EUROC数据集到evo工具包全流程解析 在完成VINS-Mono算法在EUROC数据集上的运行后,如何科学评估其轨迹精度成为算法优化和论文撰写的关键环节。本文将深入讲解使用evo工具包进行定量分析的完整流程,涵盖指标计算、…...
GitLab实战:如何用rebase -i优雅合并多个commit(附常见错误排查)
Git提交历史优化:交互式rebase高阶操作指南 1. 为什么需要整理Git提交历史 在团队协作开发中,我们经常会遇到提交历史杂乱无章的情况。想象一下这样的场景:你完成了一个新功能的开发,但在这个过程中产生了十几个零散的提交记录&am…...
新手必看|SRC平台漏洞挖掘全攻略(2026干货版):平台详解+规则必记+实操步骤
新手必看|SRC平台漏洞挖掘全攻略(2026 干货版):平台详解规则必记实操步骤 对于网络安全新手、计算机相关专业学生,以及想转型安全领域的从业者而言,SRC平台是合法练手、积累实战经验、衔接职场的核心载体。…...
利用快马AI快速生成n8n自动化工作流原型,十分钟搭建业务逻辑骨架
今天想和大家分享一个快速搭建n8n自动化工作流原型的经验。作为一个经常需要处理各种自动化流程的开发者,我发现用InsCode(快马)平台可以大大缩短从构思到实现的时间。 为什么选择n8n工作流原型 n8n作为开源自动化工具,最大的优势就是可视化工作流设计…...
cat-catch:构建智能化媒体资源捕获的浏览器扩展解决方案
cat-catch:构建智能化媒体资源捕获的浏览器扩展解决方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch cat-catch是一款专注于网页媒体资源智能捕获的浏览器扩展工具,通过深度…...
从16QAM到256QAM:用Simulink星座图揭秘高阶调制的抗噪性能
高阶QAM调制的星座图分析与Simulink实战指南 在5G和Wi-Fi 6时代,256QAM已成为提升频谱效率的关键技术。但当我们从实验室的理想环境走向真实无线场景时,工程师们常面临一个核心矛盾:如何在频谱效率与系统稳定性之间找到最佳平衡点࿱…...
Copilot 命令行使用方式介绍(npm)
1. 什么是 Apache SeaTunnel? Apache SeaTunnel 是一个非常易于使用、高性能、支持实时流式和离线批处理的海量数据集成平台。它的目标是解决常见的数据集成问题,如数据源多样性、同步场景复杂性以及资源消耗高的问题。 核心特性 丰富的数据源支持&#…...
LangChain4j向量化实战避坑:OpenAI、本地模型、Qdrant选哪个?我的踩坑记录
LangChain4j向量化实战避坑指南:OpenAI、本地模型与Qdrant的深度抉择 当Java开发者尝试构建基于大语言模型的应用时,LangChain4j框架中的向量化组件往往成为技术栈选型的第一个分水岭。我在三个实际项目中分别尝试了不同组合方案后,发现每个…...
避坑指南:在CodeSys里用three.js加载3D模型,我踩过的那些安全策略和路径坑
CodeSys集成three.js的实战避坑手册:从安全策略到模型加载的完整解决方案 在工业自动化领域,可视化界面正经历着从传统2D向3D交互的转型。当我在最近一个机械臂控制项目中尝试将three.js集成到CodeSys WebVisu环境时,原以为简单的任务却遭遇…...
3大突破!GenUI重构Flutter界面开发范式
3大突破!GenUI重构Flutter界面开发范式 【免费下载链接】genui 项目地址: https://gitcode.com/gh_mirrors/genui1/genui GenUI是一个革命性的Flutter库,它通过AI驱动的动态界面生成技术,彻底改变了传统UI开发流程。作为连接自然语言…...
