腾讯云云函数好用吗?

2022-03-09 11:37:34 +08:00
 terryops

#腾讯云云函数好用吗? 我们是个小公司,日常业务并发在 100/秒。现在想搞一些抽奖,之前试过一下子会来 500/秒的并发,有点扛不住,影响了正常业务。 于是想把这部分业务放到腾讯云的 Serverless 里面,因为没搞过。所以想请教一下大伙。

  1. 用 laravel 框架,部署效率如何?
  2. 能否把抽奖这块的数据库也放进去这个 Serverless 里面,以及是否能支持无限并发自动扩容?
  3. 价格方面,是否在非运行状态可以接近于免费的状态运行。

可能问了一些基础问题,希望大神们不吝赐教!

5420 次点击
所在节点    云计算
11 条回复
kkjinping
2022-03-09 13:42:57 +08:00
500 并发只靠数据库不好抗吧,用上 redis 呢
sy20030260
2022-03-09 14:03:06 +08:00
并发瓶颈是什么呢? 500 qps 估计应该不是 service 层而是数据库的问题。
如果是数据库问题那用 serverless 的意义不大。
就算是 service 层问题,更简单有效的方式应该是搞个 cronjob 在抽奖之前执行扩容任务,因为抽奖时间应该是可以提前知道的?
yEhwG10ZJa83067x
2022-03-09 14:14:48 +08:00
什么配置?
lmshl
2022-03-09 14:17:09 +08:00
1. 这个场景确实比较适合 Serverless ,用什么框架是次要的,我试过 AWS lambda 部署 NodeJS serverless ,自动扩容很快。
2. 当前没办法把数据库也放进 Serverless 中,因为你的交易结果要持久化的。
但是市面上有 Serverless 的数据库可以供你使用,比如 AWS 有 DynamoDB / Aurora serverless / Keyspaces (cassandra compatible),没有请求不收钱的,超大流量请求来了也能扛得住。
建议你了解下腾讯云是否有类似 Serverless 数据库方案,或者临时提高磁盘 IOPS 的方法,前提是你的瓶颈在磁盘上,或你的架构可以将下单转化为写入。
3. 上面说的就是免费运行
ch2
2022-03-09 14:19:11 +08:00
19 年就开始玩 serverless 的回答一下:
1 ,云函数是无状态计算,能不能把什么框架部署上去主要看你能不能把它改造成无状态计算的模式。比如说 session 就不能用本地内存而是得存到 redis 里,这台 redis 你就得单独买以配合云函数使用,否则 session 功能压根上不了云函数。所有依赖有状态计算依赖的功能都得改造成外置到中间件这种模式
2 ,腾讯云有 serverless 数据库,你可以了解一下,可以跟云函数配套使用
3 ,没问题,但是如果你一点钱也不付的话,0->1 的冷启动会卡住好几秒,不过这个可以通过保活脚本缓解(目前云函数不限制你用这种方法达到跟收费的预留实例一样的效果)
ghoul5426
2022-03-09 14:19:40 +08:00
1.最近用了一下腾讯的云函数,感觉还不错,但我这个业务目前还只是测试阶段,流量非常小,还没有接受过真正的大流量的考验。

2.用云函数主要的改造是读写本地文件系统,如果写日志建议使用他们的日志服务,永久文件存储可以使用他们的对象存储。

3.云函数的主要优势是动态缩扩容实例,流量大就自动帮你增加实例数量,流量少又会自动减少,按需收费。

4.数据库是不能放进云函数里面的,即使你使用如 sqlite 之类的文件数据库,也没有意义,因为云函数默认是多实例的,云函数的部署包内有一个 512MB 的临时读写空间,但是那个空间会在实例销毁时自动销毁,所以云函数内部是无法保存数据的,保存数据需要使用外部的数据库服务、KV 存储或者文件存储等。

5.就算 web 层面云函数能给你无限扩容的能力,后面的数据库服务仍然会有压力,像秒杀类的突增型的访问,最好是用 Redis 之类的纯内存数据库。
ch2
2022-03-09 14:29:29 +08:00
至于部署的问题,目前最方便的方法是 Custom Runtime ,他们会给你一个基础的 Docker 镜像,你拉到子网里的一台测试机上,自行创建一个容器就能测试代码能不能运行,还能连你买的 redis 跟数据库。
最麻烦的是第三方库,由于 Custom Runtime 是指定特定版本解释器的,比如阿里云的 Python 就是 3.7.4 ,所以你用的库必须与这个版本兼容才行,而且有很多库自带了上 G 的.so 链接库,这些压根没法跟业务代码一起打包传上去(代码包一般限制是 100M 左右,如果库体积不大就可以一起打包),只能通过云函数挂载文件系统,从文件系统里临时加载,这会让冷启动时间长达十几秒。
如果你用 Docker 镜像部署的话,这个镜像本身也会限制体积必须小于 1G ,我觉得还不如 Custom Runtime 。如果你用指定版本的 PHP Runtime ,它就不能上单实例多并发,我觉得没有单实例多并发,云函数的可用性就很差,你会遇到非常频繁的冷启动。
liuxu
2022-03-09 14:39:30 +08:00
laravel 装 laravel-s 插件,运行时不用 php-fpm ,用 swoole ,装环境 3 个小时就够,qps 可以从 100 提升到 1000 以上

后面开发还是用 php-fpm 的方式开发 laravel ,不要用协程,可以用 Timer 、Task 和 swoole table

最后再提醒切记不要开协程,用第三方包的时候记得看官网 wiki ,注意用好 Cleaner 就行了,Cleaner 工作基本就是把$app 里面的第三方 provider 安装的 singleton 删掉
wangyu17455
2022-03-09 15:40:25 +08:00
关于 3 ,腾讯云 web 云函数没有请求自动下线的时限是 10 分钟,每 9 分钟请求一次的话,就可以保证有至少有一个实例永不下线,而且不收费(每 10 分钟只有发生请求的几十 ms 计费),然后就是腾讯云对于一个实例能同时处理多少个请求无法设置,如果想保持多台实例在线而且不收费可能困难比较大
teem
2022-03-09 22:41:55 +08:00
1 、官方自带这个框架部署
2 、数据库不要放 Serverless 里,可以用云开发里的数据库,支持无线扩容(按量计费)
3 、是的,不用基本无费用。

另外抽奖放云函数上,场景十分契合。
LnTrx
2022-03-09 23:47:04 +08:00
可以参考一下腾讯的专栏 https://cloud.tencent.com/developer/column/1196

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

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

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

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

© 2021 V2EX