
说实话,我第一次听到 Serverless 架构这个词的时候,心里在想:“不会吧?后端都不要了?那我这些年写的服务是不是白学了?”
后来真香了。
这篇文章,我就以一个我亲手做的小项目为例,手把手讲讲我如何用 Serverless 架构三天搞定一个现代应用——一个“会议预约小助手”。不吹不黑,用的都是真实场景、真代码、真云服务,适合想快速上手 Serverless 架构的同学参考借鉴。
这个项目源于我们公司内部会议室预约混乱的问题。前端妹子提议做个小工具:
需求简单,传统做法大概是:一个前端 + 一个 Java 服务 + MySQL + 后台定时任务 + 服务器部署……
但我选择了 Serverless 架构,理由如下:
于是我选了腾讯云 Serverless Framework + 云函数 + 云数据库 + 云定时器,前端用微信小程序。
整体逻辑分四层:
如下是我脑补的架构图:
用户点击预约 → 微信小程序 → 云函数(预约接口)→ 数据库存储
定时清理任务 → Timer → 云函数(清理接口)→ 数据库更新 云函数可以直接在本地用 Serverless Framework 编写和部署。来看我写的一个预约函数片段:
// functions/bookRoom/index.js
const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
const db = cloud.database()
const { roomId, date, timeSlot, userId } = event
const exists = await db.collection('booking')
.where({ roomId, date, timeSlot })
.get()
if (exists.data.length > 0) {
return { code: 409, msg: '该时间段已被预约' }
}
await db.collection('booking').add({
data: {
roomId,
date,
timeSlot,
userId,
createdAt: new Date()
}
})
return { code: 200, msg: '预约成功' }
}是不是很像写普通的 Express 接口?但是我不需要服务器,不需要 PM2,不需要部署集群!
用 Serverless Framework 部署也很简单:
sls deploy --stage dev --region ap-guangzhou会议室预约有个尴尬问题——预约了但人没到。于是我们加了一个 定时任务:每天晚上 10 点自动清理当天未使用的预约。
我们用的是云函数 + 云定时触发器,函数逻辑大概如下:
// functions/clearExpired/index.js
exports.main = async (event, context) => {
const db = cloud.database()
const today = new Date().toISOString().split('T')[0]
const result = await db.collection('booking')
.where({ date: today, status: 'pending' })
.remove()
return { code: 200, msg: `清理完成,共删除 ${result.stats.removed} 条记录` }
}配合 Serverless Framework 的 serverless.yml 文件配置定时器:
functions:
clearExpired:
handler: index.main
events:
- timer: 'cron(0 22 * * *)' # 每天 22:00 执行微信小程序端使用云开发 SDK 调用云函数非常丝滑,代码如下:
wx.cloud.callFunction({
name: 'bookRoom',
data: {
roomId: 'A101',
date: '2025-05-01',
timeSlot: '14:00-15:00',
userId: 'echo_wish'
},
success: res => {
wx.showToast({ title: res.result.msg })
},
fail: err => {
console.error('预约失败', err)
}
})前端不需要专门对接网关,调用就像调用本地函数一样简单。
我用三天时间搞定了一个从零到一的“现代应用”,总结下来 Serverless 的几个爽点如下:
当然它也不是银弹,Serverless 更适合轻量业务、事件驱动型、启动快、无状态的服务场景。
以前我也习惯在自己的云主机上部署服务,一个一个手动配置,甚至还配置过 keepalived + nginx 高可用架构……那时候觉得有掌控感。
但现在我越来越觉得,开发现代应用,开发效率就是生产力。
Serverless 架构不是“没有服务器”,而是把繁琐的服务器运维交给云厂商,把开发者从传统架构中解放出来。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。