refactor: 调度服务端改为控制台架构,借助现有H ost架构和分布式缓存架构
|
# AntJob èš‚èšè°ƒåº¦ — 需求文档
> 版本:v4.4 | 日期:2026-07-20 | 从代ç 逆呿•´ç†
本文档æè¿° AntJob 分布å¼ä»»åŠ¡è°ƒåº¦ç³»ç»Ÿçš„æ„¿æ™¯ã€æ ¸å¿ƒç›®æ ‡å’ŒåŠŸèƒ½æ–¹å‘。完æˆçжæ€åœ¨[功能清å•](/NewLife/AntJob/Blob/master/Doc/功能清å•.md)ä¸è¿½è¸ªï¼Œè¯¦ç»†è®¾è®¡åœ¨[架构设计](/NewLife/AntJob/Blob/master/Doc/架构设计.md)ä¸å±•开。
---
## 1. 背景与愿景
### 1.1 系统定ä½
AntJob 是一个é¢å‘ .NET 生æ€çš„**分布å¼ä»»åŠ¡è°ƒåº¦ä¸Žå¤§æ•°æ®å®žæ—¶è®¡ç®—å¹³å°**。以"èš‚èšæ¬å®¶"æ€æƒ³æŠŠä»»æ„大任务切分æˆå¯å¹¶è¡Œçš„å°ç‰‡æ®µï¼Œé€‚ç”¨äºŽæµ·é‡æ•°æ®æŒç»æŠ½å–ã€æŒ‰æ—¶é—´çª—壿»šåŠ¨æ±‡æ€»ã€æ•°æ®è¡¥ç®—/回溯修å¤ç‰åœºæ™¯ã€‚
| 产å“/工程 | å®šä½ |
|-----------|------|
| `AntJob` (NuGet: NewLife.AntJob) | 客户端 SDK,æä¾›è°ƒåº¦å™¨ã€å¤„ç†å™¨åŸºç±»ã€ä½œä¸šæä¾›è€…æŽ¥å£ |
| `AntJob.Extensions` (NuGet) | 扩展调度模å¼ï¼šSQL é©±åŠ¨ã€æ¶ˆæ¯é©±åЍã€C# 动æ€è„šæœ¬ |
| `AntJob.Data` | XCode ORM æ•°æ®å±‚,作业/任务/消æ¯/é”™è¯¯ç‰ 6 å¼ æ ¸å¿ƒè¡¨ |
| `AntJob.Server` | 调度ä¸å¿ƒæœåŠ¡ç«¯ï¼ŒåŸºäºŽ Remoting TCP RPCï¼Œè´Ÿè´£ä»»åŠ¡åˆ†ç‰‡ä¸Žåˆ†é… |
| `AntJob.Web` | Cube MVC å¯è§†åŒ–管ç†åŽå°ï¼Œä½œä¸šç›‘控ã€ä»»åŠ¡ç®¡ç†ã€å¤šç§Ÿæˆ·éš”离 |
| `AntJob.Agent` | 独立执行代ç†ï¼ŒæŽ¥æ”¶è°ƒåº¦ä¸å¿ƒä¸‹å‘çš„ C#/SQL 任务 |
### 1.2 愿景
ä¼ä¸šåªéœ€ç¼–写一个 Handler 类,å³å¯èŽ·å¾—åˆ†å¸ƒå¼è°ƒåº¦ã€å¼¹æ€§ä¼¸ç¼©ã€å¤±è´¥é‡è¯•ã€æ•°æ®åˆ‡ç‰‡ã€å¯è§†åŒ–监控ç‰å…¨éƒ¨èƒ½åŠ›â€”â€”æŠŠè°ƒåº¦å¤æ‚度交给框架,业务开å‘者åªå…³å¿ƒ"处ç†ä¸€æ¡æ•°æ®"。
---
## 2. æ ¸å¿ƒç›®æ ‡
| ç¼–å· | ç›®æ ‡ | 所属层级 | 一å¥è¯æè¿° |
|------|------|----------|------------|
| SYS | æ ¸å¿ƒè°ƒåº¦å¼•æ“Ž | 基础层 | æä¾›å¤šæ¨¡å¼ç»Ÿä¸€è°ƒåº¦èƒ½åŠ›ï¼ˆå®šæ—¶/æ•°æ®çª—å£/消æ¯é©±åŠ¨ï¼‰ï¼Œç®¡ç† Handler ç”Ÿå‘½å‘¨æœŸä¸Žä»»åŠ¡åˆ†å‘ |
| DATA | æ•°æ®æŒä¹…化 | 基础层 | XCode ORM 实体层,æŒä¹…化作业é…ç½®ã€ä»»åŠ¡å®žä¾‹ã€é”™è¯¯è®°å½•ã€æ¶ˆæ¯é˜Ÿåˆ— |
| EXT | 扩展调度 | æ ¸å¿ƒå±‚ | æä¾› SQL æ•°æ®é©±åŠ¨ã€æ¶ˆæ¯é©±åЍ SQLã€C# 动æ€è„šæœ¬ç‰é«˜çº§è°ƒåº¦æ¨¡å¼ |
| SRV | 调度ä¸å¿ƒæœåŠ¡ | æ ¸å¿ƒå±‚ | RPC æœåŠ¡ç«¯ï¼Œè´Ÿè´£ä»»åŠ¡åˆ‡ç‰‡ç”Ÿæˆã€åˆ†é…ã€é‡è¯•ç–ç•¥ã€é›†ç¾¤å¼¹æ€§ä¼¸ç¼© |
| WEB | å¯è§†åŒ–ç®¡ç† | 表现层 | Cube MVC åŽå°ï¼Œåº”用/作业/任务/消æ¯/错误的 CRUD 管ç†ä¸Žç›‘æŽ§çœ‹æ¿ |
| AGT | èš‚èšä»£ç† | 工具层 | ç‹¬ç«‹å¯æ‰§è¡Œä»£ç†ç¨‹åºï¼ŒæŽ¥æ”¶å¹¶æ‰§è¡Œè°ƒåº¦ä¸å¿ƒä¸‹å‘çš„ C#/SQL 任务 |
| TST | 自动化测试 | è´¨é‡å±‚ | xUnit å•å…ƒæµ‹è¯•ï¼Œè¦†ç›–æ ¸å¿ƒè°ƒåº¦é€»è¾‘ã€æ—¶é—´è¡¨è¾¾å¼ã€æ¨¡æ¿å¼•擎ã€SQL è§£æž |
> ç¼–ç è¯´æ˜Žï¼šé‡‡ç”¨å—æ¯å‰ç¼€æ–¹æ¡ˆã€‚å˜é‡é¡¹ç›®å¯ç»§ç»ä½¿ç”¨ Mx- ç¼–ç 。
---
## 3. 功能需求
### 3.1 SYS — æ ¸å¿ƒè°ƒåº¦å¼•æ“Ž
- **SYS-1 调度器 Scheduler**ï¼šæ ¸å¿ƒè°ƒåº¦å¼•æ“Žï¼Œç®¡ç† Handler 集åˆï¼Œä»Ž DI 容器å‘现处ç†å™¨ï¼Œè¿žæŽ¥è°ƒåº¦ä¸å¿ƒå¹¶å¯åœè°ƒåº¦ã€‚
- **SYS-2 处ç†å™¨åŸºç±» Handler**:作业处ç†å™¨æŠ½è±¡åŸºç±»ï¼Œæä¾› Init→Start→Acquire→Process→Execute→OnFinish 完整生命周期,支æŒåŒæ¥/异æ¥åŒæ¨¡ã€‚
- **SYS-3 任务上下文 JobContext**:å°è£…啿¬¡ä»»åŠ¡æ‰§è¡Œçš„å…¨éƒ¨çŠ¶æ€ï¼ˆå‚æ•°ã€ç»“æžœã€æ•°æ®ã€å¼‚常ã€è€—æ—¶ã€é€Ÿåº¦ï¼‰ã€‚
- **SYS-4 è°ƒåº¦æ¨¡å¼ JobModes**ï¼šä¸‰ç§æ¨¡å¼â€”—Data(æ•°æ®çª—å£, 值=1)ã€Time(定时/Cron, 值=2)ã€Message(消æ¯é©±åЍ, 值=3)。
- **SYS-5 ä»»åŠ¡çŠ¶æ€ JobStatus**:七æ€çŠ¶æ€æœºâ€”—就绪→抽å–ä¸â†’处ç†ä¸â†’完æˆ/错误/å–æ¶ˆ/延迟é‡è¯•。
- **SYS-6 作业与任务模型**:IJob/JobModel/ITask/TaskModelï¼Œå« DataTime/End/Step/Offset/BatchSize/MaxTask ç‰è°ƒåº¦å‚数。
- **SYS-7 作业æä¾›è€…接å£**:IJobProvider 定义 Acquire/Produce/Report/Finish/GetJobs/SetJob å…ä¸ªæ ¸å¿ƒæ“作。
- **SYS-8 网络æä¾›è€…**:基于 NewLife.Remoting TCP RPC 连接调度ä¸å¿ƒï¼Œè‡ªåŠ¨ä¸ŠæŠ¥ä½œä¸šã€ç”³è¯·ä»»åŠ¡ã€æŠ¥å‘Šè¿›åº¦ã€‚
- **SYS-9 文件æä¾›è€…**:XML 文件æŒä¹…化作业é…置,适åˆç¦»çº¿/啿œºè°ƒè¯•场景。
- **SYS-10 Http æä¾›è€…**:HTTP 调度接入通é“(编译排除,A/B 测试阶段,规划替代 TCP 通é“)。
- **SYS-11 èš‚èšå®¢æˆ·ç«¯ AntClient**:RPC 客户端,å°è£… Login/GetJobs/AddJobs/Acquire/Report/Finish ç‰è¿œç¨‹è°ƒç”¨ã€‚
- **SYS-12 客户端é…ç½® AntSetting**:Server(多地å€ä¸»å¤‡)/AppID/Secret/Debug é…置。
- **SYS-13 DI 集æˆ**:AddAntJob() 扩展方法,注册 Scheduler/AntJobWorker/AntSetting 到 DI 容器。
- **SYS-14 åŽå°æœåŠ¡**:BackgroundService å°è£…,自动åˆå§‹åŒ–å¹¶å¯åŠ¨è°ƒåº¦å™¨ã€‚
- **SYS-15 模æ¿åŠ©æ‰‹**:SQL 模æ¿å˜é‡æ›¿æ¢ {dt}/{End}/{Message},支æŒè‡ªå®šä¹‰æ ¼å¼åŒ–å—符串。
- **SYS-16 时间表达å¼**ï¼šè§£æž {dt+1M+5d:yyyyMMdd} ç‰æ—¶é—´å移表达å¼ï¼Œæ”¯æŒ y/M/d/H/m/s/w å•ä½ã€‚
- **SYS-17 消æ¯å¤„ç†å™¨**:消æ¯é©±åŠ¨è°ƒåº¦åŸºç±»ï¼ŒTopic 订阅 + JSON 消æ¯è§£ç + 逿¡ ProcessItem。
- **SYS-18 C# 脚本处ç†å™¨**:定时执行 C# 动æ€ä»£ç 的处ç†å™¨åŸºç±»ï¼ˆæš‚缓:安全沙箱未定,抛出 NotImplementedException)。
- **SYS-19 消æ¯é€‰é¡¹**ï¼šæ¶ˆæ¯æŠ•é€’é€‰é¡¹â€”â€”å»¶è¿Ÿæ‰§è¡Œ/消æ¯åŽ»é‡/跨应用投递。
### 3.2 DATA — æ•°æ®æŒä¹…化
- **DATA-1 应用系统实体 App**:多租户应用隔离,Name/Secret/Enable/Version/JobCount。
- **DATA-2 应用在线实体 AppOnline**:在线实例追踪(心跳更新),Instance/Client/统计(Tasks/Total/Success/Error/Cost/Speed)。
- **DATA-3 作业实体 Job**:作业完整定义,Mode/Cron/Step/Offset/MaxTask/æŽ§åˆ¶å‚æ•°(MaxError/MaxRetry/MaxTime)/统计/QuietTimeå…æ‰“扰。
- **DATA-4 作业任务实体 JobTask**:任务实例,DataTime/End/Status/Client/统计(Speed/Cost/FullCost)/Key/Data/TraceId。
- **DATA-5 作业错误实体 JobError**ï¼šé”™è¯¯è¿½è¸ªè®°å½•ï¼Œå…³è” Job/Task,记录异常信æ¯å’Œæ‰§è¡Œä¸Šä¸‹æ–‡ã€‚
- **DATA-6 应用历å²å®žä½“ AppHistory**:æ“作审计日志(雪花Id分表),Action/Success/TraceId。
- **DATA-7 应用消æ¯å®žä½“ AppMessage**:消æ¯é˜Ÿåˆ—å˜å‚¨ï¼ˆé›ªèбId分表),Topic/Data/DelayTime,支æŒå»¶è¿Ÿæ¶ˆè´¹ã€‚
- **DATA-8 Model.xml æ•°æ®æ¨¡åž‹**:XCode ORM å®Œæ•´è¡¨ç»“æž„å®šä¹‰ï¼Œå« DataScale 分表ã€Map 外键ã€Index 索引。
### 3.3 EXT — 扩展调度
- **EXT-1 æ•°æ®å¤„ç†ä½œä¸š DataHandler**:数æ®çª—å£è°ƒåº¦åŸºç±»ï¼ŒæŒ‰æ—¶é—´å—段分批 Fetch→Execute,自动识别雪花Id/ä¸»æ—¶é—´å—æ®µï¼Œæ”¯æŒ KeepFirstPage 模å¼ã€‚
- **EXT-2 SQL è¯å¥å¤„ç†å™¨ SqlHandler**:定时执行 SQL è¯å¥é›†ï¼Œæ”¯æŒ Query/Execute/Insert ä¸‰ç§æ“作,自动事务管ç†ï¼ˆæäº¤/回滚)。
- **EXT-3 SQL 消æ¯å¤„ç†å™¨ SqlMessage**:消æ¯é©±åЍ SQL æ‰§è¡Œï¼Œè§£æž SELECT ç»“æžœä¸ topic_ å‰ç¼€åˆ—自动生产消æ¯ã€‚
- **EXT-4 SQL ç‰‡æ®µè§£æž SqlSection**:多 SQL è¯å¥è§£æžå™¨ï¼Œ/*use connName*/ 指定连接åï¼ŒåŒæ¢è¡Œåˆ†éš”片段,自动识别æ“作类型。
### 3.4 SRV — 调度ä¸å¿ƒæœåŠ¡
- **SRV-1 èš‚èš RPC æœåŠ¡ AntService**:IApi æœåŠ¡å±‚ï¼ŒIActionFilter é‰´æƒæ‹¦æˆªï¼Œæš´éœ² Login/GetJobs/AddJobs/SetJob/Acquire/Report/Finish。
- **SRV-2 åº”ç”¨è®¤è¯æœåŠ¡ AppService**:应用登录认è¯ï¼ˆSaltPasswordProvider md5)ã€è‡ªåŠ¨æ³¨å†Œã€Ping 心跳ã€åœ¨çº¿å®žä¾‹ç®¡ç†ã€‚
- **SRV-3 作业调度æœåŠ¡ JobService**ï¼šæ ¸å¿ƒè°ƒåº¦é€»è¾‘â€”â€”ä½œä¸š CRUDã€ä»»åŠ¡åˆ†é…(延迟é‡è¯•→错误é‡è¯•â†’æ—¶é—´åˆ‡ç‰‡â†’æ¶ˆæ¯æ¶ˆè´¹ï¼‰ã€å…¨å±€ Redis é”防并å‘。
- **SRV-4 Worker åŽå°æœåŠ¡**:ApiServer å¯åЍ(端å£9999)ã€å®šæ—¶æ¸…ç†åœ¨çº¿è¿‡æœŸ/è¿‡æœŸä»»åŠ¡ã€æ˜Ÿå°˜æ³¨å†Œä¸å¿ƒæ³¨å†Œã€‚
- **SRV-5 æœåŠ¡ç«¯é…ç½® AntJobSetting**:Port/TokenSecret/TokenExpire/SessionTimeout/AutoRegistry。
- **SRV-6 Program å…¥å£**:DI 注册(Stardust/Cache/AppService/JobService/å¯†ç æä¾›è€…/EntityFactory 预çƒï¼‰ã€‚
### 3.5 WEB — å¯è§†åŒ–管ç†åŽå°
- **WEB-1a AntJob HTTP API**:REST API 控制器,JWT 鉴æƒï¼Œæä¾› Login/GetJobs/AddJobs/Acquire ç‰ HTTP 端点。
- **WEB-2a èš‚èšåŒºåŸŸæ³¨å†Œ**:Cube 区域"èš‚èšè°ƒåº¦",AntEntityController\<T\> åŸºç±»æ”¯æŒ appId 导航æ 。
- **WEB-3a åº”ç”¨ç³»ç»Ÿç®¡ç†æŽ¥å£**:应用 CRUD æ•°æ®æ“作。
- **WEB-3b 应用系统管ç†é¡µé¢**:应用列表页,å«åœ¨çº¿/作业/任务/消æ¯/错误/历å²å¿«æ·é“¾æŽ¥ã€‚
- **WEB-4a ä½œä¸šç®¡ç†æŽ¥å£**:作业 CRUD æ•°æ®æ“作。
- **WEB-4b 作业管ç†é¡µé¢**:作业列表页,模å¼å½©è‰²æ ‡è®°ï¼ŒCron/下一次时间显示,Success/Error 彩色数å—。
- **WEB-5a ä»»åŠ¡ç®¡ç†æŽ¥å£**:任务查询与批é‡é‡ç½®æ“作。
- **WEB-5b 任务管ç†é¡µé¢**:任务列表页,按模å¼å½©è‰²æ¸²æŸ“时间,状æ€é¢œè‰²ï¼Œæ”¯æŒæ‰¹é‡é‡ç½®ã€‚
- **WEB-6a 在线实例接å£**:在线节点 CRUD æ•°æ®æ“作。
- **WEB-6b 在线实例页é¢**:在线实例列表,查看å„节点统计信æ¯ã€‚
- **WEB-7a æ“ä½œåŽ†å²æŽ¥å£**:审计日志查询。
- **WEB-7b æ“作历å²é¡µé¢**:应用审计日志列表查看。
- **WEB-8a 消æ¯ç®¡ç†æŽ¥å£**:消æ¯é˜Ÿåˆ— CRUD æ•°æ®æ“作。
- **WEB-8b 消æ¯ç®¡ç†é¡µé¢**:消æ¯é˜Ÿåˆ—查看管ç†ã€‚
- **WEB-9a é”™è¯¯ç®¡ç†æŽ¥å£**:错误记录查询。
- **WEB-9b 错误管ç†é¡µé¢**:作业错误列表查看。
- **WEB-10 Startup å¯åЍé…ç½®**:AddCube/AddStardust/EntityFactory é¢„çƒ 4 个连接(Membership/Log/Cube/Ant)。
### 3.6 AGT — èš‚èšä»£ç†
- **AGT-1 Agent å…¥å£ç¨‹åº**ï¼šç‹¬ç«‹å¯æ‰§è¡Œä»£ç†ï¼Œå¼•用 AntJob + AntJob.Extensions,接收调度ä¸å¿ƒä¸‹å‘çš„ C#/SQL 任务并执行。
### 3.7 TST — 自动化测试
- **TST-1 作业逻辑测试**:CheckQuiet å…æ‰“扰时段计算(跨天/多时段/边界)。
- **TST-2 æ—¶é—´è¡¨è¾¾å¼æµ‹è¯•**:ParseItem/Execute/TestDefault。
- **TST-3 模æ¿åŠ©æ‰‹æµ‹è¯•**:Build æ—¶é—´å˜é‡/消æ¯å˜é‡æ›¿æ¢ã€‚
- **TST-4 SQL 处ç†å™¨æµ‹è¯•**:Execute 多è¯å¥æ‰§è¡Œã€‚
- **TST-5 SQL ç‰‡æ®µè§£æžæµ‹è¯•**:ParseQuery/Insert/Delete è§£æžéªŒè¯ã€‚
---
## 4. 🧊 暂缓清å•
| 功能 | 暂缓ç†ç”± | è§£å†»å‰æ |
|------|----------|----------|
| C# 脚本执行沙箱 | CSharpHandler.Execute 主体逻辑为空(仅抛出 NotImplementedException),安全沙箱需设计 | 确定脚本安全ç–略与è¿è¡Œæ—¶éš”离方案 |
| WebSocket æŽ¥å…¥é€šé“ | v4 Roadmap 规划,ä¾èµ– NewLife.Remoting WebSocketClient | Remoting 层 WebSocket 支æŒå°±ç»ª |
---
## 5. ä¸åšä»€ä¹ˆ
- 䏿供 DAG 工作æµç¼–æŽ’ï¼ˆæ ¸å¿ƒç¨³å®šåŽå¯ä½œä¸ºå¯é€‰æ‰©å±•层)
- ä¸å†…置告è¦é€šçŸ¥æ¸ é“(邮件/Webhook ç‰ä¸º Roadmap 规划)
- 䏿›¿ä»£æ¶ˆæ¯é˜Ÿåˆ—(MQ),仅åšä»»åŠ¡è°ƒåº¦å±‚é¢çš„æ¶ˆæ¯é©±åЍ
|