serverless(无服务器架构)是一套低成本、高扩展的开发应用解决方案
运行逻辑
开发
开发者编写代码(1),上传代码(2)
消费
- 客户端通过http协议(3)访问函数计算
- 无运行实例,或并发量高于运行实例上限
- 平台分配服务器,加载含有开发代码的容器,并启动容器(即冷启动)
- 有运行实例
- 容器执行代码,并返回结果
- 无运行实例,或并发量高于运行实例上限
主要平台
- 阿里云 函数计算
- 适合商用,serverless的缺点基本上都有解决方案
- uniCloud
- 适合个人开发者,有免费的MongoDB,云存储,静态资源CDN
- 可选阿里云和腾讯云版本
- 在函数计算的基础上封装了一层,大概会多10-140ms延迟
- 只有北京区,较远的地区会有延时,如
杭州-北京约40ms,而杭州-杭州约10ms以内
优势
- 无运维,只需上传代码就能提供服务,不需要买服务器、装nginx、装代码运行环境
- 成本低,弹性伸缩。无访问时,运行实例为0,不计费
- 横向扩展无限制,可应对高流量、高并发场景
劣势 & 阿里云解决方案
- 冷启动有大约5秒延时
- 设置
预留模式实例数,保持有实例常驻
- 设置
- 无状态,不能依赖本地存储的文件,因为下一个访问可能不是这个实例。所有分布式应用的通病
- 挂载
NAS硬盘,所有实例都可以读写NAS内文件
- 挂载
- 不是基于端口,而是基于句柄函数回调,很多主流框架不能用
- Custom Runtime或Custom Container基于端口,可兼容主流框架
- 异步函数不能执行。一旦返回数据,进程立即挂起,导致异步任务无法执行甚至丢失。
- 编程模型扩展,可通过
pre-freeze回调执行异步函数
- 编程模型扩展,可通过