定时更新

场景

用户反馈:

  • “为什么你们的股票数据是 5 分钟前的?”
  • “新闻更新太慢了”

技术分析:

  • 被动缓存:用户访问时才更新
  • 热点数据:应该主动更新
  • 定时任务:需要任务调度系统

解决方案

引入任务调度系统,主动更新缓存。

任务调度器选择

方案对比

方案优势劣势
cron简单、系统自带不支持分布式
Celery功能强大、分布式复杂、依赖多
APScheduler轻量、易用单机
云流程免运维成本高、有延迟

选择 APScheduler(轻量、满足需求)

选型边界
为什么先用 APScheduler
触发问题
热点数据需要主动刷新,单靠用户访问触发更新会让股票、新闻等 API 显得滞后。
候选方案
系统 cron、APScheduler、Celery Beat、云函数定时触发。
选择理由
当前任务数量少、依赖简单,APScheduler 可以直接嵌入服务,足够验证定时预热和定时清理的价值。
代价
它偏单机,服务重启、重复执行和任务漂移都需要额外处理;多实例部署时还要避免多个实例同时跑同一任务。
暂不解决
暂不引入 Celery 或云流程,因为现在还没有大量长任务、分布式 worker 和复杂编排需求。

APScheduler 实现

安装

设计流程
安装:部署操作
  1. 步骤 1:准备运行环境并启动服务
  2. 步骤 2:读取 API 配置、上游数据源和调度上下文
  3. 步骤 3:根据数据源健康、任务状态和重试次数选择下一步
  4. 步骤 4:写入任务结果、接口状态和下一次执行计划
关注点:数据源可用性、调度时机、重试上限和结果可追踪。

基础配置

设计流程
基础配置
  1. 步骤 1:执行接口调用、任务调度、预热或失败重试
  2. 步骤 2:刷新接口缓存、预热结果或数据源健康状态
  3. 步骤 3:校验身份、密钥或权限
关注点:数据源可用性、调度时机、重试上限和结果可追踪。

任务类型

1. 固定频率任务

设计流程
1. 固定频率任务
  1. 步骤 1:检查健康状态并触发告警
  2. 步骤 2:采集健康状态并触发告警
  3. 步骤 3:读取 API 配置、上游数据源和调度上下文
  4. 步骤 4:根据数据源健康、任务状态和重试次数选择下一步
关注点:数据源可用性、调度时机、重试上限和结果可追踪。

2. Cron 表达式任务

设计流程
2. Cron 表达式任务
  1. 步骤 1:计算用量、账单或套餐状态
  2. 步骤 2:读取 API 配置、上游数据源和调度上下文
  3. 步骤 3:根据数据源健康、任务状态和重试次数选择下一步
  4. 步骤 4:写入任务结果、接口状态和下一次执行计划
关注点:数据源可用性、调度时机、重试上限和结果可追踪。

3. 一次性任务

设计流程
3. 一次性任务
  1. 步骤 1:读取 API 配置、上游数据源和调度上下文
  2. 步骤 2:根据数据源健康、任务状态和重试次数选择下一步
  3. 步骤 3:写入任务结果、接口状态和下一次执行计划
关注点:数据源可用性、调度时机、重试上限和结果可追踪。

任务管理 API

查看任务列表

设计流程
查看任务列表
  1. 步骤 1:更新接口配置、任务状态或数据源可用性
  2. 步骤 2:读取 API 配置、上游数据源和调度上下文
  3. 步骤 3:根据数据源健康、任务状态和重试次数选择下一步
  4. 步骤 4:写入任务结果、接口状态和下一次执行计划
关注点:数据源可用性、调度时机、重试上限和结果可追踪。

手动触发任务

设计流程
手动触发任务
  1. 步骤 1:更新接口配置、任务状态或数据源可用性
  2. 步骤 2:写入队列并异步消费
  3. 步骤 3:读取 API 配置、上游数据源和调度上下文
  4. 步骤 4:根据数据源健康、任务状态和重试次数选择下一步
关注点:数据源可用性、调度时机、重试上限和结果可追踪。

高级任务

热点数据更新

设计流程
热点数据更新
  1. 步骤 1:写入缓存值、空值标记或热点保护状态
  2. 步骤 2:按本节策略读取、写入缓存并处理过期或失效
  3. 步骤 3:识别请求 key、缓存命中状态和回源数据对象
  4. 步骤 4:根据命中率、数据新鲜度和回源压力调整策略
关注点:命中率、回源压力、TTL 和异常 key 处理。

缓存预热

设计流程
缓存预热
  1. 步骤 1:读取、刷新或失效缓存数据
  2. 步骤 2:按本节策略读取、写入缓存并处理过期或失效
  3. 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。

数据清理

设计流程
数据清理
  1. 步骤 1:归档或清理过期数据
  2. 步骤 2:读取 API 配置、上游数据源和调度上下文
  3. 步骤 3:根据数据源健康、任务状态和重试次数选择下一步
  4. 步骤 4:写入任务结果、接口状态和下一次执行计划
关注点:数据源可用性、调度时机、重试上限和结果可追踪。

任务监控

任务执行日志

设计流程
任务执行日志
  1. 步骤 1:更新接口配置、任务状态或数据源可用性
  2. 步骤 2:准备接口配置、数据源状态、调度参数和重试规则
  3. 步骤 3:记录重试结果、失败原因和下一次执行计划
  4. 步骤 4:记录重试结果、失败原因和下一次执行计划
关注点:数据源可用性、调度时机、重试上限和结果可追踪。

失败重试

设计流程
失败重试
  1. 步骤 1:失败后执行重试、降级或兜底路径
  2. 步骤 2:刷新接口缓存、预热结果或数据源健康状态
  3. 步骤 3:失败重试、熔断或降级
关注点:数据源可用性、调度时机、重试上限和结果可追踪。

当前架构