From 7a0cbab1624efc46075f5a8d7efd086421da9c1f Mon Sep 17 00:00:00 2001 From: wangyaqi Date: Fri, 2 Apr 2021 17:07:49 +0800 Subject: [PATCH] docs: uniCloud concurrency & ttl --- docs/uniCloud/cf-functions.md | 55 ++++++++++++++++++++++++++++++++++- docs/uniCloud/db-index.md | 14 +++++++++ docs/uniCloud/release.md | 4 +++ 3 files changed, 72 insertions(+), 1 deletion(-) diff --git a/docs/uniCloud/cf-functions.md b/docs/uniCloud/cf-functions.md index 30e13a6ad..a3322e2d6 100644 --- a/docs/uniCloud/cf-functions.md +++ b/docs/uniCloud/cf-functions.md @@ -270,6 +270,58 @@ serverless默认是没有固定的服务器IP的,因为有很多服务器在 - 同一个服务空间内所有开启固定出口IP的云函数使用的是同一个IP。 - 如果你是免费版升配到付费版,开启`固定IP`功能后,会导致付费版到期无法自动降级到免费版,请注意按时续费 + +### 单实例并发度@concurrency + +> 仅阿里云支持 + +默认情况下云函数仅支持单实例单并发,即同一时间一个实例仅可为一个用户服务。通过修改云函数单实例并发度,可以修改云函数同一时间最多能处理多少请求。请务必确保你已经了解了开启后的效果及负面作用后再决定是否要配置 + +未开启单实例多并发时,如果云函数在已有一个实例1处理A请求时收到B请求,会新开启一个实例2用来处理B请求。如果云函数并发度>=2,上述场景的B请求将还由实例1处理,而不会新开启实例2,此时B请求就不会遇到冷启动问题了。 + +**开启方式** + +云函数详情页面配置单实例并发度即可,支持1-100之间的数值 + +**效果** + +- 有效减少并发请求时云函数冷启动次数 + +**副作用** + +- 云函数内存使用量会随着并发量增大而增加 +- 如果同时处理的不同请求对全局变量进行读写会污染全局变量,可能会导致意想不到的后果,开启单实例多并发后请尽量不要使用全局变量,除非你知道后果是什么并且期望得到此结果 + +**关于uni-id的特殊说明** + +```js +// 开启单实例多并发前的uni-id用法 +const uniID = require('uni-id') +exports.main = async function(event, context) { + const res = uniID.login({ + // ...一些参数 + }) + return res +} + +// 由于uni-id默认会从一个内置全局变量上获取客户端平台信息,不同请求会修改此全局变量可能造成混乱,开启单实例多并发后需要将uni-id修改为如下写法 +let uniID = require('uni-id') +exports.main = async function(event, context) { + let uniIDIns = uniID.createInstance({ // 创建uni-id实例,其上方法同uniID + context: context // 传入context防止不同请求互相影响 + }) + const res = uniIDIns.login({ + // ...一些参数 + }) + return res +} +``` + +**进阶** + +开启单实例多并发后的全局变量复用并非一定是坏的结果,如果你很了解此行为,也可以对此进行有效的利用 + +例:[ip-filter](https://ext.dcloud.net.cn/plugin?id=4619)中就利用云函数全局缓存一些ip访问信息来限制单ip访问频率,可以下载示例项目体验一下 ## 云函数package.json@packagejson @@ -308,7 +360,8 @@ package.json是一个标准json文件,不可带注释。下面是一个package 其中cloudfunction-config字段是云函数配置,支持的配置如下 ```js -{ +{ + "concurrency": 10, // 单个云函数实例最大并发量,不配置的情况下默认是1 "memorySize": 256, // 函数的最大可用内存,单位MB,可选值: 128|256|512|1024|2048,默认值256 "timeout": 5, // 函数的超时时间,单位秒,默认值5。最长为60秒,阿里云在定时触发时最长可以是600秒 // triggers 字段是触发器数组,目前仅支持一个触发器,即数组只能填写一个,不可添加多个 diff --git a/docs/uniCloud/db-index.md b/docs/uniCloud/db-index.md index 409eb0aa2..f1f95e3d1 100644 --- a/docs/uniCloud/db-index.md +++ b/docs/uniCloud/db-index.md @@ -133,6 +133,20 @@ ![地理位置索引](https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-dc-site/21b31780-5fb0-11eb-bdc1-8bd33eb6adaa.jpg) +### TTL索引@ttl + +ttl索引用于设置数据过期时间,并在数据过期后进行删除。 + +配置方式如下: + +![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/25187fa4-dc40-48a2-ba00-e6ad8c604c39.jpg) + +**注意** + +- 数据删除并非实时,mongoDB会在后台定时进行数据清理 +- 启用ttl索引后仅可添加一个索引字段 +- 仅支持对存储了日志类型(并非时间戳)的字段进行设置ttl索引 + ## 索引使用注意事项 ### 唯一性限制 diff --git a/docs/uniCloud/release.md b/docs/uniCloud/release.md index d6c28b90d..6928d6ac0 100644 --- a/docs/uniCloud/release.md +++ b/docs/uniCloud/release.md @@ -1,3 +1,7 @@ +#### 2021-04-02 + + 阿里云 新增 支持对云函数设置单实例并发度 [详情](https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=concurrency) + + 阿里云 新增 支持TTL索引 [详情](https://uniapp.dcloud.net.cn/uniCloud/db-index?ttl) + #### 2021-03-16 + unicloud-db组件 add、update、remove方法新增可选参数needConfirm、needLoading、loadingTitle [详情](https://uniapp.dcloud.net.cn/uniCloud/unicloud-db?id=add) + unicloud-db组件 新增 load 事件支持 pagination [详情](https://uniapp.dcloud.net.cn/uniCloud/unicloud-db?id=loadevent) -- GitLab