在 AWS 上建 Restful API 选择 Lambda 还是 EC2 呢?

2020-04-16 12:41:38 +08:00
 bonfy
在 AWS 上建 Restful API 选择 Lambda 还是 EC2 呢?

无脑用 Lambda 么? 有没有场景是 Lambda 不合适的? 或者说 在什么情况下 EC2 反而 比 Lambda 更便宜么?

有 V 友有这方面经验么? 谢谢分享
3230 次点击
所在节点    程序员
27 条回复
opengps
2020-04-16 12:45:23 +08:00
函数是按次数收费,用的少显然用他更合适
服务器是自己的资源,按时长预付费或者后付费,访问多建议选这个

另外,你用处要是想拓展到函数级别之外,比如装个数据库,装个缓存,装个其他东西等等,那么毫无疑问回到具备独立系统的服务器路线上去
bonfy
2020-04-16 13:17:06 +08:00
@opengps 谢谢

数据库 缓存 其它东西都不考虑 每天大概多少次访问量 是零界点? 有研究过么? 假设访问是平均的
binux
2020-04-16 13:19:14 +08:00
你自己算
opengps
2020-04-16 13:20:14 +08:00
@bonfy 这种问题的临界点比较难确定,因为直接受到定价规则影响,及时确定了也只能是个模糊范围,你刚开始用就照着函数方向去做吧,等你的支出费用,等于养一台服务器费用时候,就到了临界范围内科
neoblackcap
2020-04-16 13:24:49 +08:00
函数是有固定单次的运行时间的,如果太长了就需要额外收费或者被干掉。你在上之前,最好先压测一下自己的程序,看看 lambda 能不能满足
aec4d
2020-04-16 15:15:04 +08:00
在美区上我有一个 lambda 服务,具体是请求的时候把 s3 的图片转码成 webp
千万不要想着这东西能节约成本!!!从成本上来说并不比部署一个 ec2 便宜(aws 最便宜的 lightsail 五刀一月能满足需求)
但是省去了运维成本。部署运行了两年没管过
它适合无状态短时间运行的任务
另外这东西强绑定,你适应 lambda 写了一套程序,不能无缝转到别的提供商上面,写常规程序就不会有这个问题
nrtEBH
2020-04-16 15:17:26 +08:00
比较推荐是用 API Gateway+Lambda
是否要上 EC2 看你业务的复杂程度是否超出 Lambda 限制
xiaket
2020-04-16 17:13:53 +08:00
如果是 Cloudformation 部署的话我都要推荐 ALB + lambda 了, APIGW 的 Cloudformation API 实在是恶心人. 当然费用方面会有区别.
xiaket
2020-04-16 17:16:12 +08:00
你这个属于没好好看过价格表就来问问题, 因为 lambda 的计费是和内存大小, 运行时间长短直接相关的, 不了解你的业务情景完全没法回答.
bonfy
2020-04-16 17:24:07 +08:00
@xiaket 谢谢

内存 就选最小的就可以了, 很简单的逻辑,担心的是一个是 高并发下 concurrency 会不会不够? 然后导致服务延迟, 另外就是每天多少访问量的时候 其实 就整台 EC2(配置凑合就行) 还可能便宜点?

因为现在是估算,如果已经这么大并发我看看实际 cost 心里就清楚了,估的话 心里没有底,服务都还没开始用了
lzuntalented
2020-04-16 17:25:01 +08:00
正在薅 aws 免费一年的 ec2,不知道一年后价格如何
fredcc
2020-04-16 17:25:12 +08:00
都试试看最简单了
bonfy
2020-04-16 17:25:25 +08:00
@xiaket 当然要整 多台 EC2 (至少 2 台) 怕宕
bonfy
2020-04-16 17:26:43 +08:00
@fredcc

自己的也就算了,一个月差这么点也无所谓, 就是 帮人家做方案 才麻烦啊 (算多了也不是 算少了也不是 还要对比)
xiaket
2020-04-16 17:28:58 +08:00
如果这么有自信, 直接先上 lambda 跑一两个月看看效果, 高并发 concurrency 不由你管, AWS 会负责多起几个实例, 如果你实在不放心, 还可以设置 ReservedConcurrentExecutions, 比如至少有 1 个或两三个 lambda 实例一直在那儿.

因为云服务的好处在于你不用想着绑定, 觉得不开心觉得不划算, 切到另外一种也行, 反正试错成本低
xiaket
2020-04-16 17:31:04 +08:00
@bonfy 如果是做方案, 也可以拿负载过来, 两边都搭好, 都跑几天, 看看成本. Cost Explorer 里面都看得到的.

另外, 不是用两台 EC2, 而是用一个 ASG, 而且正常的话, 前面放一个 ALB 比较好(除非成本控制要求真的很高).
xiaket
2020-04-16 17:32:15 +08:00
另外, EC2 里面的选择题也不少, 实例用 t 还是用 m 还是用 c, 都可以玩好久...(逃)
bonfy
2020-04-16 17:32:22 +08:00
@xiaket 担心的是 每个账号的 concurrency 好像默认是 1000 而且不是就跑一个服务,应该是 已经有很多服务都跑在那个账号了, 所以担心并发高的时候 真有可能会耗完

而且 1 个 lambda 实例同时能处理几个 request ? 是一个么?? 我没理解错吧?
bonfy
2020-04-16 17:36:33 +08:00
@xiaket #16

这个是最好的方法 但是对于 部署这样的对比方案 其实没有最终的拍板权 (没权)

现在就是在啥都不知道的时候 出个方案 给别人做选择 就是这么卑微
xiaket
2020-04-16 17:37:58 +08:00
那个 concurrency 是单独对 lambda 而言的, 其他服务也是用 lambda 的话会有影响, 不过这个 limit 是可以找客服调的, 客服也很乐意帮你调. 就我的理解, 这个 limit 更多是避免新手犯错误导致接到一个很大金额的账单而设置的.

一个 lambda 实例的确只能处理一个 request, 不过可以不用太考虑 scaling 的问题, 因为从服务设计来说, 这不是你需要操心的问题. :)

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

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

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

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

© 2021 V2EX