Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
331fcc5f
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3593
Star
108
Fork
920
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
120
列表
看板
标记
里程碑
合并请求
108
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
120
Issue
120
列表
看板
标记
里程碑
合并请求
108
合并请求
108
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
331fcc5f
编写于
8月 25, 2022
作者:
雪洛
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: update concurrency
上级
82c16539
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
17 addition
and
6 deletion
+17
-6
docs/uniCloud/cf-functions.md
docs/uniCloud/cf-functions.md
+17
-6
未找到文件。
docs/uniCloud/cf-functions.md
浏览文件 @
331fcc5f
...
...
@@ -993,9 +993,11 @@ uniCloud.httpProxyForEip.post(
> 仅阿里云支持
默认情况下云函数仅支持单实例单并发,即同一时间一个实例仅可为一个用户服务(不同用户
同一时间访问会被分派到不同实例进行处理)。通过修改云函数单实例并发度,可以修改云函数同一时间最多能处理多少请求。
所谓实例是指云函数的一个执行环境,可以简单的理解为一个node进程。默认情况下云函数仅支持单实例单并发,即同一时间一个实例仅可为一个请求服务(不同请求
同一时间访问会被分派到不同实例进行处理)。通过修改云函数单实例并发度,可以修改云函数同一时间最多能处理多少请求。
假设同时有3个请求需要处理,当实例并发度设置为1时,需要创建3个实例来处理这3个请求,每个实例分别处理1个请求。而每开启一个实例都会引发云函数冷启动;当云函数的实例并发度设置为10时(即1个实例可以同时处理10个请求),只需要创建1个实例就能处理这3个请求。这样后面2个并发请求不会造成云函数的冷启动。
假设同时有3个请求需要处理,当实例并发度设置为1时,需要创建3个实例来处理这3个请求,每个实例分别处理1个请求。而每开启一个实例都会引发云函数冷启动;当云函数的实例并发度设置为10时(即1个实例可以同时处理10个请求),只需要创建1个实例就能处理这3个请求。这样后面2个并发请求不会有因云函数实例创建带来的冷启动问题。
仍以并发度配置为3为例,如果客户端同时发起了四个请求,前三个请求会被分配给实例1处理,第4个请求会创建一个新的云函数实例来处理。
**开启方式**
...
...
@@ -1010,7 +1012,7 @@ uniCloud.httpProxyForEip.post(
-
适用于云函数连接三方服务器的场景,如果你的云函数只处理数据库请求,不要修改此配置,保持为1即可
-
云函数内存使用量会随着并发量增大而增加
-
如果并发的不同请求对全局变量同时进行读写会污染全局变量,可能会导致意想不到的后果,开启单实例多并发后请不要编写修改全局变量的代码,除非你熟悉这种技术带来的特殊应用,比如下文进阶部分提到的ip过滤。
-
设置过大的单实例多并发可能会导致实例底层网络请求排队从而导致请求超时,
**
再次强调此项,
一般情况下不要设置过大的并发度,具体数值可以自己针对业务代码测试一下**
-
设置过大的单实例多并发可能会导致实例底层网络请求排队从而导致请求超时,
**一般情况下不要设置过大的并发度,具体数值可以自己针对业务代码测试一下**
**适用场景**
...
...
@@ -1020,7 +1022,7 @@ uniCloud.httpProxyForEip.post(
|函数中有共享状态且不能并发访问 |不适用 |例如全局变量,多请求并发执行修改共享状态可能会导致错误。 |
|单个请求的执行要消耗大量CPU及内存资源 |不适用 |多请求并发执行会造成资源争抢,可能会导致内存不足(OOM)或者延时增加。 |
**关于
uni-id
的特殊说明**
**关于
旧版本uni-id公共模块
的特殊说明**
```
js
// 开启单实例多并发前的uni-id用法
...
...
@@ -1036,8 +1038,8 @@ exports.main = async function(event, context) {
let
uniID
=
require
(
'
uni-id
'
)
exports
.
main
=
async
function
(
event
,
context
)
{
let
uniIDIns
=
uniID
.
createInstance
({
// 创建uni-id实例,其上方法同uniID
context
:
context
,
// 传入context防止不同请求互相影响
config
:
{}
// 完整uni-id配置信息,使用config.json进行配置时无需传此参数
context
:
context
// 传入context防止不同请求互相影响
//
config: {} // 完整uni-id配置信息,使用config.json进行配置时无需传此参数
})
const
res
=
uniIDIns
.
login
({
// ...一些参数
...
...
@@ -1046,12 +1048,21 @@ exports.main = async function(event, context) {
}
```
不同于旧版uni-id公共模块uni-id-common不可直接require后使用,必须使用createInstance方法
**进阶**
开启单实例多并发后的全局变量复用并非一定是坏的结果,如果你很了解此行为,也可以对此进行有效的利用
例:
[
ip-filter
](
https://ext.dcloud.net.cn/plugin?id=4619
)
中就利用云函数全局缓存一些ip访问信息来限制单ip访问频率,可以下载示例项目体验一下
受单实例多并发的影响,云函数全局存放与本次请求有关的信息会造成混乱。因此uniCloud提供了根据当前requestId获取客户端信息和云端信息。参考以下文档
-
[
云函数获取当前requestId
](
cf-callfunction.md#context
)
-
[
云对象获取当前requestId
](
cloud-obj.md#get-request-id
)
-
[
获取当前云函数实例正在处理的请求对应的requestId列表
](
#get-request-list
)
-
[
获取当前云函数实例正在处理的请求对应的客户端信息列表
](
#get-client-infos
)
-
[
获取当前云函数实例正在处理的请求对应的云端信息列表
](
#get-cloud-infos
)
## 云函数package.json@packagejson
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录