ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-10-18 21:01:46  阅读:401  来源: 互联网

标签:容器 函数 流控 访问 休眠 Valine 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有