分享如何通过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…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
