任务调度系统
工作流编排平台,负责以特定顺序和依赖关系来管理和调度任务
调度模块(调度中心 --执行模块(执行器)
任务调度系统的定位 设计目标是 轻量级、可视化、易扩展
任务调度对异步、周期性的任务进行定时触发或延迟触发,达到有序执行任务的目的
GitOps 实践, Kestra 和 Windmill 这类声明式平台
架构设计
Kafka Consumer 设计为长期运行(Long-running)的应用程序,通常通过无限循环持续轮询消息
消费起点 offset--存储到mysql
主要功能 --队列-持久化-扩展
入口
01.任务执行 -异步任务队列
02.任务失败重启-任务重启-任务重试==任务状态记录--消息持久化
03.reblance以及分布式扩展-设计为水平扩展,通过增加分区(Partitions)
04.手动中断任务
架构设计
pip install fastapi uvicorn celery redis
Celery Worker 和 Celery Beat
通过 Web 请求动态添加任务
开发任务定义、状态跟踪、结果存储和重试机制等
用户触发的异步任务(选 Celery
Celery 解决 “API 响应延迟”问题,Kafka 解决 “多系统耦合”问题
fastapi -- 心跳机制 心跳本质是一种ping/pong模式 heartbeat
PING 是Packet InterNet Groper的缩写
redis :返回的既不是冰冷的“OK”,也不是直白的“Success”,而是一个充满趣味性的“Pong”
--技术传承与文化默契 声纳发出-回应”的探测模式 声波脉冲(ping) 回声(pong)
“回显请求 Echo Request 回显应答”(Echo Reply
Redis 协议的请求响应模型有3种,
分别是 ping-pong 模式、
pipeline模式
pub/sub模式:
构成
组件
构成
Producer -->
Broker -- > 消息队列(Broker)
Worker -- > (consumer) (任务执行器) 从 Broker 拉取任务并执行
Result Backend 结果后端
请求响应 与 任务执行 解耦,使得Web服务器(FastAPI)能够保持轻盈、快速响应
示例
发送任务:
task.delay(arg1, arg2) delay() 是 apply_async() 的简化封装
task.apply_async() 更强大的异步调用方式,可以设置各种任务执行选项
任务链(Chain) 工作流(Chord)
Chain(任务链)、Group(任务组)和Chord(和弦)
任务链(Chain):顺序执行的任务流水线
任务组(Group):并行执行的批量任务
和弦(Chord):分组任务与回调的完美结合
Celery 的 task_id 默认自动生
任务队列
任务队列 通过封装 异步任务发送、任务处理、任务状态存储、异常处理 等环节,提供了一套完整的处理长耗时任务的编程框架
queue的选型 storage系统
承接在线业务高流量 长耗时任务 与 普通在线业务 拆分的架构--异步
消息队列 (Message Queue) 是分布式系统中用于解耦服务、异步处理、削峰填谷的核心中间件
Kafka RabbitMQ RocketMQ Pulsar
从自己用,到大家用,这中间是有差别的
celery 依赖只需要Redis
MySQL+FastAPI+Redis+celery 的技术方案
--自用
BackgroundTasks 真正适合的场景,是那些轻量、非关键、允许偶发丢失的异步操作
BackgroundTasks 的能力边界与失效场景 持久化能力的根本缺失 可观测性的完全缺失
--他用
sudo docker run --name redis -d -p 6379:6379 redis:8.6
https://github.com/redis/redis/blob/unstable/redis.conf
技术栈
前端 : React、Vue.js、Angular
关系型数据库: MySQL、PostgreSQL
OLAP: duckdb clickhouse doris
其他database : redis
框架: fastapi Uvicorn Uvicorn 是一个基于 uvloop 与 httptools 构建的极速 ASGI 服务器
FastAPI 是一个用于构建 API(作为服务端)的库
校验、解析与序列化
文档
Requests 是一个用于与 API 交互(作为客户端)的库
API 系统所需的主要特性之一是数据“序列化”:
对象转换为 JSON 对象,从传入请求中解析数据
数据校验 Pydantic 这样的第三方数据校验
Docker Docker-compose Linux
Fast API
“协程”——使用 async 和 await
Pydantic 是数据验证的核心引擎,
Starlette 负责 Web 部分。 Pydantic 负责数据部分。
Pydantic模型的model_config属性
是定制JSON Schema的主要入口。
可以通过json_schema_extra参数添加示例数据、描述和其他元数据。
依赖注入通过将依赖的创建与使用分离,实现了组件间的松耦合
from fastapi import Depends
FastAPI 的依赖注入系统基于 ASGI 规范和 Python 类型注解
FastAPI 通过 Scope 机制管理依赖项的生命周期 支持通过 Optional 和条件判断实现动态依赖
OpenAPI(以前称为 Swagger) OpenAPI 本身就是基于 JSON Schema
而 JSON Schema 是自动生成的接口文档标准
pip install jsonschema
JSON Schema = 自动化参数检查器
jsonschema 可以进行详细的数据验证。这包括长度校验、个数校验、枚举校验、类型校验、正则校验等多种验证方式
SQLModel 基于 SQLAlchemy 和 Pydantic 构建
案例
01.手动开发fastapi服务
互联网时代:功能是点,工具是线,服务是面,产品是体,平台是宇宙
tools API UI product platform
02.利用大模型进行开发fastapi服务,或者agent开发fastapi服务
核心还是API服务-方式还是用旧时代的锤子砸新问题的钉子
03.agent和大模型直接提供服务
agent LLM (intent intention purpose )--Skills 和 agent 以及大模型
04. agent利用大模型--分析和处理非结构化数据
05.集群和边缘智能
方案-数据闭环的升级逻辑
为什么会选这条路线
默认选项:企业真实的升级约束,原有逻辑生态,系统重构窗口期,复杂度,技术栈
-- 升级--存量演进
升级方法论,
-- 新建--增量演进
智能化
-- 迁移--存量到增量的变革和
双发验证-灰度切流-快速回滚
迁移本身的复杂性--渐进式演进路线
历史阶段的最优解
平台
工具 : Teams + 电子邮件 + 电子表格
悉心照料的平台还是呆板但有效平台 “无聊但明确” 还是 “聪明但脆弱”。
数据:
编排: 触发机制 任务编排 系统集成
从业务场景出发,而非从工具功能出发-团队的AI协作能力,如何在实践中持续迭代优化
agent工具
CLI: 将飞书开放平台 2500+ API 封装成 200+ 条终端命令
MCP: API 以及MCP协议
SKills
CodeGraph 是一个本地优先的代码智能工具。
它用 tree-sitter 解析代码,把函数、类、方法、类型、路由、组件等抽成节点,
把调用、导入、继承、引用等关系抽成边,然后存进本地 SQLite 数据库
说明 :
tree-sitter 是一个解析器生成工具和增量解析库,
能够将代码源文件解析成具体的语法树,能解析绝大多数语言,并且用纯 c 编写,无依赖
SQLite
FTS5 做全文搜索
接入 CLI MCP TypeScript API
Web 项目里“入口在哪里”经常不在函数名里,而在路由声明里
动态导入、反射、依赖注入、运行时注册、框架魔法
Python中
命令行解析工具
sys.argv
argparse 模块来生成大致等价的命令行界面
Click
Typer 一个命令行工具,用于运行 脚本,自动将它们转换为 CLI 应用程序
富文本
rich: 格式化Typer显示,自动格式输出正确和错误,使输出具有颜色更加直观
Shellingham: Tool to Detect Surrounding Shell
GUI:
Gooey 一款为命令行工具制作图形界面的工具
标注结果
JSONSchema 数据生成
pip install genson
JSONSchema 验证
pip install jsonschema
JSON Schema 关键字:
$schema:指定所使用的 JSON Schema 规范版本。
type:指定数据的类型,如字符串、数字、布尔值等。
properties:定义对象属性及其对应的约束规则。
required:指定必需的属性。
enum:定义枚举值列表。
pattern:使用正则表达式验证字符串格式。
minimum 和 maximum:定义数值的最小值和最大值。
format:定义特定的数据格式,如日期、时间等。
参考
Docker中Redis服务的启动与持久化配置指南 https://comate.baidu.com/zh/page/1d2g1h6h0ow
https://github.com/EpicGames/lore
https://www.atlassian.com/zh/git/tutorials/resetting-checking-out-and-reverting
浙公网安备 33010602011771号