valine因流控无法唤醒解决方案

前段时间,博客的 Valine 评论后基本收不到邮件通知,这是因为 LeanCloud 的云引擎休眠后没有被定时任务正常唤醒。去 LeanCloud 一看,发现了” 因流控原因,通过定时任务唤醒体验版实例失败,建议升级至标准版云引擎实例避免休眠”。

官方说法:我们近期发现有大量云引擎的体验版(免费版)用户创建了在同一时刻触发的定时任务唤醒容器运行,会对服务的负载产生一定影响。因此我们决定根据服务器的负载,对这些定时任务添加流控,通过定时任务唤醒容器将有可能会失败。这个改动不会对云引擎的标准版(付费版)用户产生影响。

下面是解决方案。

1. 云引擎休眠策略

云引擎体验实例会执行休眠策略:

  • 如果应用最近一段时间(半小时)没有任何外部请求,则休眠。
  • 休眠后如果有新的外部请求实例则马上启动。访问者的体验是第一个请求响应时间是 5 ~ 30 秒(视实例启动时间而定),后续访问响应速度恢复正常。
  • 强制休眠:如果最近 24 小时内累计运行超过 18 小时,则强制休眠。此时新的请求会收到 503 的错误响应码,该错误可在 云引擎 > 统计 中查看。

那么我们只要每三十分钟之内在外部访问一次即可解决。

2. 解决方案

这里使用的是 GitHub+Actions。

  1. 打开 GitHub,鼠标点击自己头像,然后选择 setting
  2. 点击 Developer settings
  3. 选择 Personal access tokens,添加一个新的 TOKEN。这个 TOKEN 主要使用来启动 actions 和上传结果用的。设置名字为 GITHUB_TOKEN , 然后勾选 repo , admin:repo_hook , workflow 等选项,最后点击 Generate token 即可。名字请务必使用 GITHUB_TOKEN
  4. 接下来 FORK 项目。地址:https://github.com/blogimg/WakeLeanCloud
  5. 成功 FORK 后,进入项目的设置。选择 Secrets,添加你的评论后台地址,一定是 Leancloud 的后台地址(环境变量 ADMIN_URL),而不是你的博客地址。其中 Name 的名字必须为 SITEValue 可以是多个后台地址(注意请求头也要写),用英文逗号分隔。
  6. 接下来对自己的项目点个 star 就能启动了,启动后请切换到 actions,看看是否运行成功。(如若不能成功,取消star,再点一次star)

3. 参考链接

1.优雅解决 LeanCloud 流控问题

2.LeanCloud 云引擎因流控无法唤醒解决方案