

简体中文
云函数相当于 Node.js + Serverless + DCloud改进。
总结一下,前端同学即便可熟练编写Node.js代码,但对于DB优化、弹性扩容、攻击防护、灾备处理等方面还是有经验欠缺的,但uniCloud
将这些都封装好了,真正做到仅专注业务实现,其它都委托云厂商服务。
另外,在 Node.js 代码实现上,云函数每次执行的宿主环境(可简单理解为虚拟机或服务器硬件)可能相同,也可能不同,因此传统Node.js
开发中将部分信息存储本地硬盘或内存的方案就不再适合,建议通过云数据库或云存储的方案替代。
当然还有最重要的一点,在uniCloud中,推荐大量业务使用clientDB,一个应用中写不了太多云函数。
uniCloud提供了云函数URL化
,来满足上述需求。详见
云函数对应的资源,如果长时间不使用,会被阿里云或腾讯云平台从内存中释放。一旦被释放,启动云函数时会有一个冷启动的过程。
表现为:隔了很久不用,第一次用就会比较慢,然后立即访问第二次,则很快,毫秒级响应。
冷启动的速度一般不会超过1.5秒,如超过1.5秒应该是云函数写的有问题或网络有问题。
资源回收策略方面,阿里云是15分钟内没有第二次访问的云函数,就会被回收。腾讯云是半小时。
两家云厂商仍然在优化这个问题。目前如果开发者在意这个问题,给开发者的建议是:
不需要控制数量,实际开发中不会突破限制。
因为实际开发中会使用框架而不是真的一个一个开发云函数。
以免费空间的48个云函数举例,一般情况下:
上述几个是官方推荐的几个常用框架所带的云函数,然后开发者自己的代码里,大多数业务使用clientDB开发,不写云函数,或者写了配套的action云函数也不占用云函数数量;如果还需要自己写一些云函数,再加上uni-cloud-router,用这个单路由云函数搞定剩余需求;另外如果有跑批数据的需求可以再来一个云函数。所以无论如何48个云函数都占不满。
uniCloud的每个云函数是一个独立进程,不存在云函数级别的多级目录概念。
每个云函数下可以有子目录,但它们都属于这个云函数的一部分,而不是另一个云函数。
单路由云函数框架不止是官方提供的uni-cloud-router,插件市场有很多类似框架:详见
本章节仅对let's encrypt证书调整进行说明,其他情况请检查对应网站证书是否过期
let's encrypt于2021年9月30日根证书过期并切换到新版根证书。详情参考:DST Root CA X3 Expiration (September 2021)。此次过期行为引起nodejs8请求使用了let's encrypt证书的网站时出现certificate has expired
错误。
解决方案有以下两种:
将云函数升级到nodejs12,删除旧云函数,配置node版本之后重新上传。详情参考:云函数package.json
(不推荐)使用uniCloud.httpclient.request
时使用rejectUnauthorized: false
。示例代码如下:
const https = require('https')
const httpsAgent = new https.Agent({
rejectUnauthorized: false
})
await uniCloud.httpclient.request('https://xxx.com/get', {
httpsAgent
})
Unauthenticated access is denied
如使用腾讯云作为服务商,出现此问题时请检查前端是否有执行clearStorage操作。clearStorage会清理掉腾讯云设置的token,导致请求云函数报错。
unknow system error
检查云函数运行时间是否超出配置的超时时间,优化代码逻辑或配置更长的超时时间
UTC+0
UTC+8
点击uniCloud控制台“紧急报障”,提供spaceId、操作开启固定IP的云函数名称,由DCloud客服提交工单由腾讯云处理。
Throttling.Api: Request was denied due to api flow control
QPS限流,不区分云函数、云数据库、云存储读写等请求。可能原因及解决方法:
Throttling.Api.Concurrency: Request was denied due to api flow control
并发限流,包含云函数和云数据库两类请求。可能原因及解决方法:
FunctionResourceExhausted || ResourceExhausted
函数实例数限流。可能原因及解决方法:
PrePayResourceExhausted
套餐内某项资源超额限流。可升级套餐或者转为后付费,5分钟内自动恢复。
DomainNotRegistration: Domain name not registered.
绑定域名需要在阿里云完成ICP备案,如果域名在其他云厂商,需要在阿里云接入备案才能绑定
云函数请求时,会在header
中增加x-client-timestamp:1724819065430
参数,时间为客户端本地时间,如果本地时间与北京时间有差异,且较大时,会报这类错误。根本原因:时间戳参与签名,函数签名校验失败。