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