VP导航 VP导航
首页 提交网址

资讯文章 资讯 · NEWS

巡检、重建索引、发邮件:目录站那批后台任务该怎么排才不打架

2026-10-23 约 1,701 字 预计阅读 4 分钟 yiyunkj

巡检、重建索引、发邮件:目录站那批后台任务该怎么排才不打架 巡

目录站的后台任务有个共同特点:批量、耗时、对实时性没要求。巡检五千个站点是否存活、重建一次搜索索引、给订阅用户发一周新增邮件——这些都不需要毫秒级响应,但都很重。

定时任务与消息队列的批量巡检调度设计

图片来源:网络,版权归原作者所有,侵权请联系删除

先分清哪些是「任务」,哪些是「请求」

最容易出问题的设计是把批量动作塞进 Web 请求里。用户在后台点一下「重新抓取全部站点图标」,这个请求要跑四十分钟——网关先超时,然后用户重试,然后又跑一遍。

判断标准:超过两秒的动作都不应该在请求内同步执行。正确做法是请求只负责往队列里写一条任务,立刻返回,剩下的交给后台 worker。

应该在请求内完成应该丢进队列
提交单个站点批量导入一千条
查询列表数据全站状态巡检
单条记录的增删改重建搜索索引
发送一封验证邮件给订阅者群发周报

右边这一列还有一个共同点:它们都需要可见的执行状态。用户发起之后要能看到「进行中,已完成 320/1000」,而不是干等着。所以队列任务必须带进度记录。

任务按资源消耗分层

所有任务都往同一个队列里塞,结果就是互相拖累。按消耗的主要资源分成三条 lane:

  • CPU / 内存型——图片处理、索引重建、数据导出。特点是吃本地资源,worker 数量要受限。
  • 网络型——外站巡检、推送通知、调第三方 API。特点是大多时间在等 IO,并发可以高,但要控制对外部的并发以免被当成攻击。
  • 数据库型——批量更新、统计聚合。最容易把线上拖垮,必须限流。

三条 lane 各自有独立的并发上限。这样即使外站巡检开了两百个并发,也不会挤占索引重建需要的资源。

网络lane 的并发上限要按「对单个目标」而不是「总数」来设。巡检两百个不同站点没问题,同一个站点并发二十次就是攻击行了。

任务要幂等

幂等的意思是同一个任务执行两次,结果和执行一次一样。这听起来理所当然,实际很容易做错。

最常见的违反是计数类操作:UPDATE stats SET pv = pv + 1 执行一次和执行十次完全不同。遇到重试、重复入队、worker 崩溃后被重新调度,这类语句会把数据打乱。

三个让任务幂等的手段:

  • 带唯一的任务键——同一个 uid 的任务只允许存在一个,重复写入会被去重
  • 用覆盖写代替累加——把「加一」改成「按计算结果重新赋值」
  • 执行前记录状态——任务表里有 running / done / failed 三态,重复调度时先看状态

第一条最省事。做法是在任务表上给业务键加唯一索引,写入时用 INSERT ... ON DUPLICATE KEY 或者直接忽略。巡检任务按「日期 + 站点 ID」去重,就不会出现同一天巡检了同一个站三次的情况。

失败重试的三个条件

不是所有失败都该重试。

失败类型是否重试说明
网络超时重试大概率是暂时性的
对方返回 429按 Retry-After 延后对方明确告诉你什么时候再来
对方返回 404不重试这个 URL 就是没有了
数据校验失败不重试重试一万次还是这条坏数据
本机资源不足延后重试等别的任务跑完

重试间隔必须是指数退避加随机抖动:1 分钟、5 分钟、25 分钟这样往上走,每档加一点随机时间。不做退避的话,一批任务同时失败同时重试,会形成周期性的洪峰。

重试次数上限设在三次到五次之间。超过之后移到「死信」列表,等着人工看。这个列表一定要有界面能看到,否则它等于黑洞——任务失败到这儿就没人再管了。

周期任务的三条规矩

  • 不要整点执行。所有服务的定时任务都爱凑整点,你的巡检要是也赶在 :00,就会跟别人的任务一起挤在那几分钟。错开到 :17、:43 这类时间,环境会宽松很多。
  • 加分布式锁。多机部署时,cron 在每个节点上都会触发。没有锁的结果就是同一个任务跑 N 遍。Redis 的 SET NX EX 是最常用的实现方式,锁超时时间要设得比任务最长执行时间更长。
  • 记录上次跑完的位置。任务如果处理到一半崩了,下一次应该从断点继续而不是从头再来。给每个批次记一个游标,重启后从游标恢复。

留一条手动触发的通道

最后这件事务必做到:每个后台任务都要能在管理后台或命令行手动触发一次。

理由很简单,真出问题时你需要立刻重跑某个任务验证修好了没有,而不是等下一次定时。而且排查过程中手动单跑某一个条目的能力也很有用——把一万条批量拆成一次一条,能快速定位到底是哪条数据引发的崩溃。

本文标签 定时任务调度 后台队列设计 目录站批量巡检
← 上一篇 后台改完前台还是旧的:目录站读写分离之后必须处理的从 下一篇 → JS 报错不只是用户看不见内容:目录站的前端异常监控

— 本文完 —

提交网址

发现好站,欢迎自荐收录

站内搜索

站点统计

  • 今日审核0
  • 已收录站点3744
  • 正常访问3738
  • 失联站点6
  • 累计访问174

网站分类

  • AI工具 0
    AI对话0 AI绘画0 AI写作0 AI编程0 AI音视频0 AI办公效率0
  • 开发编程 0
    前端开发0 后端开发0 移动开发0 开源与代码托管0 数据库0 开发文档与教程0
  • 设计素材 0
    UI设计0 图标素材0 免费图库0 字体下载0 配色工具0 设计模板0
  • 站长工具 0
    网站统计0 SEO工具0 域名与主机0 收录提交0 建站程序0 运维监控0
  • 学习教育 0
    编程教程0 语言学习0 职业技能0 公开课与慕课0 考试题库0 中小学教育0
  • 生活服务 0
    交通出行0 外卖点餐0 房产租房0 医疗健康0 政务办事0 快递物流0
  • 影音娱乐 0
    影视观看0 音乐音频0 游戏资源0 短视频直播0 小说阅读0
  • 电商购物 0
    综合商城0 比价工具0 导购返利0 二手交易0 团购优惠0
  • 综合其他 1
    实用工具0 资源合集0 小众站点0 个人博客0 论坛社区0
  • 新闻资讯 0
    科技资讯8 财经媒体1 行业动态0 社会热点0 综合门户0
  • 资讯文章 270

最新收录

  • Git
  • Swift
  • 100font
  • Can I use
  • Kubernetes
  • 表越来越大但不是每条都常用:目录站条
  • 要不要开 IPv6:目录站双栈接入的
  • JS 报错不只是用户看不见内容:目录

浏览排行

  1. 满分作文网 6
  2. Let's Enhance 3
  3. 淘菜菜 3
  4. MasterClass 3
  5. TypeScript 中文网 3
  6. Zhengziying 3
  7. 得意生活 3
  8. 镇江网友之家 3

联系我们

bQ:12345678

电话:400-8888-888

邮箱:admin@example.com

时间:09:00-21:00

友情链接

车机屋·焊锡条·探兔AI导航·静电测试仪·大学生联盟

关于我们|广告合作|隐私条款|网站地图

原ICP备00000000号-1,@2026

由 Z-BlogPHP 驱动