本文描述了笔者开发一个基于 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 ![]() 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 ![]() 我最近一个项目也用的 aws serverless 全套。用下来的感想,它不是很易用,不敏捷,不完善,遇到很多问题。DynamoDB 反人类。 项目小了它麻烦,项目大了它贵。 招不到会这个的人。 估计就 Node 全栈的人玩玩还行。 下个项目还是继续 golang + react 香。 |
![]() | 15 ysc3839 2020-08-31 10:53:54 +08:00 via Android ![]() @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,用得太痛苦 |
![]() | span class="no">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 不就可以了 |