【Solved】解决LeanCloud问题(因流控原因,通过定时任务唤醒体验版实例失败,建议升级至标准版云引擎实例避免休眠)

本文最后更新于:2021年8月18日下午1点45分

标签:

  • LeanCloud
  • 阿里云
  • Valine
  • Hexo
  • 云监控
  • 因流控原因,通过定时任务唤醒体验版实例失败,建议升级至标准版云引擎实例避免休眠

报错场景:

几个礼拜没管博客,评论也没有邮箱提醒,因此上去LeanCloud上看是不是评论系统出问题了,结果一看日志,果然,评论系统的邮箱提醒实例一直都是处于休眠状态

报错内容如下:

CloudQueue 运行失败 50dfc756-16b4-4de4-94e5-cb450920003e: self_wake !! {“error”:”因流控原因,通过定时任务唤醒体验版实例失败,建议升级至标准版云引擎实例避免休眠 “}

image-20210714105558664

当我们使用Hexo搭建博客的时候,往往需要一个评论板块,而主流的实现评论的系统有这几个:Valinegitmentgittalkgitter等等,其中想要使用Valine系统,是需要使用LeanCloud云服务的。

由于Valine评论是基于LeanCloud云服务,根据Valine作者的配置教程,想要免费白嫖LeanCloud是需要进行一系列骚操作的。

  1. 免费的云引擎的参数如下:

    image-20210714104200587

  2. 根据Valine作者配置,因为免费版是有休眠策略,策略如下:

    • 每天最多运行18个小时
    • 没有请求时会休眠(一般是半个小时没有请求的时候,实例就会休眠
  3. 针对这样的休眠策略,Valine作者给出的办法是,在LeanCloud中的云引擎中设定一个定时任务(0 */20 7-23 * * ?

    即从早上7:00到晚上23:59分,每20分钟唤醒一次

    image-20210714104536773

  4. 虽然在策略上是已经成功了,在理想情况下,即使有人在你的博客中评论,也只有8个小时的空档期,其余时间,还是可以正常使用博客中的评论系统的。LeanCloud会对这种自唤醒的定时器做流控,导致过了一段时间过后,即使有人评论,也收不到邮箱提醒。

  5. 因此,我们可以使用阿里云中的云监控进行定时请求,解决方案如下。

解决方案:

在解决之前,确认以下注意事项:

  • 域名是已经备案,并且能正常添加解析
  • 该解决方案需要一个使用二级域名,如:xxx.example.com
  • 博客是使用Hexo+Valine搭建的
  • 已经跟着Valine作者配置好了LeanCloud相应的AppIdAppKey以及Valine-Admin

接下来,正式开始解决这个问题:

  1. 打开LeanCloud,并进入控制台,找到设置—-域名绑定

image-20210714110505447

  1. 云引擎、ClientEngine 域名菜单下,点击绑定新域名

    image-20210714110630106

  2. 假设你的域名为example.com,为Valine后端分配的二级域名是xxx.example.com,那么就在域名栏内填入xxx.example.com

    image-20210714110804453

  3. 点击绑定之后,LeanCloud会自动审核你的备案信息,备案审核完成之后会让你添加域名解析,复制CNAME后面黄色方框内的这一串内容(下一步会用到

    image-20210714110952757

  4. 前往域名服务商添加域名解析,记录类型选择CNAME,主机记录中填入xxx,这里的xxx指的就是二级域名xxx.example.com中的xxx,解析线路默认即可,将刚刚复制的那一串记录值填入记录值栏

    image-20210714111418695

  5. 等待配置即可,配置过程大约需要10分钟左右,耐心等待。

  6. 等到页面显示已绑定的时候,在LeanCloud这边的配置就结束了

    image-20210714111627310

  7. 这时候可以正常访问xxx.example.com

    image-20210714111755870

  8. 进入阿里云官网,登录账号后,在主页面搜索云监控功能,开通相关功能,进入云监控控制台

    image-20210714111904657

  9. 找到云监控控制台下的新版站点监控,点击创建任务

    image-20210714112103639

  10. 任务名称随便起,然后在监控域名中填入https ://xxx.example.com,监控频率看个人,5分钟或者15分钟都可以

    由于是云监控的免费版本,所以任务到期时间只能设置一个月,想要长时间监控,还是需要付费的

    image-20210714112345345

  11. 点击下一步,探测点随便选择

    image-20210714112434818

  12. 选中云账号报警联系人,添加即可,最后点击完成即可。

image-20210714112515162

  1. 经过一天之后,云服务已经被正常唤醒了

    image-20210714112650875

至此,因流控问题无法启动实例的问题已经得到了解决。

后续:

该解决方案是利用阿里云的云监控发起请求防止LeanCloud中实例睡眠,然而阿里云的云监控也不是白嫖的…云监控设置的任务最多只能存活一个月,也就是说,每隔一个月都要去重新创建一个任务唤醒LeanCloud实例,还是有点麻烦的。