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

2020-08-31 08:42:39 +08:00
 zfish

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

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

技术栈:

架构图:

9648 次点击
所在节点    程序员
45 条回复
tonyaiken
2020-08-31 12:18:30 +08:00
@Tumblr 应该是无服务器
zfish
2020-08-31 12:40:12 +08:00
@594duck 预热后延迟不高,也就冷启动时慢一些
zfish
2020-08-31 12:42:19 +08:00
@Tumblr 应该是无服务器,无服务有点怪。。可能受微服务的影响,不过那是 service,这是 server
mineqiqi
2020-08-31 14:43:16 +08:00
没用过,来看看
yiyi11
2020-08-31 16:11:41 +08:00
@Tumblr 无服务器,不是不用服务器了,是编码过程中不再关注服务器环境了。
winglight2016
2020-08-31 17:37:29 +08:00
@Muninn aws 这一套真的是反人类,尤其是 dynamodb,而且完全没有迁出的可能性,之前公司也就是因为 amazon 送了几千刀的券,不用白不用,不然根本不可能选这套框架。
zfish
2020-08-31 20:29:16 +08:00
@winglight2016 用 aws rds 和 ecs 也行,当然 lambda 只能和云服务商捆绑起来
winglight2016
2020-09-01 10:04:18 +08:00
@zfish 不是在讨论 serverless 吗?你全部在 VPS 实例中实现 serverless 比普通架构有啥特别的优势吗?
zfish
2020-09-01 12:08:18 +08:00
@winglight2016 可以用云提供的其他能力,扩展性更好,不需要你再重新搞一些底层的组件了
viakiba
2021-01-05 08:08:57 +08:00
@whileFalse serverless 好像是有标准的 没用过不懂
zjsxwc
2021-01-05 08:38:34 +08:00
serverless == no server ?
少服务 == 无服务 ?
musi
2021-01-05 08:56:39 +08:00
架构图是用什么工具画的
lihongming
2021-01-05 08:59:06 +08:00
@winglight2016 我也算个 DynamoDB 深度用户。你说它难以迁出我同意,但你说它难用……我怀疑你可能在用其他数据库的思路用 DynamoDB,或者说你被你的经验坑了。

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

都这么简单了,还能说它难用吗?
rogwan
2021-01-05 09:04:24 +08:00
云服务器本质上也就是:虚拟机 as service,除非一些特型功能用 serverless,通用功能还是自建可用性好。
wangxiaoaer
2021-01-05 09:07:17 +08:00
问一下,都用上容器了,还是无服务器? 这跟直接基于厂商的容器环境如 k8s 有啥优势?
DiamondYuan
2021-01-05 09:19:00 +08:00
我们前端构建用的也是 serverless 很爽
ljpCN
2021-01-05 09:26:12 +08:00
楼上各位对 serverless 概念有所怀疑的,这篇文章包含了搭建 serverless 环境的过程,所以必然不是那么开箱即用的 serverless 。而且涉及的 docker 也是不需要自己配置服务器去部署,aws 的 Fargate 你只需要跟容器打交道就行了。如果你直接使用商家提供的 serverless 资源,那你只要写云函数就行了,不用跟配置这些计算资源打交道。
zfish
2021-01-05 10:30:37 +08:00
@ljpCN 是的,主要是加入了 serverless 的一些配置框架,这些框架可以让你更为容易的迁移不同的云服务商,如果只是基于 aws 那更简单了
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 到它的精髓,总体体验就是太浪费时间,相当折腾。
zfish
2021-01-05 11:33:07 +08:00
@photon006 所以我自己搞了一套在 EC2 一键部署 PG 数据库的代码: https://github.com/bmpi-dev/invest-assistant/tree/master/IaC/aws/db

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/702709

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX