uniCloud抢购活动小技巧
前情提要
uniCloud腾讯云版本有一个系统限制实例扩容速度500个/分钟
。这个限制导致每次大促时第一分钟云函数不能满状态运行。
此外单个云函数最多只能有1000实例同时运行,某些超高并发的场景可能会不够用。
下面会给出一种比较hacky的处理方案(一般业务做好防刷比这些花里胡哨的效果更好)
云函数突破1000实例?
通过将云函数复制为多份的方式来规避此限制。例如将云函数order复制10份order0、order1、order2、...order9
,客户端访问的时候随机访问其中一个即可
预热以避免扩容速度限制
- 通过在云函数内加入特别的逻辑让云函数在收到特定指令时多运行几秒占住实例(可参考下面的示例)
- 为云函数开启url化(需要注意的是最好绑定一下域名,默认url化域名有QPS限制)
- 通过一些并发工具触发云函数达到提前启动实例的效果(以下面云函数为例只要访问云函数url化地址且传入云函数内配置的secret即可触发预热逻辑:https://xxx.com/your_path?secret=your_secret$do_not_leak_this_secret),这里推荐下我常用的工具:ali
云函数代码示例
'use strict';
function delay(time) {
return new Promise(resolve => {
setTimeout(() => {
resolve()
}, time)
})
}
exports.main = async (event, context) => {
if (context.SOURCE === 'http' &&
event.queryStringParameters.secret === 'your_secret$do_not_leak_this_secret') { // 不要泄漏secret,也可以将此处逻辑改为验签逻辑,更安全
// 预热逻辑
await delay(3000)
return {}
}
// 云函数正常执行逻辑...
return {}
};