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

无服务(Serverless)应用开发体验

  •  3
     
  •   zfish ·
    madawei2699 · 225 天前 · 7701 次点击
    这是一个创建于 225 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文描述了笔者开发一个基于 AWS Serverless 技术的应用的全过程。基础设施使用 Serverless Framework 和 Terraform 搭建。系统的核心模块是每天都会执行一次的定时任务:该任务通过 Tushare 获取一组 ETF 指数基金价格数据,处理之后会将交易信号生成文本存放至 S3 桶。之后会发送消息给 AWS SNS Topic,订阅该主题的用户会收到邮件提醒。在系统的 Web 页面里有用户邮件订阅入口,也可以访问每天的历史交易信号记录。

    原文地址: 《 Serverless 应用开发小记》

    技术栈:

    架构图:

    第 1 条附言  ·  225 天前
    架构图是 plantUML 导入 C4 和 aws 图标包绘制的,具体源码见: https://github.com/bmpi-dev/bmpi.dev/blob/master/content/dev/guide-to-serverless/arch_aws.plantuml
    45 条回复    2021-01-05 13:39:18 +08:00
    whileFalse
        1
    whileFalse   225 天前
    架构图很漂亮。

    问句跑题的,技术选型时使用 Terraform/Serverless Framework,而不是其他框架(比如 SAM 、CDK )是什么考虑呢?
    比如我的公司使用该技术 /有跨云跨提供商需求或不希望被云绑定 /该框架对新用户更友好
    zfish
        2
    zfish   225 天前 via iPhone
    @whileFalse 没有啥特别的原因,主要是我目前只熟悉这两个,还没用过你提到的这些。
    zfish
        3
    zfish   225 天前 via iPhone
    @zfish tf 和 sls 也可以跨云的,不知道你指的跨云具体是啥
    whileFalse
        4
    whileFalse   225 天前
    @zfish 我说的这两个是 AWS 自己的框架,不支持跨云

    我在考虑要不要学一下 Terraform/Serverless 之类的框架,所以问一下这些框架的应用场景。
    主要是我目前没有跨云的需求,不确定这些框架除了跨云之外还有什么优势。
    kenshinhu
        5
    kenshinhu   225 天前
    这个会否类似 国内的 leancloud 方案?
    dk7952638
        6
    dk7952638   225 天前   ❤️ 1
    Serverless 的厂商绑定确实是个很大的风险,有没有成熟的中间层框架或者跨平台的方案没?
    threebr
        7
    threebr   225 天前
    请问架构图是用什么软件画的?
    tflz514
        8
    tflz514   225 天前
    歪个楼,架构图用什么工具画的?
    Tumblr
        9
    Tumblr   225 天前
    对标题略懵。。。是「无服务」开发还是「无服务器」开发?
    多年来一直把 server-less 翻译为 「无服务器」的我……开始了对自己的怀疑。

    anyway,感觉蛮棒的,尤其是原文。
    eason1874
        10
    eason1874   225 天前
    就我的体验来说,Serverless 在应用上除了响应时间慢点,啥都好,就是贵,用不起。
    zfish
        11
    zfish   225 天前   ❤️ 1
    @whileFalse sls 和 tf 都可以跨云,具体你可以看看他们的文档,sls 的跨云就是理念一致,写法还是没法复用,类似 react native 这种开发体验
    zfish
        12
    zfish   225 天前
    @kenshinhu leancloud 不算吧,差异还是很大的
    zfish
        13
    zfish   225 天前
    @eason1874 也挺便宜的,主打的不就是按需付费么,如果流量小,其实很便宜
    Muninn
        14
    Muninn   225 天前   ❤️ 1
    我最近一个项目也用的 aws serverless 全套。用下来的感想,它不是很易用,不敏捷,不完善,遇到很多问题。DynamoDB 反人类。

    项目小了它麻烦,项目大了它贵。

    招不到会这个的人。

    估计就 Node 全栈的人玩玩还行。

    下个项目还是继续 golang + react 香。
    ysc3839
        15
    ysc3839   225 天前 via Android   ❤️ 1
    @dk7952638 我前段时间做过调查,大部分 Serverless 平台都支持 Node.js ,然后许多平台 http 请求的接口是用 Node.js 标准的 req res,可以直接配合 express 。少数使用私有接口的比如 AWS 也有对应的 wrapper 。
    zfish
        16
    zfish   225 天前
    @Muninn 易用性还有待提升,我感觉它 vpc 和 IAM 都很复杂,估计以后会变得易用吧,现在也只是尝试,体验还行,个人项目做不错,费用也便宜
    th00000
        17
    th00000   225 天前
    @Muninn #14 DynamoDb 深度用户, 我觉得不光不反人类, 简直就是人类的福音
    zherrrrrrrr
        18
    zherrrrrrrr   225 天前
    您的资料整理真全,aws 来公司给介绍过 serverless,吸收的不多,但确实是很不错,替代服务器是趋势。
    hillwall
        19
    hillwall   225 天前
    DynamoDB 反人类+1,用得太痛苦
    594duck
        20
    594duck   225 天前
    serverless 动不动几百 ms 的延迟用的也好?而且服务栈用的太复杂了。
    tonyaiken
        21
    tonyaiken   225 天前 via iPhone
    @Tumblr 应该是无服务器
    zfish
        22
    zfish   225 天前 via iPhone
    @594duck 预热后延迟不高,也就冷启动时慢一些
    zfish
        23
    zfish   225 天前 via iPhone
    @Tumblr 应该是无服务器,无服务有点怪。。可能受微服务的影响,不过那是 service,这是 server
    mineqiqi
        24
    mineqiqi   225 天前
    没用过,来看看
    yiyi11
        25
    yiyi11   225 天前 via Android
    @Tumblr 无服务器,不是不用服务器了,是编码过程中不再关注服务器环境了。
    winglight2016
        26
    winglight2016   225 天前
    @Muninn aws 这一套真的是反人类,尤其是 dynamodb,而且完全没有迁出的可能性,之前公司也就是因为 amazon 送了几千刀的券,不用白不用,不然根本不可能选这套框架。
    zfish
        27
    zfish   225 天前 via iPhone
    @winglight2016 用 aws rds 和 ecs 也行,当然 lambda 只能和云服务商捆绑起来
    winglight2016
        28
    winglight2016   224 天前
    @zfish 不是在讨论 serverless 吗?你全部在 VPS 实例中实现 serverless 比普通架构有啥特别的优势吗?
    zfish
        29
    zfish   224 天前 via iPhone
    @winglight2016 可以用云提供的其他能力,扩展性更好,不需要你再重新搞一些底层的组件了
    viakiba
        30
    viakiba   98 天前 via iPhone
    @whileFalse serverless 好像是有标准的 没用过不懂
    zjsxwc
        31
    zjsxwc   98 天前
    serverless == no server ?
    少服务 == 无服务 ?
    musi
        32
    musi   98 天前 via iPhone
    架构图是用什么工具画的
    lihongming
        33
    lihongming   98 天前 via iPhone
    @winglight2016 我也算个 DynamoDB 深度用户。你说它难以迁出我同意,但你说它难用……我怀疑你可能在用其他数据库的思路用 DynamoDB,或者说你被你的经验坑了。

    DynamoDB 最大的特性是什么?快!所以你的设计必须围绕这个特性,把传统设计中的复杂单次查询拆分为一系列并发的简单查询,简单到初学者不用动脑子也会的那种就对了。

    都这么简单了,还能说它难用吗?
    rogwan
        34
    rogwan   98 天前 via Android
    云服务器本质上也就是:虚拟机 as service,除非一些特型功能用 serverless,通用功能还是自建可用性好。
    wangxiaoaer
        35
    wangxiaoaer   98 天前
    问一下,都用上容器了,还是无服务器? 这跟直接基于厂商的容器环境如 k8s 有啥优势?
    DiamondYuan
        36
    DiamondYuan   98 天前 via iPhone
    我们前端构建用的也是 serverless 很爽
    ljpCN
        37
    ljpCN   98 天前
    楼上各位对 serverless 概念有所怀疑的,这篇文章包含了搭建 serverless 环境的过程,所以必然不是那么开箱即用的 serverless 。而且涉及的 docker 也是不需要自己配置服务器去部署,aws 的 Fargate 你只需要跟容器打交道就行了。如果你直接使用商家提供的 serverless 资源,那你只要写云函数就行了,不用跟配置这些计算资源打交道。
    zfish
        38
    zfish   98 天前 via iPhone
    @ljpCN 是的,主要是加入了 serverless 的一些配置框架,这些框架可以让你更为容易的迁移不同的云服务商,如果只是基于 aws 那更简单了
    photon006
        39
    photon006   98 天前
    我们公司也在用 aws serverless lambda 这一套,dynamodb 真的反人类,虽然跟 mongodb 都是文档类型 db 但差别真的很大,尤其是细节上
    1 、query 、scan 最大返回结果 1M,很多时候得自己用代码写递归从全表查询数据
    2 、排序要加全局二级索引( GSI ),额外收费$3.86 / month
    3 、添加了 GSI,scan 不支持排序,换 query,query 的条件对比又没有 scan 多
    4 、分页往后翻还好,向前翻页还得自己维护一套页码

    mysql 、mongodb 做一个单表排序筛选分页的基本功能分分钟完事,dynamodb 半天、一天。。。

    以上吐槽有可能是我学艺不精没 get 到它的精髓,总体体验就是太浪费时间,相当折腾。
    zfish
        40
    zfish   98 天前 via iPhone
    @photon006 所以我自己搞了一套在 EC2 一键部署 PG 数据库的代码: https://github.com/bmpi-dev/invest-assistant/tree/master/IaC/aws/db
    hantsy
        41
    hantsy   98 天前
    AWS 官方有一个 Cafe 的例子 lambda 不错。
    hantsy
        42
    hantsy   98 天前
    dynamodb 是个多引擎的,这种奇葩越来越多。
    hantsy
        43
    hantsy   98 天前
    @zjsxwc @yiyi11

    完全不是。severless 有云平台,一样需要环境支持。

    说白了,以前你的程序比如跑 Tomcat,需要 Tomcat 长期运行。

    现在你写的程序变成像普通 Java Aplication 一样或者本地的 Bash 命令一样,执行一次,需要启动,执行,停止,释放资源等步骤,它需要一个云 Severless 平台(一个大容器)支持。

    有些场景感觉不适合,比较我们通常的数据库操作,长期运行的 Tomcat 服务器,有缓存,Pool 机制。用 Severless 方式感觉成本更高。

    目前各平台打架很厉害。Severles 基本是云的产物,脱离不了云。
    caoyouming
        44
    caoyouming   98 天前
    自己 k8s 搞起来,在 k8s 基础上做 serverless 不就可以了
    zfish
        45
    zfish   98 天前 via iPhone
    @hantsy 长期运行不如用 EC2 服务器,serverless 适合做一些简单的业务,尤其是中小型系统在流量不大的时候成本会很便宜,弹性扩容,如果流量非常高那不如用专用服务器
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2411 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 12:44 · PVG 20:44 · LAX 05:44 · JFK 08:44
    ♥ Do have faith in what you're doing.