小i约球诞生记01:核心技术选型
本文是「小i约球」系列文章之一记录一个微信小程序从 0 到 1 过程中的技术选型与设计取舍。## 前言做小i约球之前我对这个项目的判断很简单它应该是一个轻量的小程序。用户发布约球名片其他人查看附近球友再打招呼联系。早期不需要复杂后台不需要独立 App也不需要一套很重的微服务架构。所以第一版技术选型我选择了微信小程序 微信云开发。现在回头看这个选择有明显的好处也有一些后面才慢慢感受到的限制。这篇主要聊技术选型不展开具体代码。一开始为什么选云开发最直接的原因是快。小i约球这种产品早期最重要的不是把架构设计得多漂亮而是尽快验证几个关键问题用户是否愿意发布约球名片附近球友列表是否有价值公众号提醒是否能带来回访本地群和小程序是否能形成配合如果一开始就自建后端需要处理服务器、数据库、部署、域名、HTTPS、鉴权、日志、运维等一堆事情。它们都重要但不是第一阶段最需要验证的东西。云开发的优势在这里就很明显小程序端可以直接调用云函数云函数天然拿到微信上下文云数据库和小程序生态集成度高openapi 调用比较方便定时任务配置成本低文件上传、图片存储、用户身份都能快速串起来对于一个早期个人项目来说这些东西能省掉大量时间。当时的整体架构项目整体结构比较典型miniprogram/小程序页面、组件、工具方法cloudfunctions/后端云函数云数据库存用户、约球名片、消息、问答、快速约球、本地群等数据小程序端通过wx.cloud.callFunction调用云函数。云函数内部再根据action分发到不同逻辑。大致形态是小程序页面 ↓ wx.cloud.callFunction 云函数 ↓ 云数据库 / 微信 openapi这套模式很适合早期快速开发。比如用户模块、约球名片模块、附近匹配模块、消息模块、问答模块、快速约球模块都可以拆成独立云函数。每个云函数只关心自己的业务部署时也可以单独上传。真实做下来遇到的限制如果只看前面的部分云开发听起来很省心。但项目做深以后也会慢慢遇到一些边界。1. 超时时间限制会影响批处理云函数有执行时间限制。对于普通请求问题不大但对批量任务, 或者AI大模型调用就比较敏感。比如遍历临时匹配队列批量发送公众号消息批量处理问答通知批量生成或同步数据这些逻辑如果一次处理太多就可能接近超时。所以后面必须做批次控制和并发控制。比如问答通知不能一次性无限发而是写入临时集合再由定时任务分批消费。4. 没有 Redis云开发默认没有 Redis。这会影响很多常见后端设计。比如短期缓存分布式锁限流去重队列状态临时会话在自建后端里这些很自然会想到 Redis。但在云开发里很多时候只能用数据库字段、临时集合、时间戳来替代。比如小i约球里附近匹配和收藏提醒都用了临时集合它们本质上是在用数据库模拟队列。这个方案能跑但要自己处理重复、失败、删除、批量消费等问题。5. 没有真正的消息队列这点和没有 Redis 类似但影响更大。小i约球里很多场景天然适合 MQ发布名片后异步通知附近球友收藏别人后异步通知对方问答发布后异步推送给相关用户快速约球后异步通知附近人和附近群如果有 MQ设计会很自然业务事件 ↓ 消息队列 ↓ 消费者 ↓ 发送通知 / 写日志 / 重试但云开发里没有这么完整的消息队列能力所以我用了“数据库集合 定时任务”的方式模拟。这个方式的好处是简单坏处也明显实时性不如 MQ失败重试要自己写消费状态要自己维护并发控制要自己处理数据清理要特别注意早期可以接受但项目继续变大后就会成为一个需要重点治理的模块。6. 本地调试和工程化能力有限这个项目主要依赖微信开发者工具调试。小程序端、云函数、云数据库、openapi 权限都和微信开发者工具绑定比较深。这对快速开发是好事但对工程化也有一些限制没有传统后端那种完整本地启动流程云函数部署依赖开发者工具操作多环境切换容易靠配置变量手动改自动化测试和 CI 不如常规 Node 服务自然项目早期问题不大。等功能复杂以后就会开始希望有更清晰的本地调试、部署和测试流程。为什么没有一开始自建后端如果重新做我仍然不会一开始就自建后端。原因很简单早期最大的不确定性不是技术而是产品是否成立。自建后端确实更自由可以用 Redis可以用 MQ可以自己设计数据库可以做完整日志和监控可以更好地做 CI/CD但这些自由也意味着更多成本。对小i约球这种早期产品来说先验证“附近球友匹配”这个场景比先搭一套完整后端更重要。所以我的判断是早期用云开发是对的。但要知道它不是没有代价。我的选型结论如果你也在做类似的小程序项目我会这样判断。适合用云开发的情况你是个人或小团队产品还在验证阶段主要场景在微信生态内后端逻辑不算特别重需要快速接入微信 openapi能接受一定的平台限制不太适合完全依赖云开发的情况业务有大量实时队列强依赖 Redis、MQ、复杂缓存需要大量后台批处理对可观测性和自动化部署要求很高未来可能脱离微信生态小i约球目前还处在比较适合云开发的阶段但已经开始遇到一些边界。比如消息队列、批量通知、定时任务、access_token 管理、跨函数重复代码这些都需要后续慢慢治理。总结小i约球一开始选择云开发核心原因是快速验证。它帮我把用户、约球名片、附近匹配、公众号通知、内容安全、定时任务这些能力串起来。对于一个早期微信小程序来说这个效率很重要。但真正做起来以后也会发现云开发不是万能后端。它的限制也很清楚云函数数量和大小、超时时间、没有 Redis、没有真正的消息队列、本地工程化能力有限。所以我的态度不是“云开发好”或者“云开发不好”而是在早期它能帮你快速把产品跑起来等业务变复杂以后你要知道哪些地方是在借平台能力哪些地方是在绕平台限制。本文属于「小i约球诞生记」系列。