问下关于 serveless 的一个问题

2021-08-13 17:48:22 +08:00
 zxCoder

这几天在看这个,vercel 可以免费部署 serveless function,想着拿来放自己的小项目很方便,虽然访问速度慢了点

然后有个问题,serveless 一定是指无状态的吗,我现在有个需求需要存在一个全局对象,比如

let games={};
app.post("/api/new",async(req,res)=>{
//...
});

这个全局对象我希望能够在一次部署的周期能各个接口 /serveless function 可以共享和修改

想问下这种做法合法吗,因为我试了一下 vercel 似乎是支持这种写法的,想确定一下这是标准还是只是一个凑巧。

1371 次点击
所在节点    问与答
12 条回复
Dillion
2021-08-13 17:54:29 +08:00
serverless 的 server 是服务器的意思,不是 stateless
hronro
2021-08-13 18:02:37 +08:00
没用过 vercel,不过有没有可能只是你试的那次碰巧能支持这种写法呢?同一个 IP 的访问或许能转到同一个 vercel 的实例上,这样写或许就没问题,但如果访问 IP 不同或者其他什么原因导致你的请求没有被分配到同一个实例上,那你的状态就清零了
xiaopc
2021-08-13 18:49:06 +08:00
1. Serve r less
2. Serverless 没有「标准」,只是一类服务的统称
3. 目前 Function 的实现一般是根据并发需求拉起若干容器运行函数,容器在返回后如果没有被销毁,就留下了上次的「全局变量」
4. 考虑配合对象存储服务来存
AoEiuV020
2021-08-13 19:09:18 +08:00
我只知道 cloudflare 的 serverless 可以永久保存键值对,数据量不大也不频繁修改的话还是可以的,
randomboi
2021-08-13 19:11:39 +08:00
可以试试 Cloudflare Workers 也是免费的,然后存储数据到 Workers KV 里
SorcererXW
2021-08-13 19:33:43 +08:00
Vercel 的云函数是基于 AWS Lambda 的,单台容器上所有请求都是串行化的,如果有并发请求,则同时启动多个容器来处理请求。这样每个节点上本地数据是不一致的。
zxCoder
2021-08-13 19:39:26 +08:00
@SorcererXW 原来如此,那只能想想其他的解决方案了
riordanw
2021-08-14 10:00:44 +08:00
既然已经使用 Serverless 函数了,那么数据库也用 Serverless 的就好,按使用量计费,对于小项目是 0 成本。
LS 提到,Cloudflare 的 Worker 可以使用 KV ( Key-Value )。
我补充一下,AWS 的 Lambda 可以用 DynamoDB ( Key-Value ),腾讯云的 TCF 可以用 PostgreSQL for Serverless (关系型)。
zxCoder
2021-08-14 10:04:39 +08:00
@riordanw 数据库读写还是开销大,而且 serverless 对 websocket 支持比较麻烦,还是用回传统的模式比较方便
riordanw
2021-08-14 10:30:47 +08:00
@zxCoder 对,函数有运行时长限制,不太适合 websocket 场景。
zxCoder
2021-08-14 17:28:29 +08:00
@riordanw 话说那像 serverless 的数据库服务,会针对 serverless 做什么优化吗?难道不是每执行一个 serverless function 也要建立一个数据库连接吗?
riordanw
2021-08-15 20:45:20 +08:00
@zxCoder 我的业务量非常小,还没有研究过 Serverless 数据库建立连接的机制。可以看下腾讯云的文档: https://cloud.tencent.com/document/product/1003/50853,https://cloud.tencent.com/document/product/1154/43004

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/795647

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX