网易首页 > 网易号 > 正文 申请入驻

多租户SaaS数据隔离:一个Laravel工程师的实战方案

0
分享至

做B2B SaaS最头疼的架构抉择是什么?不是技术选型,而是租户数据怎么放。给运输公司搭平台时,我卡在了一个经典难题上:每个租户单独数据库,还是共享数据库加逻辑隔离?

选了共享数据库。不是拍脑袋,是算过账的。


500个租户意味着什么?如果是独立数据库,加一个字段要跑500次迁移。新功能上线?先熬几个通宵迁移数据。备份恢复?500份备份文件管理到眼花。共享数据库的核心优势就三条:原子迁移一次搞定、备份恢复简单、基础设施成本低。代价也明显:隔离是逻辑层面的,存在"吵闹邻居"风险——某个租户的大查询可能拖慢其他人。


但权衡下来,共享数据库赢了。真到500租户那天,维护成本会替我证明这个选择。

架构设计比选择更重要。我的方案是纯Laravel实现,零外部依赖。请求进来先过中间件EnsureTenantAccess:验身份、提取租户ID、存进TenantContext。这是个单例,一个请求周期内全局唯一,彻底消灭上下文混乱。

数据隔离的魔法在BelongsToTenant这个Trait里。所有租户相关模型——客户、车辆、运输单——都挂载它。Trait自动做两件事:读的时候加全局作用域,自动拼接where tenant_id = X;写的时候自动填充tenant_id字段。工程师不用手动赋值,彻底告别"忘加租户条件"的Bug。

代码层面,TenantContext极简:set存ID、id取ID、isSet判空。就三个方法,但它是整个隔离体系的唯一信源。BelongsToTenant Trait在boot阶段注册全局作用域,查询构造器自动注入过滤条件。创建模型时,如果tenant_id为空且上下文已设置,自动赋值。


但代码写得再漂亮,没有测试就是赌运气。我写了专门的跨租户隔离测试:创建租户A和B,分别插入商品,用A租户用户请求列表,断言只返回A的数据、条数为1、名称匹配。没有这行测试,我只能祈祷GlobalScope正常工作——而祈祷不是工程策略。

实际运营中还有两个刚需场景。超级管理员需要 impersonate(模拟)租户视角查看问题,我的方案是:管理员无固定tenant_id,后台选择目标租户后写入session,中间件照常注入TenantContext,用户看到的界面和真实租户完全一致。只读模式也常见——欠费租户只能查不能改,中间件里判断is_read_only且请求非安全方法时直接403。

这套方案跑了两年,核心结论就一句:共享数据库的多租户,隔离可靠性不取决于数据库层,取决于代码层的纪律性。TenantContext单例+全局作用域自动注入+强制测试覆盖,这三道防线比物理隔离更可控——毕竟物理隔离也能被错误的连接字符串击穿。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
新冠后遗症对人体的最大影响,很多人深受其害,有些人还不自知

新冠后遗症对人体的最大影响,很多人深受其害,有些人还不自知

呼吸科大夫胡洋
2026-02-22 11:39:12
64岁陈秀雯近况曝光,“消失”6年变了模样,那么美却被婚姻毁了

64岁陈秀雯近况曝光,“消失”6年变了模样,那么美却被婚姻毁了

文刀贰
2026-05-13 23:25:20
云南腾冲枪击案:村中首富持冲锋枪疯狂杀人,除夕夜两家被灭门

云南腾冲枪击案:村中首富持冲锋枪疯狂杀人,除夕夜两家被灭门

飞云如水
2024-07-04 22:24:01
A股:突然跳水大跌,原因是什么?释放什么信号?行情到顶了吗?

A股:突然跳水大跌,原因是什么?释放什么信号?行情到顶了吗?

虎哥闲聊
2026-05-14 11:37:25
外交防线全面失守!特朗普无视日本直飞北京,高市拥核梦要碎了?

外交防线全面失守!特朗普无视日本直飞北京,高市拥核梦要碎了?

别人都叫我阿螫
2026-05-14 11:48:22
张雪召回问题车辆 网友质疑:当初怎么说雷军的?应该退车退款

张雪召回问题车辆 网友质疑:当初怎么说雷军的?应该退车退款

念洲
2026-05-13 09:49:13
结婚才2年,萧敬腾就尝到老妻少夫的残酷,其实舒淇早就把话说透

结婚才2年,萧敬腾就尝到老妻少夫的残酷,其实舒淇早就把话说透

一盅情怀
2026-05-11 11:23:33
唐嫣《爱情没有神话》37集大结局,是今年看过最压抑的都市剧结局

唐嫣《爱情没有神话》37集大结局,是今年看过最压抑的都市剧结局

娱君坠星河
2026-05-14 10:23:32
5月15号后彻底翻身,家有哪些生肖麻烦少有,喜悦连续,个个赚钱

5月15号后彻底翻身,家有哪些生肖麻烦少有,喜悦连续,个个赚钱

毅谈生肖
2026-05-14 11:59:40
首个国有大行信用卡APP,即将关停

首个国有大行信用卡APP,即将关停

澎湃新闻
2026-05-13 22:53:05
G5骑士117-113逆转活塞 球员评价:4人优秀,3人及格,2人低迷

G5骑士117-113逆转活塞 球员评价:4人优秀,3人及格,2人低迷

篮球资讯达人
2026-05-14 11:12:47
死亡高峰还没有来!中国人口最大的坎不是少生,而是大批去世!

死亡高峰还没有来!中国人口最大的坎不是少生,而是大批去世!

番外行
2026-05-14 10:59:04
你们都是什么时候对男女之事开窍的?网友:果然还是拦不住有心人

你们都是什么时候对男女之事开窍的?网友:果然还是拦不住有心人

夜深爱杂谈
2026-02-21 21:37:02
为什么女教师成了单身女的最重灾区?网友剖析一针见血,我明白了

为什么女教师成了单身女的最重灾区?网友剖析一针见血,我明白了

夜深爱杂谈
2026-04-27 22:11:39
走路要看路噢!深圳一街道惊现巨蟒,足足2米长!蜷缩在路中间……

走路要看路噢!深圳一街道惊现巨蟒,足足2米长!蜷缩在路中间……

广东吃喝玩乐
2026-05-14 12:02:11
炸了!奥尼尔评 NBA 历史前十巨星 詹皇仅第 3

炸了!奥尼尔评 NBA 历史前十巨星 詹皇仅第 3

澜归序
2026-05-14 04:07:21
美媒披露:阿联酋秘密对伊朗发动军事打击

美媒披露:阿联酋秘密对伊朗发动军事打击

参考消息
2026-05-12 20:36:12
明星套现离场,留下85亿窟窿,华谊兄弟被谁“抽”干了?

明星套现离场,留下85亿窟窿,华谊兄弟被谁“抽”干了?

帅真商业
2026-05-06 21:23:01
毛主席83岁给华国锋的珍贵书法,练字真的有意义吗?

毛主席83岁给华国锋的珍贵书法,练字真的有意义吗?

书画相约
2026-05-11 10:09:02
小宝与王某雷,谁探访花的数量更多?

小宝与王某雷,谁探访花的数量更多?

挪威森林
2026-01-31 12:15:26
2026-05-14 14:04:49
硬核玩家2哈
硬核玩家2哈
沉淀中,勿扰
2685文章数 13关注度
往期回顾 全部

科技要闻

马斯克:只有我和黄仁勋坐上了"空军一号"

头条要闻

十四世达赖的亲侄子被指诱奸超25名女孩 带女下属开房

头条要闻

十四世达赖的亲侄子被指诱奸超25名女孩 带女下属开房

体育要闻

登海报!哈登30+8+6创多项纪录 第8次赢天王山

娱乐要闻

肖战提名金海燕奖,这一步走得太稳

财经要闻

片仔癀依旧困在“片仔癀”

汽车要闻

C级纯电轿跑 吉利银河"TT"申报图来了

态度原创

时尚
亲子
家居
公开课
军事航空

T恤+低腰阔腿裤、衬衫+低腰半裙,今年夏天最时髦的搭配,谁穿谁好看!

亲子要闻

姐姐家三岁的儿子,上床前的一个动作,让老师夸赞许久!

家居要闻

精神奢享 对话塔尖需求

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

美以伊战争期间以总理密访阿联酋

无障碍浏览 进入关怀版