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

3年踩了7次坑,他用NestJS搭出一套「租户隔离」的野路子

0
分享至


凌晨2点,Festease的告警响了。租户A的用户数据赫然出现在租户B的仪表盘上——这种事故,作者在过去三年里踩了7次。他最终用NestJS+MongoDB/PostgreSQL的混搭方案,把多租户架构从"能用"推到"敢用"。

多租户的真相:不是技术问题,是成本问题

SaaS的默认答案早就写死了。Slack、Shopify、Notion,你天天用的工具全是多租户——一套代码、一个部署、逻辑隔离。替代方案是给每个客户单开实例,15个客户还行,150个的时候 migration 能跑死你。

每个租户要自己的数据、配置、甚至品牌皮肤。但没人愿意一开始就为专属基础设施买单。问题的本质变成:怎么让客户感觉拥有独立系统,实际上又不真的独立运行?

作者的经验很直白:多租户最难的不是让它跑起来,是让它安全地、大规模地跑起来,同时别把自己淹死在运维里。

三种模式业内翻来覆去用。共享数据库+共享表最简单,加一列 tenantId 了事。便宜、迁移快,直到有人漏写 WHERE tenantId = ?——数据泄露就这么来的。Festease早期用的就是这个,作者承认"对于快速迭代的产品,这是正确选择"。

共享数据库+独立Schema是折中。PostgreSQL 的 tenant_abc.orders、tenant_xyz.orders 让数据库引擎帮你守边界。代价是每次 migration 要跑N遍,中途失败就是 schema 漂移。工具能救一点,但工作量实打实增加。


一租户一数据库是隔离天花板。连接池管理、备份膨胀、监控噪音,问题换了一批但同样头疼。适合大客户、高合规场景。

生产环境教会的:别选一种,用 tiers 分层

作者的实战建议反直觉:三种模式都用。把租户按需求分层,而非一刀切。

起步客户扔共享Schema,构建快、运维便宜。当客户要求专属资源,或流量开始影响邻居,再往上迁移。这种"升级路径"的设计,比一开始就选最复杂的方案更经得起折腾。

技术实现上,NestJS 的依赖注入帮了大忙。作者用自定义装饰器 + 拦截器,把租户上下文注入请求链路。数据库连接根据租户配置动态切换——共享表的走默认池,独立Schema的切到对应 search_path,独立数据库的则拉起专用连接。

关键细节在边界检查。每个数据访问层强制校验租户上下文,查询构造器自动追加租户过滤。作者说这套机制"不是防恶意,是防手滑"——凌晨2点的bug往往来自漏写一行代码,而非复杂攻击。

监控也分层。共享Schema的租户看聚合指标,独立资源的看专属面板。告警阈值按层级设置,避免小客户的抖动淹没大客户的真实故障。


那些"设计文档里很美"的坑

作者列了几条血泪教训。连接池在混合模式下是噩梦——共享租户吃光连接,独立数据库的租户反而连不上。最终方案是给不同层级配独立池,用中间件做流量整形。

Migration 工具选了 TypeORM 的 migration:run,但多Schema场景下要包装一层租户遍历脚本。作者强调"失败回滚必须原子",否则就会出现 tenant_001 改了表、tenant_002 没改的诡异状态。

缓存是另一个雷区。Redis key 必须带租户前缀,作者见过缓存穿透导致跨租户数据泄露的案例。最终方案是 key 结构强制规范 + 定期扫描异常 key 的巡检脚本。

日志和审计按租户分离存储。共享Schema的客户看脱敏后的聚合日志,独立资源的可以下原始日志。合规审计时,这套分层设计省了大量数据筛选的工夫。

作者最后提了一个还在验证的假设:随着 Serverless 数据库(如 Neon、Supabase)成熟,"一租户一数据库"的成本曲线可能会快速下降。到时候现在的 tiers 分层策略,或许会被更激进的隔离方案取代。

你的多租户架构现在卡在哪个层级?是还在共享表里埋 tenantId,还是已经被 migration 的N次执行磨没了耐心?

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

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.

相关推荐
热点推荐
豪取14连胜目标是否为总冠军?卢伟:我们的目标是争四

豪取14连胜目标是否为总冠军?卢伟:我们的目标是争四

懂球帝
2026-03-31 21:54:32
NASA宇航员晒了1张照片,网友集体破防:快烧了它

NASA宇航员晒了1张照片,网友集体破防:快烧了它

Ping值焦虑
2026-03-30 14:08:36
避其锋芒?江苏女排总决赛第2场0-3上海女排,注意下场直播时间

避其锋芒?江苏女排总决赛第2场0-3上海女排,注意下场直播时间

真理是我亲戚
2026-03-31 21:12:42
这面相太好了,妥妥旺夫相,膀大腰圆气血足,穿着干净舒服!

这面相太好了,妥妥旺夫相,膀大腰圆气血足,穿着干净舒服!

可乐谈情感
2026-03-29 15:16:24
央视出品,于和伟领衔主演,王阳加盟助阵,这抗战大剧会引爆收视

央视出品,于和伟领衔主演,王阳加盟助阵,这抗战大剧会引爆收视

娱乐圈笔娱君
2026-03-31 19:06:51
Apellis美股盘前涨超140%

Apellis美股盘前涨超140%

每日经济新闻
2026-03-31 19:18:10
国家发展改革委固定资产投资司原副司长王悦现被查

国家发展改革委固定资产投资司原副司长王悦现被查

新京报
2026-03-31 18:10:09
为什么大家都说这个热巴是假的?细思极恐,真的热巴去哪里了?

为什么大家都说这个热巴是假的?细思极恐,真的热巴去哪里了?

娱乐小丸子
2026-03-30 09:53:37
赵露思什么时候开始这么美的

赵露思什么时候开始这么美的

小椰的奶奶
2026-03-30 16:20:01
73比83爆冷输球!女篮霸主惨遭淘汰无缘四强:5大国手成摆设了?

73比83爆冷输球!女篮霸主惨遭淘汰无缘四强:5大国手成摆设了?

篮球快餐车
2026-03-31 02:11:55
Claude Code创始人:我所有的代码都是AI写的

Claude Code创始人:我所有的代码都是AI写的

顶级大佬思维
2026-03-30 11:42:17
“海空卫士”王伟烈士牺牲25周年,墓前摆满中国战机

“海空卫士”王伟烈士牺牲25周年,墓前摆满中国战机

上游新闻
2026-03-31 16:49:10
恩断义绝!金正恩治下的朝鲜,做出重大决定,官宣“头号敌国”

恩断义绝!金正恩治下的朝鲜,做出重大决定,官宣“头号敌国”

张嘴说财经
2026-03-31 19:56:44
德国政坛变天:默茨惨败丢铁票仓,“女版特朗普”要提前当总理了

德国政坛变天:默茨惨败丢铁票仓,“女版特朗普”要提前当总理了

飘逸语人
2026-03-31 14:39:48
贝林厄姆养伤,27岁超模女友晒辣照,球迷:这才是欧冠奖杯!

贝林厄姆养伤,27岁超模女友晒辣照,球迷:这才是欧冠奖杯!

仰卧撑FTUer
2026-03-31 20:32:03
邓超孙俪正式解绑:16年婚姻,各自安好

邓超孙俪正式解绑:16年婚姻,各自安好

老吴教育课堂
2026-03-31 14:06:20
美媒爆料:伊朗打坏的E3不是一架而是俩

美媒爆料:伊朗打坏的E3不是一架而是俩

观察者网
2026-03-31 18:11:09
芬兰总统称,由于战争损失巨大,普京将被迫紧急下令在进行动员

芬兰总统称,由于战争损失巨大,普京将被迫紧急下令在进行动员

谛听骨语本尊
2026-03-31 16:14:34
上海这一夜,被“雪姨”王琳惊艳了,52岁满头银发却冠压群芳

上海这一夜,被“雪姨”王琳惊艳了,52岁满头银发却冠压群芳

星宿影视鸭
2026-03-31 11:36:51
10亿!张雪机车夺冠,东鹏特饮赢麻了

10亿!张雪机车夺冠,东鹏特饮赢麻了

广告创意
2026-03-31 16:16:30
2026-03-31 22:51:00
野生运营
野生运营
懂点产品,懂点AI,正在努力给平淡日子搞点新花样。
535文章数 5关注度
往期回顾 全部

科技要闻

华为2025年销售收入8809亿,净利润680亿元

头条要闻

知情人:最鹰派的是阿联酋 极力敦促美国发动地面进攻

头条要闻

知情人:最鹰派的是阿联酋 极力敦促美国发动地面进攻

体育要闻

县城修车工,用20年成为世界冠军

娱乐要闻

《月鳞绮纪》空降 鞠婧祎却被举报偷税

财经要闻

油价暴涨 我们的生活成本会飙升多少?

汽车要闻

腾势Z9GT到底GT在哪?

态度原创

房产
游戏
健康
教育
公开课

房产要闻

重磅!海南城市更新拟出新政!

R星平台更没用了!账户迁移至官网 为GTA6准备?

干细胞抗衰4大误区,90%的人都中招

教育要闻

微专题:高考地理中的地理实验

公开课

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

无障碍浏览 进入关怀版