从零搭建 Node Faas(一) 整体设计
从零搭建 Node Faas(一) 整体设计
Faas 不是一个新概念,各大厂商都有对应的 Serverless 服务,比如 Cloudflare,Azure,AWS 都有对应的服务。
文章会梳理一下使用 Node 来搭建一整套 Faas 服务的过程。
一、Faas 定义
FaaS 是 “函数即服务”(Function as a Service)的缩写,是一种云计算服务模型,它允许开发人员编写、部署和运行函数式代码,而无需关心底层的服务器管理。FaaS 架构基于事件驱动编程模型,其中函数会响应特定事件的触发,执行相应的操作,然后在完成后自动销毁。这种服务模型使开发人员能够专注于编写业务逻辑,而不必担心服务器的配置、扩展性和维护等问题。 – ChatGPT
二、整体架构
整体设计按照三层来划分。
1. 平台层
平台层面即 Faas 平台所包含的几大类功能模块。
- 代码编辑器
- SDK
- 定时触发
- 编译部署
- 监控告警
- 日志
- DB
- Static Page
这几个模块会分别整理对应实现。
2. 运行时
运行时则是选择采用 vm2 沙箱来执行。其中选择了子进程来进行应用维度隔离,并没有用 docker 来做隔离。所以在资源分配上,并没有额外的处理。
运行时则主要涉及:
- 主进程子进程通信
- 进程调度策略
- 进程指标采集
3. 应用
应用这里就很多了,Faas 能做的事情很多,比如 Web 的接口,BFF 聚合,定时触发机器人等等。最大的优势就是无需服务器相关的繁琐配置。
三、整体流程
整体流程可以从两个维度去看。一个是用户视角的操作流程,一个是请求视角的函数执行过程。
1. 平台维度
从平台维度来讲,用户可以在平台上在线编辑发布(Live/Test),也可以在本地用提供的 CLI 来发布(Test)。
平台上编译过程放到了 Jenkins 中,本地的编译则和正常的开发 build 并无区别。
然后会将产物上传到 USS(对象存储)中,然后 server 将产物下载下来,并且把 function 存到数据库中。
平台维度的整个流程到这里就结束了。
2. Http 请求维度
从 Http 请求的维度来讲,当一个特定参数(携带 AppId 和 FunctionName)的请求进来之后,会被主进程根据 AppId 来将应用代理到对应的子进程上,会有一些调度策略,后面会详细整理。
然后子进程会在 VM2 沙箱中执行对应的 Function 逻辑。
这样当请求进来之后,就能得到对应的结果。
- 感谢你的欣赏!