其他分享
首页 > 其他分享> > 使用云函数解决leancloud流控问题

使用云函数解决leancloud流控问题

作者:互联网

更好的阅读体验欢迎访问博客使用云函数解决leancloud流控问题

前言

博客的评论系统用的是Valine,Valine是一款基于LeanCloud的快速、简洁且高效的无后端评论系统。弄好了之后就没再关心Valine(其实是没有评论)了。直到某天看到有些文章的评论已经有5天了...于是便琢磨加个邮件通知功能,最后找到了这个项目Valine-Admin。按照说明在Leancloud部署源码和添加环境变量后成功开启邮件通知功能,但是白嫖的东西并不会那么完美(留下了穷人的泪水)...

Leancloud休眠策略

Leancloud的体验实例会有休眠策略:

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

而休眠后有新的请求实例会启动,但是此时邮件发送时失败的。在Valine-Admin项目中的解决办法是使用Leancloud的定时器,每天 7 - 23 点每 20 分钟访问一次,这样可以保持每天的绝大多数时间邮件服务是正常的。

4月15日后,官方限制了这一行为,通过定时任务唤醒容器可能会失败,所以只能另寻他法。

云函数唤醒容器

在寻找解决方案的时候看到了这位大佬的文章优雅解决LeanCloud流控问题,其中提到了一种解决思路,Leancloud限制的只是容器的定时任务唤醒,而外部访问依然会激活容器,所以可以通过外部定时任务访问容器来激活容器。能做到定时访问链接的东西有很多,但使用云函数更为简单和稳定。

以腾讯云函数为例,运行环境是Python3.6,函数代码为

import urllib.request
def main_handler(event, context):
    url="your URL"
    req=urllib.request.Request(url)
    resp=urllib.request.urlopen(req)

    print("外部访问运行完成!")

其中第三行的"your URL"为绑定的云引擎外部访问域名。函数的触发器表达式为

0 */20 7-23 * * * *

也就是每天 7 - 23 点每 20 分钟访问一次,这样可以保证每天的7点整到24点整能够正常使用,其他时间的评论可以添加定时任务【邮件补发】,在每天特定时间补发邮件,如表达式

0 0 8 * * ?

就是在每天8点补发邮件,这样就能保证评论邮件提醒不会漏发了。

最后还是要感谢Leancloud提供的Valine评论系统。

标签:容器,函数,流控,访问,休眠,Valine,Leancloud,leancloud,邮件
来源: https://www.cnblogs.com/alsaces/p/13837076.html