Tenant隔离和限制
Tenant隔离和极限是多特南特体系结构的基础。目的:确保一个租户的行动永远不会影响另一个租户的数据、安全和SLO,并公平和可预测地分配资源。下面-从数据级别到计算计划和事件管理的实用解决方桉图。
1)威胁模式和目标
三.威胁
租户之间的数据泄漏(逻辑/缓存/通过日志)。
"Noisy neighbor":由于单个客户的激增而导致性能下降。
特权升级(访问策略错误)。
计费漂移(使用和权责发生不匹配)。
级联容错场景(一个事件导致许多人处于市中心)。
目标
严格隔离数据和秘密。
限额/配额和公平规划。
透明审计,可观察性和计费。
事件本地化和快速恢复。
2)隔离级别(端到端模型)
1.数据
密钥和索引中的"tenant_id",行级安全(RLS)。
加密:KMS层次结构→租户密钥(KEK)→数据密钥(DEK)。
高要求(Silo)分离电路/DB,通用集群c RLS用于效率(Pool)。
重生策略和"遗忘权",按键加密。
2.计算
CPU/RAM/IO配额,每个特南特的worker池,"加权"队列。
GC/heap隔离(JVM/Runtime容器/设置),并行主义限制。
Per tenant autoscaling+backpressure。
3.网络
分段:私人endpoints/VPC,通过"tenant_id" ACL。
边界上的限额和按限额连接帽。
防护DDoS/机器人,并考虑计划/优先级。
4.操作和流程
Poarendator迁移,becaps,DR,feature-flags。
事件是"微爆炸半径":通过"tenant_id"融合。
3)访问控制和租户上下文
AuthN: OIDC/SAML;令牌带有"tenant_id","org_id","plan","scopes"。
AuthZ:RBAC/ABAC(角色+项目,部门,区域属性)。
边界上下文:API网关检索和验证tenant上下文,补充限制/配额,写入预告片。
"双锁"原则:检查服务+RLS/DB策略。
4)数据: 电路,缓存,logi
方案是:- 共享计划(row-level):最高效率,严格的RLS是强制性的。
- 按计划:孤立/可操作性权衡。
- Per-DB/cluster (Silo):用于VIP/可调。
缓存:密钥前缀'tenant: {id}:',TTL按计划,cache-stampede (lock/early refresh)保护。
徽标/元数据:完整的PII别名,"tenant_id"过滤器,禁止不同租户的徽标"拼写"。
5)限制流量和运营
基本力学
Token Bucket:平滑的爆发,"rate"/"burst"参数化。
Leaky Bucket:通过稳定。
固定窗口/滑动窗口:时间窗口上的简单/准确配额。
Concurrency极限:同时查询/joba的caps。
在哪里应用
在边界(L7/API网关)-基本保护和"快速故障"。
在核心(服务/队列)-用于第二轮和"公平共享"。
策略
根据tenant/plan/endpoint/操作类型(公共API,重型出口,管理操作)。
Priority-aware:VIP在仲裁中获得更大的"爆破"和重量。
Idempotency-keys用于安全后退。
轮廓示例(概念)
Starter: 50 req/s, burst 100,2并行出口。
商业:200 req/s, burst 400,5出口。
Enterprise/VIP: 1000 req/s, burst 2000,专用店员。
6)配额和公平规划(公平)
资源配额:存储、对象、消息/分钟、任务/小时、队列大小。
Weighted Fair Queuing/Deficit Round Robin:"加权"访问共享窃贼。
超常工人池:对嘈杂/关键客户进行硬隔离。
管理控制:在配额用尽之前发生故障/降级。
Backoff+jitter:指数延迟,以免同步爆发。
7)可观察性和按帐单
强制性标签:"tenant_id"、"plan"、"region"、"endpoint"、"status"。
SLI/SLO per tenant: p95/p99 latency, error rate, availability, utilization, saturation.
使用指标:操作/字节/CPU秒计数器→ →发票聚合器。
计费的相等性:边境的狙击,防止双重注销/损失事件。
Dashbords细分:VIP/监管/新租户。
8)事件,降级和DR"按租户"
通过"tenant_id"进行融合:紧急关闭/转弯特定租户,而不会影响其他租户。
Graceful Degradation:只读模式、"沙箱"队列、延迟任务。
RTO/RPO per tenant:每个计划的恢复和损失目标。
演习:定期的"游戏日",关闭嘈杂的租户并检查DR。
9)合规性(居住、隐私)
Pinning tenant到该地区;跨区域流动的明确规则。
对密钥/数据访问进行审核,记录管理操作。
转发管理和数据导出per tenant。
10)迷你参考: 如何拼凑在一起
请求流
1.Edge (API-gatew):TLS →检索"tenant_id" →令牌验证→应用rate/quotas →设置预告片。
2.Policy引擎:"tenant_id/plan/features"上下文→路线和限制的决定。
3.服务:检查权限+标签"tenant_id" →使用RLS下的DB →前缀缓存。
4.使用收集:操作/字节计数器→聚合器→计费。
数据
策略/DB(row-level/per-schema/per-DB)。
KMS: 按键到租户,轮换,crypto-shredding当删除.
计算
重量队列,per tenant的worker池,concurrency的caps。
根据per tenant度量进行自动计算。
11)伪政治(面向方向)
yaml limits:
starter:
req_per_sec: 50 burst: 100 concurrency: 20 exports_parallel: 2 business:
req_per_sec: 200 burst: 400 concurrency: 100 exports_parallel: 5 enterprise:
req_per_sec: 1000 burst: 2000 concurrency: 500 exports_parallel: 20
quotas:
objects_max: { starter: 1_000_000, business: 20_000_000, enterprise: 100_000_000 }
storage_gb: { starter: 100, business: 1000, enterprise: 10000 }
12)售前支票清单
- 真理的单一来源"tenant_id";无处不在,被理解。
- 启用DB+服务验证(双锁)级别的RLS/ACL。
- per tenant加密密钥,已记录轮换/删除(crypto-shredding)。
- 边界内和边界内的限额/配额;测试了尖峰和"burst"。
- Fair queuing和/或VIP专用培训师;caps на concurrency.
- Per Tenant SLO和Alerts;dashbords逐段。
- Usage收集是偶数的;已验证计费。
- DR/事件将本地化为租户;通过"tenant_id"进行融合。
- Cash/Logs按租户划分;PII被掩盖。
- 迁移/备份/出口程序-选择性程序。
13)典型错误
RLS被"服务"用户禁用/绕过-泄漏风险。
单一的全球限制→"噪音邻居"和违反SLO。
共享缓存/队列无前缀→数据交叉。
Billing根据在高峰时丢失的日志计算。
缺乏先行融合是级联下降。
"一举"迁移而无法阻止问题的"tenant_id"。
14)快速选择策略
可调节/VIP: Silo数据(per-DB)、专用用户、严格的配额和居住。
大型SaaS:共享计划+RLS,边界的强限制,内部的公平测验。
负载"嘈杂/脉动":大型"爆破"+强硬的concurrency-caps,后压和计划优先级。
结论
Tenant的孤立和限制是关于边界和正义的。通过堆栈、RLS和数据加密、边界和核心的限制和配额、公平的计划者、可观察性和事件本地化,所有这些都为每个租户提供了安全性、可预测的质量和透明的计费,即使平台有了积极的增长。