← 中文资源

简体中文版本

租户隔离

租户隔离防止一个客户的数据和工作负载被另一个客户看到、修改或拖慢,覆盖存储、计算、缓存和后台任务。

阅读英文原文

隔离有多个层次

租户隔离不是一个数据库开关,而是整条链路的属性:识别租户的令牌、过滤行的查询、保存响应的缓存键、触发任务的队列消息、对象存储前缀、加密密钥,以及保护共享容量的限流器。

工作机制

最强的是 silo:每个租户独立基础设施,爆炸半径小但成本成倍。pool 把多个租户放在共享基础设施中,每条记录和查询都带租户判别字段。bridge 混合两者,常见做法是受监管客户使用独立分片,小客户共享。

无论哪种模型,都要从已验证凭证推导租户身份,并作为请求上下文传递。在数据层用行级安全兜底,把租户写入每个缓存键和任务负载,按租户划分存储路径与加密密钥。

何时使用与取舍

每个多租户产品都需要。模型选择取决于监管、合同和成本:医疗、金融和政府客户常要求 silo 或独立密钥,长尾客户很难支撑。还要加入跨租户访问测试,用另一个租户的有效令牌尝试读取。

silo 边界最清晰,运维开销最高;pool 高效,但漏掉一个过滤条件就是泄露。共享缓存和连接池提升性能,却模糊边界;按租户加密改善密码学隔离,也让轮换更复杂;公平性控制增加逻辑,可能降低峰值利用率。

示例与常见误解

报表端点把结果缓存在 report:daily 下,租户 A 先请求,租户 B 随后拿到了 A 的缓存数据。把租户加入键即可修复,而跨租户测试本可以提前发现。

常见误解是数据库 schema 会自动保证隔离。只有每条访问路径都使用它才行,包括分析任务、管理工具和客服代登录。相关概念:多租户、行级安全、缓存键。