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

架构图:

1 whileFalse 2020 年 8 月 31 日 架构图很漂亮。 问句跑题的,技术选型时使用 Terraform/Serverless Framework,而不是其他框架(比如 SAM 、CDK )是什么考虑呢? 比如我的公司使用该技术 /有跨云跨提供商需求或不希望被云绑定 /该框架对新用户更友好 |
2 zfish OP @whileFalse 没有啥特别的原因,主要是我目前只熟悉这两个,还没用过你提到的这些。 |
4 whileFalse 2020 年 8 月 31 日 @zfish 我说的这两个是 AWS 自己的框架,不支持跨云 我在考虑要不要学一下 Terraform/Serverless 之类的框架,所以问一下这些框架的应用场景。 主要是我目前没有跨云的需求,不确定这些框架除了跨云之外还有什么优势。 |
5 kenshinhu 2020 年 8 月 31 日 这个会否类似 国内的 leancloud 方案? |
6 dk7952638 2020 年 8 月 31 日 Serverless 的厂商绑定确实是个很大的风险,有没有成熟的中间层框架或者跨平台的方案没? |
7 threebr 2020 年 8 月 31 日 请问架构图是用什么软件画的? |
8 tflz514 2020 年 8 月 31 日 歪个楼,架构图用什么工具画的? |
9 Tumblr 2020 年 8 月 31 日 对标题略懵。。。是「无服务」开发还是「无服务器」开发? 多年来一直把 server-less 翻译为 「无服务器」的我……开始了对自己的怀疑。 anyway,感觉蛮棒的,尤其是原文。 |
10 eason1874 2020 年 8 月 31 日 就我的体验来说,Serverless 在应用上除了响应时间慢点,啥都好,就是贵,用不起。 |
11 zfish OP @whileFalse sls 和 tf 都可以跨云,具体你可以看看他们的文档,sls 的跨云就是理念一致,写法还是没法复用,类似 react native 这种开发体验 |
14 Muninn 2020 年 8 月 31 日 我最近一个项目也用的 aws serverless 全套。用下来的感想,它不是很易用,不敏捷,不完善,遇到很多问题。DynamoDB 反人类。 项目小了它麻烦,项目大了它贵。 招不到会这个的人。 估计就 Node 全栈的人玩玩还行。 下个项目还是继续 golang + react 香。 |
15 ysc3839 2020 年 8 月 31 日 via Android @dk7952638 我前段时间做过调查,大部分 Serverless 平台都支持 Node.js ,然后许多平台 http 请求的接口是用 Node.js 标准的 req res,可以直接配合 express 。少数使用私有接口的比如 AWS 也有对应的 wrapper 。 |
16 zfish OP @Muninn 易用性还有待提升,我感觉它 vpc 和 IAM 都很复杂,估计以后会变得易用吧,现在也只是尝试,体验还行,个人项目做不错,费用也便宜 |
18 zherrrrrrrr 2020 年 8 月 31 日 您的资料整理真全,aws 来公司给介绍过 serverless,吸收的不多,但确实是很不错,替代服务器是趋势。 |
19 hillwall 2020 年 8 月 31 日 DynamoDB 反人类+1,用得太痛苦 |
20 594duck 2020 年 8 月 31 日 serverless 动不动几百 ms 的延迟用的也好?而且服务栈用的太复杂了。 |
24 mineqiqi 2020 年 8 月 31 日 没用过,来看看 |
26 winglight2016 2020 年 8 月 31 日 @Muninn aws 这一套真的是反人类,尤其是 dynamodb,而且完全没有迁出的可能性,之前公司也就是因为 amazon 送了几千刀的券,不用白不用,不然根本不可能选这套框架。 |
27 zfish OP @winglight2016 用 aws rds 和 ecs 也行,当然 lambda 只能和云服务商捆绑起来 |
28 winglight2016 2020 年 9 月 1 日 @zfish 不是在讨论 serverless 吗?你全部在 VPS 实例中实现 serverless 比普通架构有啥特别的优势吗? |
29 zfish OP @winglight2016 可以用云提供的其他能力,扩展性更好,不需要你再重新搞一些底层的组件了 |
30 viakiba 2021 年 1 月 5 日 via iPhone @whileFalse serverless 好像是有标准的 没用过不懂 |
31 zjsxwc 2021 年 1 月 5 日 serverless == no server ? 少服务 == 无服务 ? |
32 musi 2021 年 1 月 5 日 via iPhone 架构图是用什么工具画的 |
33 lihongming 2021 年 1 月 5 日 via iPhone @winglight2016 我也算个 DynamoDB 深度用户。你说它难以迁出我同意,但你说它难用……我怀疑你可能在用其他数据库的思路用 DynamoDB,或者说你被你的经验坑了。 DynamoDB 最大的特性是什么?快!所以你的设计必须围绕这个特性,把传统设计中的复杂单次查询拆分为一系列并发的简单查询,简单到初学者不用动脑子也会的那种就对了。 都这么简单了,还能说它难用吗? |
34 rogwan 2021 年 1 月 5 日 via Android 云服务器本质上也就是:虚拟机 as service,除非一些特型功能用 serverless,通用功能还是自建可用性好。 |
35 wangxiaoaer 2021 年 1 月 5 日 问一下,都用上容器了,还是无服务器? 这跟直接基于厂商的容器环境如 k8s 有啥优势? |
36 DiamondYuan 2021 年 1 月 5 日 via iPhone 我们前端构建用的也是 serverless 很爽 |
37 ljpCN 2021 年 1 月 5 日 楼上各位对 serverless 概念有所怀疑的,这篇文章包含了搭建 serverless 环境的过程,所以必然不是那么开箱即用的 serverless 。而且涉及的 docker 也是不需要自己配置服务器去部署,aws 的 Fargate 你只需要跟容器打交道就行了。如果你直接使用商家提供的 serverless 资源,那你只要写云函数就行了,不用跟配置这些计算资源打交道。 |
38 zfish OP @ljpCN 是的,主要是加入了 serverless 的一些配置框架,这些框架可以让你更为容易的迁移不同的云服务商,如果只是基于 aws 那更简单了 |
39 photon006 2021 年 1 月 5 日 我们公司也在用 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 到它的精髓,总体体验就是太浪费时间,相当折腾。 |
40 zfish OP @photon006 所以我自己搞了一套在 EC2 一键部署 PG 数据库的代码: https://github.com/bmpi-dev/invest-assistant/tree/master/IaC/aws/db |
41 hantsy 2021 年 1 月 5 日 AWS 官方有一个 Cafe 的例子 lambda 不错。 |
42 hantsy 2021 年 1 月 5 日 dynamodb 是个多引擎的,这种奇葩越来越多。 |
43 hantsy 2021 年 1 月 5 日 |
44 caoyouming 2021 年 1 月 5 日 自己 k8s 搞起来,在 k8s 基础上做 serverless 不就可以了 |