一、为什么选择 Serverless?
做 side project 最怕什么?成本。
买一台 ECS 最低配一年也要几百块,如果项目没做起来,这笔钱就白白浪费了。所以我一开始就决定:能 Serverless 就 Serverless,绝不碰服务器。
本文分享的是我基于阿里云函数计算(FC)+ 对象存储(OSS)搭建的一个每日谜题网站——Minute Cryptic(https://minutecryptic.online/)。重点是分享这套“零成本”架构的设计思路和落地细节。
二、整体架构
text
┌─────────────────────────────────────────────────────┐
│ 用户访问 │
└─────────────────┬───────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────┐
│ OSS + CDN(静态资源) │
│ 前端页面、JS、CSS、图片全部托管 │
└─────────────────┬───────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────┐
│ 函数计算 FC(定时触发器) │
│ 每天凌晨 00:00 自动生成当日谜题数据 │
└─────────────────┬───────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────┐
│ API 网关(可选,用于动态接口) │
│ 目前纯静态,未来可扩展用户系统 │
└─────────────────────────────────────────────────────┘
三、各组件详解
1. 静态资源托管:OSS + CDN
整个网站的前端资源(HTML、JS、CSS、图片)全部托管在阿里云 OSS 上,前端开启 CDN 加速。这套方案的好处是:
- 无需服务器:OSS 按量付费,存储费用几乎为零
- 全球加速:CDN 节点覆盖广,国内外访问速度都不错
- 高可用:OSS 本身具备 99.995% 的可用性
2. 定时任务:函数计算 FC
每日谜题需要自动更新——这个任务交给了函数计算的定时触发器。
javascript
// 定时触发器配置
exports.handler = async (event, context) => {
const today = new Date();
const puzzle = generateDailyPuzzle(today);
await saveToOSS('puzzle.json', JSON.stringify(puzzle));
return { success: true };
};
每天凌晨 00:00,FC 实例被唤醒,执行以下逻辑:
- 根据当天日期计算种子值
- 从题库中选取对应的谜题
- 生成三级提示文本
- 将数据写入 OSS 的
puzzle.json文件
前端页面每天首次加载时,直接请求这个静态 JSON 文件即可获取当日题目——不需要任何后端接口。
3. 为什么没有用数据库?
这个项目的数据量极小(365 道题 × 若干字段),完全可以用 JSON 文件搞定。省去了数据库的运维成本和费用,也简化了架构。
如果未来要做用户系统(需要持久化用户数据),再考虑接入阿里云 RDS 或 Tablestore。
四、成本分析
运行三个月,实际账单如下:
| 服务 | 费用 |
| OSS 存储 | ¥0.00(免费额度内) |
| CDN 流量 | ¥0.00(免费额度内) |
| 函数计算 FC | ¥0.00(免费额度内) |
是的,三个月实际支出为 0。
函数计算的免费额度对个人项目来说完全够用:每月 100 万次调用、400,000 GB-s 资源使用量——这个网站的日均 PV 才几百,连额度的零头都用不到。
五、踩坑记录
坑一:OSS 静态网站的 CORS 配置
前端直接请求 OSS 上的 JSON 文件时,遇到了跨域问题。解决方案是在 OSS 的“跨域设置”中配置允许所有 Origin 访问。
坑二:CDN 缓存导致更新延迟
每日谜题更新后,CDN 节点可能还在缓存旧数据。解决方案是在 OSS 上设置 Cache-Control: no-cache,并在 CDN 上开启“强制刷新”策略。
坑三:函数计算的冷启动
定时任务本身不要求低延迟,但如果是用户触发的 API 调用,冷启动的几百毫秒延迟还是需要考虑的。预留实例可以解决,但会增加成本——对于这个项目来说,接受冷启动是更经济的选择。
六、总结
Serverless 架构让个人开发者可以用近乎为零的成本跑起来一个线上产品。如果你也在做 side project,强烈建议试试这套方案:
- 静态资源 → OSS + CDN
- 定时任务 → 函数计算 FC
- 动态数据 → 先用 JSON 顶住,流量大了再上数据库
项目地址(欢迎体验):https://minutecryptic.online/
有架构方面的问题欢迎在评论区交流,知无不言。
本文所有架构设计均为个人实践总结,不构成任何官方建议。云产品费用以官方定价为准。