首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >后端都不要了?我用 Serverless 3天做了个“现代应用”小项目

后端都不要了?我用 Serverless 3天做了个“现代应用”小项目

原创
作者头像
Echo_Wish
发布2025-05-01 21:52:08
发布2025-05-01 21:52:08
2310
举报
文章被收录于专栏:云社区活动云社区活动

后端都不要了?我用 Serverless 3天做了个“现代应用”小项目


说实话,我第一次听到 Serverless 架构这个词的时候,心里在想:“不会吧?后端都不要了?那我这些年写的服务是不是白学了?”

后来真香了。

这篇文章,我就以一个我亲手做的小项目为例,手把手讲讲我如何用 Serverless 架构三天搞定一个现代应用——一个“会议预约小助手”。不吹不黑,用的都是真实场景、真代码、真云服务,适合想快速上手 Serverless 架构的同学参考借鉴。


🏗 项目背景:一个简单但实用的需求

这个项目源于我们公司内部会议室预约混乱的问题。前端妹子提议做个小工具:

  • 能看到每日可预约时间段
  • 可以微信小程序一键预约
  • 后台定时释放过期预约
  • 管理员可快速查看统计

需求简单,传统做法大概是:一个前端 + 一个 Java 服务 + MySQL + 后台定时任务 + 服务器部署……

但我选择了 Serverless 架构,理由如下:

  • 我不想手动部署后端服务;
  • 运维越少越好,配置越少越爽;
  • 使用频率不高,不值得买一整台云主机;
  • 想探索更现代的架构思路。

于是我选了腾讯云 Serverless Framework + 云函数 + 云数据库 + 云定时器,前端用微信小程序。


🧩 架构设计一览:真 · 无服务器部署

整体逻辑分四层:

  1. 微信小程序前端:展示页面、发起预约;
  2. API 层:云函数(SCF):处理业务逻辑;
  3. 数据层:云开发数据库(类似 MongoDB)
  4. 后台自动处理:定时触发器(Timer)

如下是我脑补的架构图:

代码语言:txt
复制
用户点击预约 → 微信小程序 → 云函数(预约接口)→ 数据库存储  
定时清理任务 → Timer → 云函数(清理接口)→ 数据库更新  

📦 云函数开发:我用 Node.js 写了一个预约接口

云函数可以直接在本地用 Serverless Framework 编写和部署。来看我写的一个预约函数片段:

代码语言:javascript
复制
// 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 部署也很简单:

代码语言:bash
复制
sls deploy --stage dev --region ap-guangzhou

⏰ 定时任务:释放过期预约

会议室预约有个尴尬问题——预约了但人没到。于是我们加了一个 定时任务:每天晚上 10 点自动清理当天未使用的预约。

我们用的是云函数 + 云定时触发器,函数逻辑大概如下:

代码语言:javascript
复制
// 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 文件配置定时器:

代码语言:yaml
复制
functions:
  clearExpired:
    handler: index.main
    events:
      - timer: 'cron(0 22 * * *)' # 每天 22:00 执行

🧑‍💻 小程序前端:调用云函数接口

微信小程序端使用云开发 SDK 调用云函数非常丝滑,代码如下:

代码语言:js
复制
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 的几个爽点如下:

  • 部署极快:写完一条命令搞定,不用配置 Nginx 和服务器;
  • 成本超低:访问量不高几乎不要钱,适合 MVP/内网项目;
  • 维护省心:定时任务、数据库都托管,基本不用管运维;
  • 扩展灵活:以后接入企业微信、钉钉都可以用同一套逻辑。

当然它也不是银弹,Serverless 更适合轻量业务、事件驱动型、启动快、无状态的服务场景。


📌 写在最后

以前我也习惯在自己的云主机上部署服务,一个一个手动配置,甚至还配置过 keepalived + nginx 高可用架构……那时候觉得有掌控感。

但现在我越来越觉得,开发现代应用,开发效率就是生产力

Serverless 架构不是“没有服务器”,而是把繁琐的服务器运维交给云厂商,把开发者从传统架构中解放出来。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 后端都不要了?我用 Serverless 3天做了个“现代应用”小项目
    • 🏗 项目背景:一个简单但实用的需求
    • 🧩 架构设计一览:真 · 无服务器部署
    • 📦 云函数开发:我用 Node.js 写了一个预约接口
    • ⏰ 定时任务:释放过期预约
    • 🧑‍💻 小程序前端:调用云函数接口
    • ✅ 实战体验:Serverless 带来的开发效率提升
    • 📌 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档