开场:早期架构不要追求未来感
SaaS 创业者里很多人有技术背景,第一版产品很容易过度设计:微服务、多租户平台、事件总线、插件系统、复杂权限、自动扩缩容、完整数据仓库。听起来专业,但如果客户问题还没验证,这些架构会拖慢速度。
最小技术架构的目标不是简陋,而是服务当前阶段:能让第一批客户稳定完成关键任务,能快速修改,能看见问题,能保护基本数据安全,能支撑后续演进。早期架构应该可交付、可改动、可追踪。
如果一个架构让团队两周都改不动一个试点需求,它就不适合早期。
单体优先
第一版 SaaS 大多数情况下可以从模块化单体开始。一个代码库、一个应用、一个数据库,内部按业务模块拆清楚。这样部署简单、调试简单、数据一致性清楚,适合快速试错。
不要把“单体”理解成乱写。单体也可以有清晰边界:
- 用户和租户模块。
- 核心业务模块。
- 导入和处理模块。
- 报告和导出模块。
- 通知模块。
- 后台管理模块。
边界在代码里清楚,比一开始拆成多个服务更重要。等到某个模块真的有独立伸缩、独立团队或独立故障隔离需求时,再拆也不晚。
租户边界要从第一天考虑
虽然不必一开始做复杂企业级多租户,但租户边界不能忽视。每条核心业务数据都应该知道属于哪个客户或组织。数据库表里要有 tenant_id 或等价字段,查询时要默认带租户限制,后台操作也要谨慎。
早期最危险的事故之一,是 A 客户看到 B 客户的数据。即使产品还小,这类事故也会严重损害信任。
可以先采用简单模型:
- 一个用户属于一个或多个组织。
- 业务数据归属于组织。
- 普通查询必须按组织过滤。
- 管理员后台访问客户数据要记录。
不需要一开始支持复杂集团、子部门、跨组织授权,但要把基本边界打好。
权限先做少而清楚
早期不要做十几种角色。可以先有三类:
- Owner:管理组织、成员和账单。
- Member:完成核心业务任务。
- Admin:内部运维或客户成功使用。
如果客户还没有多角色使用,就先不要做细粒度权限。复杂权限会让开发和测试成本迅速上升。真正需要时,再根据实际角色扩展。
但少不代表没有。至少要避免普通用户访问管理接口,避免未登录访问私有数据,避免后台操作没有记录。权限的第一目标是防事故,第二目标才是满足复杂组织管理。
导入导出要认真做
很多早期 SaaS 的关键价值来自客户数据。即使第一版只支持 CSV,也要认真处理导入导出。
导入要考虑:
- 字段模板。
- 必填项检查。
- 错误提示。
- 样本预览。
- 重复数据处理。
- 导入记录。
导出要考虑:
- 客户能拿回自己的数据。
- 导出范围清楚。
- 敏感字段处理。
- 导出操作记录。
导入导出看似基础,但会直接影响客户信任。客户愿意给你数据,是因为相信你能处理好,也能在需要时还给他。
审计日志从小做起
早期不需要完整合规系统,但关键操作要有日志。比如:
- 谁导入了数据。
- 谁修改了配置。
- 谁删除了记录。
- 谁导出了报告。
- 内部管理员什么时候访问了客户组织。
审计日志能帮助你排查问题,也能在客户质疑时给出解释。很多团队等到出事故后才想加日志,那时已经晚了。
日志不必一开始做复杂查询界面,先稳定记录到数据库或日志系统即可。关键是字段清楚:时间、用户、组织、动作、对象、结果。
备份和恢复不要拖
即使只有几个客户,也要做基本备份。备份不是大公司才需要。早期数据丢失同样会毁掉信任。
至少要做到:
- 数据库每日备份。
- 备份保留周期明确。
- 定期测试恢复。
- 重要配置有版本记录。
- 删除操作有确认和软删除策略。
很多团队以为“云数据库自动备份”就够了,但没有测试恢复,就不知道出事时能不能用。每月至少做一次恢复演练,哪怕只是恢复到测试环境。
可观测性要服务客户问题
早期监控不用很复杂,但要能回答几个问题:
- 系统是否可用。
- 关键任务是否失败。
- 导入是否成功。
- 报告生成是否异常。
- 某个客户为什么看不到结果。
可以先记录应用错误、请求日志、关键任务状态和后台告警。不要等客户截图告诉你系统坏了。SaaS 的交付不是代码部署完成,而是客户任务完成。
如果有异步任务,比如导入处理、报告生成、邮件发送,一定要有状态和重试机制。早期很多问题都出在异步任务悄悄失败。
配置不要写死
MVP 阶段会频繁调整规则、模板、阈值和文案。不要把所有东西写死在代码里。可以把部分内容做成配置:
- 行业模板。
- 报告字段。
- 提醒阈值。
- 试点客户开关。
- 功能开关。
配置能力不必很复杂,甚至可以先由内部后台或数据库表控制。关键是不要每次客户试点都需要改代码部署。可配置性会提高试点速度。
但也不要过度配置。只有变化频繁、客户差异明显、影响试点节奏的内容,才值得配置化。
内部后台不要省掉
很多早期 SaaS 只做客户前台,不做内部后台。结果每次客户出问题,都要连数据库、跑脚本、临时改数据。短期看节省时间,长期会制造风险。最小架构里应该有一个简易内部后台,哪怕功能很少。
后台至少能看:
- 客户组织列表。
- 用户和角色。
- 关键业务数据状态。
- 导入任务状态。
- 报告生成状态。
- 最近错误和操作记录。
- 试点客户的功能开关。
后台不是为了让内部随意改客户数据,而是为了可支持、可排查、可控变更。所有后台敏感操作都应该记录。比如内部人员帮客户重新生成报告、修正导入状态、打开试点功能,都要留下时间、人员和原因。
早期客户遇到问题时,响应速度很影响信任。一个简易后台能让你在 5 分钟内知道客户卡在哪里,而不是让工程师临时查日志半小时。它也能帮助产品发现高频问题:如果很多客户都卡在导入任务,说明导入体验要优先改。
环境和发布要保持简单但可靠
第一版产品至少要区分本地、测试、生产环境。不要直接在生产数据库上调试,不要用生产客户数据做随意测试。配置、密钥和数据库连接要分环境管理。
发布流程也要有基本纪律:
- 每次发布有版本记录。
- 发布前跑核心用例。
- 重要数据变更先备份。
- 发布后检查关键任务。
- 出问题能回滚或热修。
不需要一开始建复杂 CI/CD,但不能靠“我本地试过了”直接上线。SaaS 是持续服务,客户可能每天依赖你的系统。早期产品可以简单,但发布习惯不能混乱。
如果团队只有一个开发者,也要写一份发布清单。清单会减少低级事故,也方便未来新人接手。很多可靠性不是来自高端技术,而是来自重复执行的基本动作。
最小架构也要有技术债清单
早期为了速度,一定会留下技术债。问题不在于有债,而在于不知道债在哪里。建议从第一版开始维护一张技术债清单,记录债务内容、原因、风险、触发修复条件。
例如:
| 债务 | 原因 | 风险 | 触发修复 |
|---|---|---|---|
| 只支持 CSV 导入 | 快速验证 | 大客户需要系统对接 | 3 个付费客户提出 |
| 权限只有三类 | 控制复杂度 | 无法适配多部门 | 试点出现多角色协作 |
| 报告生成同步执行 | 开发简单 | 大数据量超时 | 单次处理超过 30 秒 |
这张表会让团队对技术取舍保持诚实。你可以为了验证市场暂时简化,但不能把简化当成永远没问题。每次客户增加、数据量增加、使用场景变复杂,都要重新看技术债是否到了还的时候。
技术债清单也能帮助和非技术合伙人沟通。不是工程师说“需要重构”,而是大家看到某个债务正在影响客户交付、销售承诺或数据安全。这样技术投入就和业务结果连接起来。
安全默认值要保守
早期架构还有一个原则:默认值要保守。新用户默认只能看到自己组织的数据;新功能默认只对试点客户打开;导出默认需要权限;后台默认记录敏感操作;错误信息默认不暴露内部细节。
保守默认值会减少事故。很多安全问题不是黑客攻击,而是团队为了方便设置了过宽权限、过长有效期、过多数据暴露。小团队没有大量安全人力,更要靠默认策略降低风险。
如果某个设置让内部方便很多,却让客户数据暴露范围变大,就先选更保守的方案。便利可以以后优化,信任一旦受损很难补回。
早期架构首先要守住客户信任。
只要信任还在,技术就有时间迭代;信任没了,再好的重构也很难挽回客户。
结尾:最小架构要保护学习速度
从 0 开始做 SaaS,技术架构最大的价值是保护学习速度。它不能脆弱到每次试点都出事故,也不能复杂到每次修改都很慢。单体优先、租户边界清楚、权限简单、导入导出可靠、日志可追踪、备份可恢复、配置可调整,这些就足够支撑第一阶段。
不要用未来规模吓自己,也不要用 MVP 借口忽视基本责任。好的最小架构,既让客户能信任你,也让团队能快速学习。它不是终局架构,但应该是一条能继续演进的起点。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。