V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bonfy
V2EX  ›  程序员

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

  •  
  •   bonfy · 2020-04-16 12:41:38 +08:00 · 3200 次点击
    这是一个创建于 1682 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 AWS 上建 Restful API 选择 Lambda 还是 EC2 呢?

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

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

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

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

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

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

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

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

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

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

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

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

    一个 lambda 实例的确只能处理一个 request, 不过可以不用太考虑 scaling 的问题, 因为从服务设计来说, 这不是你需要操心的问题. :)
    xiaket
        21
    xiaket  
       2020-04-16 17:40:54 +08:00
    @bonfy 我理解的, 这种提方案不能做决策实际上挺恶心人的. 另外建议方案里面提下后面的维护成本的区别. 前面有位同学说过, lambda 基本上是不需要运维成本的.

    老实说我觉得更好的方案是 EKS/ECS 跑容器, 前面接 ALB... 这样能够在运维成本和运营成本之间有一个平衡
    bonfy
        22
    bonfy  
    OP
       2020-04-16 17:54:25 +08:00
    @xiaket #21

    对,这个 EKS 或者 自建 k8s 在方案里已经列为长远方案了,暂时先不搞,所以先不考虑
    fredcc
        23
    fredcc  
       2020-04-16 23:07:43 +08:00 via Android   ❤️ 1
    @bonfy 帮人家做方案更加得实测啊
    hotsymbol
        24
    hotsymbol  
       2020-04-17 00:39:42 +08:00   ❤️ 1
    AWS Fargate(Spot) + AWS API Gateway
    vcfvct
        25
    vcfvct  
       2020-04-17 01:53:05 +08:00 via iPhone   ❤️ 1
    还应该考虑 lamdab 的 cold start time (尤其 jvm 之类) nodejs/python 稍微好些。为了保持 hot 还得用 cloudwatch 或者 alb 之类去 ping 它,这样也只能保持一个 instance hot 。对于要求 low lantency 和 high concurrency 的服务来说,lambda 不太适合. 尤其如果你的 lambda 在 vpc 里面(要连 rds/redis 之类)还得考虑 ENI 的 creation/attach time, 就更要命了!

    不过一般的 api 用 lambda 确实超级省心,不用维护 runtime !费用也是无敌!
    lihongming
        26
    lihongming  
       2020-04-17 01:55:55 +08:00 via iPhone   ❤️ 1
    我玩了 10 年 PHP 后,彻底转向了 Serverless,虽然管理服务器对我来说轻车熟路,但仍然觉得浪费时间,有那时间还不如写点业务代码或者美化一下 UI 更有价值。

    更何况 Node 开发速度比 PHP 快,进一步节约了时间。
    bonfy
        27
    bonfy  
    OP
       2020-04-17 08:52:55 +08:00
    @fredcc

    我也想实测,但是 事实就是 有些东西就只有概念 但需要你什么都要估
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2506 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 15:46 · PVG 23:46 · LAX 07:46 · JFK 10:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.