这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
定时更新
场景
用户反馈:
- “为什么你们的股票数据是 5 分钟前的?”
- “新闻更新太慢了”
技术分析:
- 被动缓存:用户访问时才更新
- 热点数据:应该主动更新
- 定时任务:需要任务调度系统
解决方案
引入任务调度系统,主动更新缓存。
任务调度器选择
方案对比
| 方案 | 优势 | 劣势 |
|---|---|---|
| cron | 简单、系统自带 | 不支持分布式 |
| Celery | 功能强大、分布式 | 复杂、依赖多 |
| APScheduler | 轻量、易用 | 单机 |
| 云流程 | 免运维 | 成本高、有延迟 |
选择 APScheduler(轻量、满足需求)
选型边界
为什么先用 APScheduler
- 触发问题
- 热点数据需要主动刷新,单靠用户访问触发更新会让股票、新闻等 API 显得滞后。
- 候选方案
- 系统 cron、APScheduler、Celery Beat、云函数定时触发。
- 选择理由
- 当前任务数量少、依赖简单,APScheduler 可以直接嵌入服务,足够验证定时预热和定时清理的价值。
- 代价
- 它偏单机,服务重启、重复执行和任务漂移都需要额外处理;多实例部署时还要避免多个实例同时跑同一任务。
- 暂不解决
- 暂不引入 Celery 或云流程,因为现在还没有大量长任务、分布式 worker 和复杂编排需求。
APScheduler 实现
安装
设计流程
安装:部署操作
- 步骤 1:准备运行环境并启动服务
- 步骤 2:读取 API 配置、上游数据源和调度上下文
- 步骤 3:根据数据源健康、任务状态和重试次数选择下一步
- 步骤 4:写入任务结果、接口状态和下一次执行计划
关注点:数据源可用性、调度时机、重试上限和结果可追踪。
基础配置
设计流程
基础配置
- 步骤 1:执行接口调用、任务调度、预热或失败重试
- 步骤 2:刷新接口缓存、预热结果或数据源健康状态
- 步骤 3:校验身份、密钥或权限
关注点:数据源可用性、调度时机、重试上限和结果可追踪。
任务类型
1. 固定频率任务
设计流程
1. 固定频率任务
- 步骤 1:检查健康状态并触发告警
- 步骤 2:采集健康状态并触发告警
- 步骤 3:读取 API 配置、上游数据源和调度上下文
- 步骤 4:根据数据源健康、任务状态和重试次数选择下一步
关注点:数据源可用性、调度时机、重试上限和结果可追踪。
2. Cron 表达式任务
设计流程
2. Cron 表达式任务
- 步骤 1:计算用量、账单或套餐状态
- 步骤 2:读取 API 配置、上游数据源和调度上下文
- 步骤 3:根据数据源健康、任务状态和重试次数选择下一步
- 步骤 4:写入任务结果、接口状态和下一次执行计划
关注点:数据源可用性、调度时机、重试上限和结果可追踪。
3. 一次性任务
设计流程
3. 一次性任务
- 步骤 1:读取 API 配置、上游数据源和调度上下文
- 步骤 2:根据数据源健康、任务状态和重试次数选择下一步
- 步骤 3:写入任务结果、接口状态和下一次执行计划
关注点:数据源可用性、调度时机、重试上限和结果可追踪。
任务管理 API
查看任务列表
设计流程
查看任务列表
- 步骤 1:更新接口配置、任务状态或数据源可用性
- 步骤 2:读取 API 配置、上游数据源和调度上下文
- 步骤 3:根据数据源健康、任务状态和重试次数选择下一步
- 步骤 4:写入任务结果、接口状态和下一次执行计划
关注点:数据源可用性、调度时机、重试上限和结果可追踪。
手动触发任务
设计流程
手动触发任务
- 步骤 1:更新接口配置、任务状态或数据源可用性
- 步骤 2:写入队列并异步消费
- 步骤 3:读取 API 配置、上游数据源和调度上下文
- 步骤 4:根据数据源健康、任务状态和重试次数选择下一步
关注点:数据源可用性、调度时机、重试上限和结果可追踪。
高级任务
热点数据更新
设计流程
热点数据更新
- 步骤 1:写入缓存值、空值标记或热点保护状态
- 步骤 2:按本节策略读取、写入缓存并处理过期或失效
- 步骤 3:识别请求 key、缓存命中状态和回源数据对象
- 步骤 4:根据命中率、数据新鲜度和回源压力调整策略
关注点:命中率、回源压力、TTL 和异常 key 处理。
缓存预热
设计流程
缓存预热
- 步骤 1:读取、刷新或失效缓存数据
- 步骤 2:按本节策略读取、写入缓存并处理过期或失效
- 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。
数据清理
设计流程
数据清理
- 步骤 1:归档或清理过期数据
- 步骤 2:读取 API 配置、上游数据源和调度上下文
- 步骤 3:根据数据源健康、任务状态和重试次数选择下一步
- 步骤 4:写入任务结果、接口状态和下一次执行计划
关注点:数据源可用性、调度时机、重试上限和结果可追踪。
任务监控
任务执行日志
设计流程
任务执行日志
- 步骤 1:更新接口配置、任务状态或数据源可用性
- 步骤 2:准备接口配置、数据源状态、调度参数和重试规则
- 步骤 3:记录重试结果、失败原因和下一次执行计划
- 步骤 4:记录重试结果、失败原因和下一次执行计划
关注点:数据源可用性、调度时机、重试上限和结果可追踪。
失败重试
设计流程
失败重试
- 步骤 1:失败后执行重试、降级或兜底路径
- 步骤 2:刷新接口缓存、预热结果或数据源健康状态
- 步骤 3:失败重试、熔断或降级
关注点:数据源可用性、调度时机、重试上限和结果可追踪。