历史演进
按照 CNCF 对Serverless计算的定义,Serverless架构应该是采用FaaS(函数即服务)和BaaS(后端服务)服务来解决问题的一种设计。
- 2006 年 AWS 推出 EC2(Elastic Compute Cloud),作为第一代 IaaS(Infrastructure as a Service),用户可以通过 AWS 快速的申请到计算资源,并在上面部署自己的互联网服务
- 14年 aws 推出 Lambda
- 19年 阿里云函数计算 2.0 发布
- 19年腾讯和 Serverless.com 战略合作
- 20年 midway Serverless 1.0 发布
- 21年 midway Serverless 2.0 发布
技术架构
FaaS核心流程:
和开发流程打通后:
生命周期:
CSE完整架构:
开发框架
框架 | 思路 | 优缺点 |
---|---|---|
Midway | 底层基于Egg,生态完全兼容,通知主推IoC和TypeScript。 目前维护迭代精力几乎都投在FaaS上 |
- 支持前后端一体开发 - 主打 Class + IoC 开发范式,同时支持 Function + Hooks - 可以做到 Egg.js 应用平滑升级 |
Serverless.com | 纯 FaaS 框架。 | - 支持 Node.js, Python, Java, Go,和 PHP 等语言 - 多云部署 - GitHub stars 多 |
Modern.js | 大一统式的框架,对很多最近实践做了整合,感觉像是 umi + Midway 的集合 | |
JAMStack | JavaScript + Apis + Markup | - 强调预渲染。性能非常好 |
典型产品:Midway、JAMStack、Serverless
部署平台
核心点:沙箱环境、资源调度、上下文传递、依赖管理、引用调用
技术点 | 云查询 | 阿里云Function | Serverless.com | Lambda | Google Cloud |
---|---|---|---|---|---|
沙箱环境 | safeify(vm2 + 进程) | ![]() require实现 |
|||
资源调度 | 进程级别调度 | CSE:进程级别 Serverless Worker(开发中):单core支持100+函数 |
|||
上下文传递 | Proxy | ||||
依赖管理 | 只有内置依赖 | 支持npm依赖 | |||
引用调用 | IPC通信 | 可以访问全局变量 | |||
公共方法 | 函数项引用 | Layer |
竞品
AWS Lambda
Google Cloud Functions
函数链接:https://console.cloud.google.com/functions/add?project=shaped-kite-330803
阿里云 Function
官方文档:https://help.aliyun.com/document_detail/156876.html
腾讯云 Serverless.com
SWOT
资源成本
进程级别隔离资源浪费非常严重
=> 业界前沿:Serverless worker 系列尝试支持 单core执行100+ 函数
deno
原生支持 Service Worker 等web规范,同时是默认安全的,有权限管控(文件、环境、网络)
前后端一体开发
各大公司都有探索。
WASI & WebAssembly
可以将多种语言转换成二进制,大幅提高性能同时做的语言无关
内部尝试
dn-middleware-function
核心思路:
- 约定 Function 目录为函数开发目录。文件层级和云查询一一对应
- 发布时经过构建编译(待实现)后同步云查询