一个做家政管理软件的团队来咨询:自己用的系统想做成SaaS卖给同行,一百家公司要用一套系统,数据怎么隔开?这是后端系统开发的分水岭问题——单客户系统改成多租户,不是加个字段那么简单,设计的地基不同,盖出来的楼完全两样。
三种隔离方案怎么选
- 独立数据库:每家一个库,隔离最彻底,客户要单独导出数据也方便,但一百家就是一百个库,运维和成本随客户数线性涨,适合客单价高、对隔离极敏感的客户;
- 独立Schema:同一个库里每家一套表结构,隔离和成本居中,迁移备份都还行,小规模SaaS常用;
- 共享表加租户标识:所有客户的数据放同一批表,靠租户ID区分,成本最低、扩容最容易,但对代码纪律要求最苛刻。
多数中小SaaS最后落在第三种,因为它便宜且好扩展,代价是每一条查询、每一处缓存都必须带上租户条件,漏一处就串数据。
串数据是多租户的生死线
真出过这样的事故:A公司员工翻订单列表,翻着翻着出现了B公司的单子,原因是新加的一个查询接口漏了租户条件。对SaaS来说,串数据基本等于死刑判决,客户知道后没有任何解释余地。防线要设两层:代码层统一用带租户过滤的数据访问封装,从根上杜绝裸查询;再加一道验收动作,每次发版跑一遍双租户交叉测试,两个测试账号互相访问对方的数据,全部看不到才算过。
除了隔离,多租户还有几个绕不开的题。个性化需求怎么办:今天A家要改个字段,明天B家要换个流程,都答应的话代码很快分叉成一百个版本。正确姿势是配置化,字段可配、流程可选,把个性化消化在配置里。功能与套餐挂钩:基础版、专业版开不同的功能开关,这套开关从第一天就要设计进去,事后加很痛苦。还有计费和租户生命周期:开通、欠费停用、到期数据保留多久,这些规则别等第一个客户催费了再想。
先算账再动工
多租户改造成本不低,动工前先算笔账:一百个客户的年收入能不能覆盖改造加运维,前十个种子客户有没有着落。见过热情上头做完改造、半年只卖出三套的,投入全砸手里。
两条建议:想清楚目标客户量和客单价再启动多租户改造,二十个客户以内的规模,独立部署几套系统可能比SaaS化更划算;动手前让技术方出一份隔离方案和防串数据的验收清单,比格网络做SaaS类项目时,双租户交叉测试是发版必过项,这道关设了,才配谈商业化——多租户是后端系统开发里门槛最高的一种形态,敬畏它才能做好它。