官宣之后,Express和Functiongraph也公布恋情了
admin
2023-04-11 07:43:24
0

Express APP

作为一个Node.js开发者,相信大家都可能会使用Express框架,无论是构建后端服务,或是搭建一个前端的开发态服务器,Express都是一个很流行的选择。构建Express是极为容易的,添加一些路由规则和对应的处理函数,再选择一些中间件,一个应用就诞生了。

官宣之后,Express和Functiongraph也公布恋情了

 

一个使用传统托管方法的简单 Express.js App —— 响应单次请求的过程。

 

下列代码展示了一个最简单的 Express App:

'use strict'

 

const express = require('express')

const app = express()

app.get('/', (req, res) => res.send('Hello world!'))

 

module.exports = app

 

这就完成了一个 Express App。若使用浏览器访问http://localhost:3000,你便可以在打开的网页中看到“Hello world!” 信息。

 

应用部署

麻烦的问题来了:如何才能将你构建的 Express App 展示给你的朋友或者家人?如何才能让每个人都能访问到它?

 

应用部署是一个耗时且痛苦的过程,但现在我们就假定你已经很快、很好地完成了部署的工作。你的应用已经能被所有人访问了,并且之后也运转良好。就这样直到一天,突然有一大批用户涌入开始使用你的应用。你的服务器开始变得疲惫不堪,不过仍然还能工作。

官宣之后,Express和Functiongraph也公布恋情了

 

一个使用传统托管方法的简单 Express.js App —— 处于较大负载下。

 

就这样持续了一段时间后,它终于宕机了。

官宣之后,Express和Functiongraph也公布恋情了

一个使用传统托管方法的简单 Express.js App —— 因为过多用户访问导致应用挂掉

 

一大批用户因为应用无法访问而变得不开心(无论他们是否为此应用付费)。你对此感到绝望,并开始在 Google 上寻求解决方法。如果在云上部署可以改善现状吗?

官宣之后,Express和Functiongraph也公布恋情了

在云上部署应该就可以解决应用规模伸缩的问题了,对吧?

 

此时你遇到了一个恼人的朋友,她又在给你谈论 Serverless(无服务器)技术的种种。

官宣之后,Express和Functiongraph也公布恋情了

Try serverless

 

让你的 Express App Serverless 化

在过去的文章《5分钟serverless实践|构建无服务器图图片鉴黄Web应用》中,你已经知道了 Serverless API 是由 API Gateway 和 FunctionGraph 组成的。现在需要考虑的是如何让你的 Express App Serveless 化。就像 Matt Damon 出演的电影《缩小人生》中描绘的桥段,Serverless 在未来也具有无限的潜力和可能性。

官宣之后,Express和Functiongraph也公布恋情了

如何才能让你的 Express App 无缝接入 FunctionGraph

 

让我们向它请教一番!在集成到FunctionGraph之前,你的代码需要稍微调整一下。你需要 export 你的 app,而不是调用 app.listen 去启动它。你的 app.js 内容应该类似下列代码:

'use strict'

 

const express = require('express')

const app = express()

 

app.get('/', (req, res) => res.send('Hello world!'))

 

module.exports = app

 

这样修改后你可能无法在本地启动 Express 服务器了,不过你可以通过额外添加 app.local.js 文件进行解决:

'use strict'

 

const app = require('./app')

 

const port = process.env.PORT || 3000

app.listen(port, () => 

  console.log(`Server is listening on port ${port}.`)

)

 

之后像启动本地服务器执行下面的命令就可以了:

node app.local.js

 

为了让应用的API能更好地使用API网关进行管理,你还需要确保你的所有API拥有一个共同的root_path。现在,进入FunctionGraph页面创建一个函数,函数名为api的root_path,将本地Express工程打包上传,作为函数的代码。然后再为函数创建一个入口文件,可以点击在线编辑器上File -> New File Template -> Node.js Express Server快速创建,入口文件代码如下:

const fgsExpress= require('fgs-express');

const app = require('./app');    // Your Express app entry

const server = fgsExpress.createServer(app);

 

exports.handler =  (event, context, callback) => {

    fgsExpress.proxy(server, event, context, callback);

}

 

fgs-express三方件会包装你的app,转发apig和app之间的请求。至此,你的Serverless化的Express APP就上线了,在浏览器中打开响应信息中返回的链接,若网页展示出 “Hello world!” 那么证明应用已经成功部署起来了!

官宣之后,Express和Functiongraph也公布恋情了

Serverless Express App

 

优势

将你的应用 Serverless 化后,你不再畏惧用户群体的进一步扩大,应用会始终保持为可用状态。这并不是言过其实,因为在默认情况下 FunctionGraph 可通过弹性伸缩最高支持100个 function 并发执行。当 API Gateway 接收到请求后,新的 function 会在短时间内处于可用状态。

官宣之后,Express和Functiongraph也公布恋情了

在高负载下的 Serverless Express.js App

 

这并不是你接入 Serverless 后唯一的收益。在保证应用不会因为高负载宕机的前提下,你同样削减了不少应用的运行开销。使用 FunctionGraph,你仅需按你应用的实际访问量付费。同样,FunctionGraph的免费试用计划还将给予你每应用每月一百万的免费流量(按访问次数计算)。

官宣之后,Express和Functiongraph也公布恋情了

你的 Serverless App 真是太替你省钱了

 

更炫酷的Demo

在真实的项目中,是否真的能够快速集成?下面我们来实际操作一波,在Github上找一个实际的Express项目,让它Serverless化,快速上线。

官宣之后,Express和Functiongraph也公布恋情了

canfoo / react-taopiaopiao

 

这是一个基于Express和React构建的仿淘票票APP,其中包括对前、后端请求的处理,无需关注细节,我们将其Api的root_path设置为express-demo,然后将项目压缩成zip包,将其作为代码创建一个名为express-demo的函数。创建完成后为函数添加一个入口文件,并创建一个apig触发器,即完成构建了。Apig触发器中显示的url即为Express程序的Api访问地址根路径。

 

现在,让我们拭目以待吧,将此url生成一个二维码,掏出手机,让大家在世界各地访问你APP吧。

 

爱情需要磨合——缺陷

即使Servlerss Express APP听起来超赞,也会有一些缺陷。

官宣之后,Express和Functiongraph也公布恋情了

下面是 Serverless Express App 一些最 “致命” 的短板:

1、Websockets 无法在 FunctionGraph 中使用。这是因为在 Functiongraph 中,若应用没有任何的访问,那么你的服务器在客观上也是不存在的。

2、上传文件到文件系统同样是无法工作的,除非你的上传目录是 /tmp 文件夹。这是因为 FunctionGraph 对文件系统是只读的,即使你将文件上传到了 /tmp 文件夹,它们也只会在 function 处于 “工作态” 时存在。为确保你应用中的上传功能运转正常,你应当把文件上传并保存到 OBS 上。

3、执行限制也将影响你的 Serverless Express App 功能。例如 FunctionGraph 最大执行时间不能超过 5 分钟等。

 

这仅仅算是你的应用与 FunctionGraph 之间关于 Serverless 爱情故事的一个序章,期待尽快涌现更多的爱情故事!

 

生活需要爱——感谢

本文Express介绍部分大量借鉴以下文章:

(英文原文) Express.js and AWS Lambda — a serverless love story(作者:Slobodan Stojanović)

(译文) Express.js 与 AWS Lambda——一场关于Serverless的浪漫爱情故事(译者:刘嘉一)

 

扫码免费体验函数工作流FunctionGraph~

官宣之后,Express和Functiongraph也公布恋情了


相关内容

热门资讯

实探杭州“被电商拉黑”街道:随... 据扬子晚报报道,5月6日,一名网友在社媒发帖称,自己在某电商平台看中了一款商品,商品界面却显示其地址...
大连女子烧烤店内用铁签喂狗,十... 5月11日,一段网传视频显示,女子让宠物狗坐在辽宁大连一家烧烤店的卡座上,并用铁签将肉串喂给宠物狗,...
沃尔核材获得实用新型专利授权:... 证券之星消息,根据天眼查APP数据显示沃尔核材(002130)新获得一项实用新型专利授权,专利名为“...
科技伦理审查助力人工智能产业高... 转自:证券日报     本报记者 郭冀川     随着AI(人工智能)技术迭代加速,相关伦理审查的重...
捷昌驱动获得实用新型专利授权:... 证券之星消息,根据天眼查APP数据显示捷昌驱动(603583)新获得一项实用新型专利授权,专利名为“...
2026云手机为什么这么火?这... 你是否也有过这样的念头:想试试云手机,但一看价格,月付几十甚至上百元,立马打了退堂鼓?又或者,你曾贪...
OPPO失智,武大失格,舆论失... 无知,无品,无趣。文 | 佘宗明小说《围城》里,方鸿渐在张家跟张小姐相亲,看到书架上有本《怎样去获得...
百名上海交大学子携40项科研成... 中新网上海5月11日电(记者 许婧)未来电池如何破解“放着也会老化”的难题?免疫细胞与癌细胞的“对话...
你的蓝牙耳机正在 “偷听”?这... 在科技飞速发展的当下,无线耳机、智能手表、无线键盘等蓝牙设备凭借“一键连接”带来的便捷优势,已广泛应...
微信状态能看访客了?热搜爆了!... 5月11日晚间,#微信状态 访客记录#话题冲上微博热搜,引发大量网友讨论。 有网友发帖询问:“微信...