Skip to content

面试速答(先看这里)

**一句话结论:**在SaaS系统中,多租户是个基本功能了,就是你服务的每一个公司有一个自己的租户,系统要同时支持多个租户一起使用,并且他们之间要互相隔离。

60秒标准回答:

在SaaS系统中,多租户是个基本功能了,就是你服务的每一个公司有一个自己的租户,系统要同时支持多个租户一起使用,并且他们之间要互相隔离

SaaS多租户的实现方案主要涉及数据隔离和资源共享的平衡

最常见的方案就是 共享数据库,然后通过租户id来做逻辑隔离

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**SaaS多租户的实现方案主要涉及数据隔离和资源共享的平衡
  • **要点2:**最常见的方案就是 共享数据库,然后通过租户id来做逻辑隔离。
  • **要点3:**即所有租户共享同一数据库和Schema,通过 tenant_id 字段区分不同租户的数据。
  • **要点4:**每个租户在同一个数据库中拥有独立分区(分表)。
  • **要点5:**每个租户拥有独立的数据库实例,应用层通过租户标识路由到对应数据库连接。

**记忆锚点:**tenant_id → SaaS → 混合模式 → 共享数据库然后通过租户id来做逻辑隔离 → 共享数据库独立分区(分表) → 且他们之间要互相隔离

关键取舍:

  • SaaS多租户的实现方案主要涉及数据隔离和资源共享的平衡 最常见的方案就是 共享数据库,然后通过租户id来做逻辑隔离。
  • 但是缺点是他只是逻辑隔离,存在数据泄露的风险,并且多个租户共用一个数据库,可能会存在互相影响的情况。
  • 比如某个租户数据量大、请求量大可能占用一些公共的数据库资源。

易错提醒:

  • 但是缺点是他只是逻辑隔离,存在数据泄露的风险,并且多个租户共用一个数据库,可能会存在互相影响的情况。

追问准备:

  • 围绕「tenant_id」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「SaaS」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「混合模式」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

在SaaS系统中,多租户是个基本功能了,就是你服务的每一个公司有一个自己的租户,系统要同时支持多个租户一起使用,并且他们之间要互相隔离。

SaaS多租户的实现方案主要涉及数据隔离和资源共享的平衡

最常见的方案就是共享数据库,然后通过租户id来做逻辑隔离。

即所有租户共享同一数据库和Schema,通过tenant_id字段区分不同租户的数据。每条记录均包含tenant_id,应用层在查询时自动附加WHERE tenant_id = ?条件。这个方案是最常见的,因为他足够简单,只需要加个字段就行了。但是缺点是他只是逻辑隔离,存在数据泄露的风险,并且多个租户共用一个数据库,可能会存在互相影响的情况。比如某个租户数据量大、请求量大可能占用一些公共的数据库资源。

那么,好一点的方案是共享数据库,独立分区(分表)。

每个租户在同一个数据库中拥有独立分区(分表)。应用层根据租户标识动态切换分区(分表)。这个方案就比在一个数据库同一个分区中要好一点,因为至少大家是不同的分区,数据在物理上是隔离开的。但是他还是有一个瓶颈,那就是大家用的还是同一个数据库,单数据库连接数还是可能成为瓶颈。

那么,进一步的方案就是独立数据库

每个租户拥有独立的数据库实例,应用层通过租户标识路由到对应数据库连接。这么做就是完完全全的物理隔离,大家数据也不在一起,底层用到的硬件资源也都不在一起,完全做到互相不影响。但是缺点就是贵。。。

但是实际很多公司,并不一定要采用一套固定的方案,有可能采用混合模式

比如根据租户规模或需求动态选择隔离级别,针对小型租户,大家共用一个公共数据库,对于一些大客户,VIP客户,给他独立的分区,对于一些数据安全性要求比较高,受监管,愿意给更多钱的用户,给他独立部署。

​

方案对比 ​

方案隔离性扩展性成本适用场景
共享数据库,租户id逻辑隔离低低低小型应用,快速试错
共享数据库,独立分区(分表)中中中中等规模,需一定隔离性
独立数据库高高高高安全性需求(金融、医疗)
混合模式灵活高中高租户规模差异大