历史演进

按照 CNCF 对Serverless计算的定义,Serverless架构应该是采用FaaS(函数即服务)和BaaS(后端服务)服务来解决问题的一种设计。

image.png

  • 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 发布

image.png

技术架构

image.png

以下截图来自 https://ata.alibaba-inc.com/articles/185619

FaaS核心流程:
image.png

和开发流程打通后:
image.png

生命周期:

image.png
CSE完整架构:

image.png

开发框架

框架 思路 优缺点
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 + 进程) image.png
require实现
资源调度 进程级别调度 CSE:进程级别
Serverless Worker(开发中):单core支持100+函数
上下文传递 Proxy
依赖管理 只有内置依赖 支持npm依赖
引用调用 IPC通信 可以访问全局变量
公共方法 函数项引用 Layer

竞品

AWS Lambda

image.png

image.png

Google Cloud Functions

image.png

函数链接:https://console.cloud.google.com/functions/add?project=shaped-kite-330803

阿里云 Function

image.png
官方文档: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 目录为函数开发目录。文件层级和云查询一一对应
  • 发布时经过构建编译(待实现)后同步云查询

image.png

node-demo:https://github.com/zhangcaiqian/serverless-demo