Nodejs也能Serverless?从0开始用Nodejs打造一个FaaS服务

article/2025/9/5 15:47:10

本篇文章并不是教你怎么用阿里云、谷歌云等等云框架的FaaS服务,而是教你如何从0开始打造一个自己的FaaS服务。

受限于人力及成本原因,现在的FaaS服务基本上可以说是“大厂玩物”,而网上鲜有相关代码的实现,因此我才打算写一篇文章,和大家分享如何从0开始打造一个Nodejs的FaaS服务。

本篇文章中的项目tiny-node-faas已经上线并开源至GitHub,欢迎各位使用。

源码地址:https://github.com/shadowings-zy/tiny-node-faas

一、背景及相关概念介绍

1-1、Serverless

在这里插入图片描述
Serverless,直译就是无服务器,是指构建和运行不需要服务器管理的应用程序的概念。Serverless能够按需提供后端服务,用户可以直接编写和部署代码,而不必担心底层基础架构。

简单来说,如何判断一个服务是不是Serverless的呢?如果你在开发这个服务的时候,完全不知道“服务器多少”、“容器环境”等等和基础架构相关的东西的时候,那么这个服务就是Serverless的。

1-2、FaaS

FaaS是Function as a Service的缩写,可以简单理解为功能服务化。FaaS提供了一种服务碎片化的软件架构范式。FaaS可以让研发只需要关注业务代码逻辑,不再关注技术架构。

举个例子吧,如果我们要使用koa框架写一个hello world服务,我们得这样写:

const Koa = require('koa');
const app = new Koa();const handler = async (ctx) => {ctx.body = 'hello world'
}app.use(handler);
app.listen(8080,() => {console.log('8080端口已启动')
});

而如果使用FaaS服务,我们只需要关注下面这部分,其余的工作,比如服务创建、冷启动、负载均衡等等都由FaaS的提供方做了。

const handler = async (ctx) => {ctx.body = 'hello world'
}

1-3、为什么要做Nodejs的FaaS服务

之所以做Nodejs的FaaS服务,是因为有越来越多的开发者,以及越来越多的后台服务,选择使用Nodejs。

这其中当然有Nodejs本身“单线程异步非阻塞”的特性带给我们的简单直接的编程体验,也有一部分原因在于“前端全栈化”趋势会促使一部分前端工程师写后端代码逻辑。

而更值得关注的是,由于技术方向不同,不少前端开发工程师对运维、服务器的相关知识比较薄弱,因此为他们提供一个Nodejs的FaaS服务,能让其从运维中脱离出来,使开发者更聚焦于业务代码逻辑,是非常有前景的事情。

二、代码实现

2-1、vm模块

“如何实现Nodejs的FaaS服务”,这个问题可以换成下面这个问题:

如何才能在Nodejs中新建一个sandbox并在这个sandbox中执行指定的代码,并拿到返回值呢?

Nodejs实际上已经提供了这样一个模块——vm模块,下面是文档:
https://nodejs.org/api/vm.html

使用起来也很简单:

const vm = require('vm');const code = 'console.log("hello world!")'const sandbox = { console };
vm.createContext(sandbox);const data = vm.runInNewContext(code, sandbox);

通过vm模块,我们就能在一个新的sandbox中执行JavaScript代码并拿到返回值了

2-2、整体架构

在这里插入图片描述
如图所示,tiny-node-faas由四部分组成:
1、管理平台前端
2、函数管理功能
3、函数存储功能
4、函数执行功能

2、3、4三者则是FaaS服务中最重要的三个组成部分。

2-3、核心代码

const vm = require('vm')const runFunction = async (code) => {let timer = nullconst result = await new Promise((resolve, reject) => {const sandbox = {require,console}try {timer = setTimeout(() => {reject(new Error('Execute function time out'))}, 10000)vm.createContext(sandbox)const data = vm.runInNewContext(code, sandbox)resolve(data)} catch (error) {reject(error)}}).catch((err) => {return err instanceof Error ? err : new Error(err.stack)})if (timer) {clearTimeout(timer)timer = null}return result
}

上面代码中的runFunction方法就是最核心的执行FaaS函数的方法,我们只需要传入code,即需要运行的代码,这个方法就会新建一个sandbox并运行代码,然后会将运行结果返回出来。

2-4、安全相关

当然,直接使用vm做serverless是有一定的安全隐患的
比如使用require('os')会直接拿到物理机的操作系统权限,在这方面其实有很多有趣的涉及到诸如“沙箱逃逸”的话题。
GitHub上也有“更加安全的vm模块的实现”,如vm2
但受限于篇幅,以及本人的确不是什么攻防大神,这里就不再展开了。


http://chatgpt.dhexx.cn/article/iC4rNNL6.shtml

相关文章

OpenFaaS介绍

FaaS 云计算时代出现了大量XaaS形式的概念,从IaaS(Infrastructure as a Service)、PaaS(Platform as a Service)、SaaS(Software as a Service)到容器云引领的CaaS(Containers as a Service),再到火热的微服务架构,它们都在试着将各种软、硬…

深入理解无服务器架构(Faas/Serverless)

摘要 无服务器架构(Faas/Serverless),是软件架构领域的热门话题。 AWS,Google Cloud和Azure - 在无服务器上投入了大量资金,已经在看到了大量专门针对Faas/Serverless的文章、书籍,开源项目,会议。 但什么是无服务器&…

PaaS、IaaS 、SaaS、Bass、Fass、无服务的理解与区别

云计算(cloud computing) 关于云计算的定义有多种说法,现阶段广为接受的是美国国家标准与技术研究院(NIST)定义:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问&…

云计算服务类型都是什么?IaaS、PaaS、SaaS、BaaS、FaaS

云计算服务类型都是什么?IaaS、PaaS、SaaS、BaaS、FaaS 基本概念 云计算主要分为 4 种类型:私有云、公共云、混合云和多云。 同时,云计算服务主要有 3 种:基础架构即服务(IaaS)、平台即服务(P…

简单介绍一下Serverless和Faas

一、啥叫Serverless(无服务器) Like many trends in software, there’s no one clear view of what Serverless is. For starters, it encompasses two different but overlapping areas: (就是一般定义为两种不同但交叉的领域:Faas和Baas) Serverless was first…

Faas

文章介绍了Faas是什么,FaaS的特点、以及它的好处,和基于Kubernetes的FaaS框架Fission等,希望能对您有所帮助。 前言 云计算时代出现了大量XaaS形式的概念,从IaaS、PaaS、SaaS到容器云引领的CaaS,再到火热的微服务架构,以及现在越来越多被谈…

XaaS形式的概念,从IaaS、PaaS、SaaS到容器云引领的CaaS,Serverless和FaaS 概念

XaaS IaaS、PaaS、SaaS CaaS,Serverless 和FaaS 和lambda 前言 云计算时代出现了大量XaaS形式的概念,从IaaS、PaaS、SaaS到容器云引领的CaaS,再到火热的微服务架构,以及现在越来越多被谈起的Serverless和FaaS,我们正在经历?一个技术飞速变革的时代。 一、什么是…

IaaS, PaaS, SaaS, BaaS, Faas

aaS 是 As-a-Service 即为服务 的意思。 IaaS (Infrastructure as a Service) wikipedia:基础设施即服务 服务商提供底层/物理层基础设施资源(服务器,数据中心,环境控制,电源,服务器机房)&…

云原生:什么是 FaaS ?

概述 FaaS,Function as a Service,"功能即服务"(也译作“函数即服务”),是一种在无状态容器中运行的事件驱动型计算执行模型,这些功能将利用服务来管理服务器端逻辑和状态。 它允许开发人员以功…

【AI FaaS:NLaaS 自然语言即服务】设计一个自然语言生成 SQL 查询语句的 AI Faas API 系统

设计一个AI Faas API 系统,支持自然语言生成SQL,并查询数据源数据返回表数据。同时,支持API开发完成即可线上使用。给我详细系统设计说明和完整的Golang代码,解释说明。5000字以上。 文章目录 【AI FaaS:NLaaS 自然语言即服务】设计一个自然语言生成 SQL 查询语句的 AI Faa…

Serverless 是什么?BaaS 和 FaaS 是什么?

前言 本文隶属于专栏《大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据理论体系 概览 Serverless 是一个云原生开发模型,…

FatFs

FatFs FatFS是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)文件系统模块。FatFs 的编写遵循ANSI C,并且完全与磁盘I/O层分开。因此,它独立(不依赖)于硬件架构。它可以被嵌入到低成本的微控制器中,如AVR, 8051, PIC, ARM, Z80…

【云计算】XaaS最全介绍(按24字母合集):AaaS、BaaS、CaaS、DaaS、EaaS、FaaS、GaaS、HaaS、IDaaS…

IT行业创造了XaaS,即“一切即服务”: “X as a service”、“anything as a service”或“everything as a service” 。 其本质就是服务理念,未曾止步于SPI(SaaS、PaaS、IaaS(传统就这三个))模…

Faas,又一个未来?

经同事独家授权,原创发表此文 作者说明: 苗立尧 易宝支付运维工程师,热爱Kubernetes,对容器生态圈具有浓厚兴趣 个人公众号:容器时代 前言 云计算时代出现了大量XaaS形式的概念,从IaaS、PaaS、SaaS到容器云引领的Ca…

IaaS、PaaS、SaaS、BaaS和FaaS, 这些区别你真的了解吗?

IaaS、PaaS、SaaS、BaaS、FaaS,这些名词后面都带着aas三个字母,aas 是 As-a-Service,即为服务的意思。我们看下面这个架构图: IaaS、PaaS、SaaS 云平台一般都会提供以上架构图中的三种云服务 IaaS:Infrastructure as…

FaaS介绍

FaaS介绍 云计算技术的核心是服务化,服务化就需要提供闭环和灵活的服务。而云计算也在持续发展中,从最初的基础设施服务化(IaaS),平台服务化(PaaS),软件服务化(SaaS)&…

什么是功能即服务(FaaS)?

功能即服务(或称为 FaaS)是一种云计算服务,它允许开发人员以功能的形式来构建、计算、运行和管理这些应用包,无需维护自己的基础架构。 FaaS 是一种在无状态容器中运行的事件驱动型执行模型,这些功能将利用 FaaS 提供商…

计算机预览不到桌面,电脑文件夹的文件预览显示没有预览怎么办?

有可能是更改了查看方式造成的。解决的方法很简单: 打开存放照片的文件夹,在空白处点击右键,可以看到弹出的对话框中总共有9个选项,分别是:超大图标、大图标、中等图标、小图标、列表、详细信息、平铺、内容和隐藏文件…

KKFileView(十一)——文件预览

2021SCSDUSC 上篇文章提到文件预览工厂以及实现具体文件预览功能的类,这篇报告着重于各个文件预览流程 一、文本文件预览 之前的报告中有提到DownloadUtils工具类,该类通过输入文件描述和文件名得到文件的真实路径,如果失败的话也会返回信息…

基于开源项目kkFileView打造文件预览

1、需求 一般管理系统都有文件上传功能,基于此一般会诞生一个需求:用户需要在线预览自己上传的文件。需求很合理,但是没那么好做,原因在于浏览器默认支持图片、pdf等少量格式预览,而实际情况是你并不能要求用户只上传…