前言
随着云计算技术的不断发展,无服务器(Serverless)计算越来越受到关注。Serverless 架构不仅可以降低开发人员的负担,还可以显著降低运行成本。Fastify 是一款高效且低开销的 Node.js Web 框架,具有出色的性能,而 Serverless 则提供了一种全新的部署方式。本文将介绍如何在 Fastify 应用中使用 Serverless 进行无服务器部署。
什么是 Serverless?
Serverless 不是一种新型技术或框架,而是一种更高级别的软件架构。它的主要目标是降低和简化开发人员对于系统运维的工作量。不同于传统的基于服务器的 Web 应用,Serverless 应用只需要编写业务代码,而不关心底层的服务器配置和管理。
Serverless 架构的核心是函数即服务(Function as a Service,FaaS)。在传统的 Web 应用中,我们需要搭建一台或者多台服务器来运行应用程序,而在 Serverless 架构中,我们只需要编写函数代码,并将其部署到服务器提供商的平台上。在需要计算服务的时候,服务器提供商会自动、动态地调用并运行代码,而代码的拥有者可以只支付实际用到的计算资源费用。这种方式避免了在没有访问请求的时候浪费计算资源的情况,从而降低了成本。
为何选择 Serverless?
使用 Serverless 带来的主要好处有:
简化部署和维护 服务器的配置、升级、监控等问题都由服务器厂商处理,开发者只需要关注业务代码,从而大大简化了工作量。
计算资源更为高效 Serverless 提供了一个动态的、处理请求的机制,允许开发者按需调用计算资源。
成本更低 开发者只需要支付实际用到的计算资源费用,没有访问请求时不需支付计算资源费用,降低了开销。
介绍 Fastify
Fastify 是一个高效、低开销的 Node.js Web 框架。Fastify 注重性能,编写的代码运行速度快,同时具有易于维护和扩展等优点。以下是 Fastify 的主要特点:
高效 Fastify 在响应请求时执行速度非常快,和其他 Node.js Web 框架相比,具有出色的性能。
低开销 Fastify 能够处理大量并发的请求,同时占用较少的计算资源。
原生的插件系统 Fastify 的插件系统是原生的、轻量级的,方便快速开发及扩展。
在 Fastify 应用中使用 Serverless 进行无服务器部署
本节将介绍如何在 Fastify 应用中使用 Serverless 进行无服务器部署,我们将使用阿里云的函数计算(Function Compute)作为示例。
安装相关依赖
npm i @alicloud/fc2 npm i @midwayjs/faas-gateway-middleware npm i @midwayjs/serverless-fc-trigger npm i @midwayjs/faas-code-runner
编写 Fastify 应用程序
我们先来编写一个简单的 Fastify 应用程序,在根目录下创建 app.js
文件,并输入以下代码:
-- -------------------- ---- ------- ----- ------- - -------------------- ---------------- ----- --------- ------ -- - ------ - ------ ------- - -- -------------------- ----- -------- -- - -- ----- ----- --- ------------------- --------- -- ------------ --
应用程序非常简单,仅仅是返回一个 JSON 对象。
部署 Fastify 应用程序到阿里云函数计算中
在部署 Fastify 应用程序到阿里云函数计算之前,我们需要将 Fastify 应用程序打包为一个 zip 文件。可以使用 zip
命令进行打包。
zip -r app.zip app.js node_modules
在本地命令行中输出 app.zip
文件中包含的文件:
-- -------------------- ---- ------- -------- ------- ------ ---- ---- ---- --------- ---------- ----- ---- --- ---------- ----- ------ ---- ---------- ----- ------------------------- ----- ---------- ----- ------------------------------------ --- ---------- ----- ----------------------------- -- ---------- ----- --------------------------------- -------------- --------- ------- ------ -- -----
可以看出,文件大小为约 950K。接下来,我们使用阿里云的控制台来创建函数服务。
- 登录阿里云控制台,搜索 "函数计算"。
- 点击 "创建服务" 按钮。
- 填写服务名称,代码包是刚才压缩好的 app.zip 。
- 填写函数名称、资源、运行时等基本信息并保存。
部署完成后,控制台会输出服务地址。我们可以通过浏览器或者命令行工具访问该地址,从而测试 Fastify 应用程序在 Serverless 上的运行情况。
添加 API 网关
如果直接访问 Serverless 的地址,我们需要手动地在访问的 URL 中添加一些参数,否则可能无法被正常响应。所以我们需要配置 API 网关,API 网关提供域名绑定、鉴权、限流、日志等功能。在阿里云控制台上,我们可以轻松地创建和绑定 API 网关。
为 Fastify 应用程序连接 API 网关,我们可以使用 @midwayjs/faas-gateway-middleware
中间件来快速实现。在 app.js
中添加以下代码:
const { init } = require('@midwayjs/faas-gateway-middleware') fastify.use(init())
添加 HTTP 触发器
添加 HTTP 触发器能够让我们更方便地访问 Serverless 应用程序。在 app.js
中添加以下代码:
const { trigger, invoke } = require('@midwayjs/serverless-fc-trigger') fastify.post('/invoke', trigger(invoke))
以上代码使用了 @midwayjs/serverless-fc-trigger
中间件,该中间件为 Fastify 插件提供了无需修改代码即可获得函数计算的便捷渠道,当 HTTP 触发器触发后,该中间件会根据请求的参数调用相应的函数。
部署含触发器的应用程序到阿里云函数计算
部署含有 API网关和 HTTP 触发器 的应用程序到阿里云函数计算,我们需要重新将应用程序打包为 zip,然后将其上传到阿里云。我们可以在阿里云函数计算的控制台上创建函数服务,并在函数配置中添加 HTTP 触发器,从而完成上传和部署操作。
调用 Fastify 应用程序
Fastify 应用程序在部署到无服务器平台之后,我们需要通过 API 网关或函数计算命令行工具等方式调用应用程序。
假设我们使用函数计算工具 fcli
来调用 Fastify 应用程序,向 /invoke 发送 POST 请求即可调用应用程序。示例代码如下:
$ fcli invoke --event '{"path": "/","httpMethod": "GET"}' [service-name] [function-name]
在以上命令中,service-name
和 function-name
分别为创建的阿里云函数计算的服务名和函数名。
总结
本文介绍了 Fastify 应用中如何使用 Serverless 进行无服务器部署,并包含了详细的示例代码和概念解释。Serverless 是一种越来越流行的计算方式,能够大大降低成本和开发难度,值得开发者和企业进行尝试。如有任何问题或建议,欢迎在下方评论区留言。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ffb0e995b1f8cacde01933