使用Cavalcade增强WordPress的Cron并优化大型WordPress站点的速度

    • 孙锡源
      楼主

      注意一下:这篇文章所述的内容的适用范围仅限于大型WordPress站点,也就是说只有你的网站每天要处理几百上千的计划任务时才需要看这篇文章。

      认识一下WordPress的Cron有哪些不足

      1. 是一个伪Cron,它通过在用户访问网页的同时发起一个独立HTTP请求的方式来触发Cron。也就是说只有存在用户访问时Cron才会触发。对于大型WordPress站点来说,这意味着每次用户打开一个网页其实等于他开了两个(用户本身的网页+Cron执行URL),于是就导致负载量徒增。一个解决方案是禁止WordPress默认的Cron触发方式,并改为使用WP-Cli配合操作系统的计划任务来触发。
      2. 使用全局锁,也就是说你同一时刻只能运行一个计划任务,这对有很多待处理队列的站点来说效率非常低
      3. 一旦遇到PHP执行失败的情况会整个停止掉,其后的所有请求都不会被处理
      4. 没有错误重试机制,也就是说一旦某个任务一次执行失败就会被略过
      5. 没有日志记录功能,例如执行中产生的错误都不会被记录,这一条和前面两条合起来就等于“不可靠”
      6. 相关数据保存在wp_options表中,并被设置为自动加载,也就是说你有1000个计划任务的话,这1000个任务会在每次网页打开时被加载。

      Cavalcade的优势

      Cavalcade完美解决了上述所有问题,其使用独立数据表保存计划任务,并由独立的队列监控服务进行调用,于是它可以在毫不影响网站性能的情况下并发处理成千上万的计划任务。最重要的是Cavalcade直接接管WordPress的Cron并完全兼容其API,这意味着作为开发者不需要做任何特殊的适配。

      此外,wordpress.org也在运行Cavalcade。

      安装Cavalcade

      参见官方GitHub仓库:https://github.com/humanmade/Cavalcade/tree/master/docs

  • 不凡
    参与者

    不明觉厉

  • 相信
    参与者
    相信
    参与者
    相信
    参与者

    厉害了,直接触及到我的知识盲区

  • 孙锡源
    楼主

    总结一下就是Cavalcade为WordPress添加了真正的任务队列支持,类似于Laravel的Horizon。之后就可以放心的使用WordPress的Cron运行大批量的计划任务了,并且可及时触发。

  • 孙锡源
    楼主

    实测Cavalcade还是很靠谱的,昨天执行了一次两万任务的队列,很稳定,且无遗漏。

  • 大哥
    参与者
    大哥
    参与者
    大哥
    参与者

    怎么安装?

  • 正在查看 5 条回复
    • 哎呀,回复话题必需登录。

    加入 LitePress 论坛 ,参与知识分享与交流
    登录 注册 进行评论
    立即加入