1. 多租户架构概述
1.1 多租户定义
多租户(Multi-Tenancy)是一种软件架构模式,其中单个软件实例或基础设施集群同时服务于多个独立的“租户”。每个租户在逻辑上相互隔离,拥有专属的数据、配置、流量和资源视图,但共享同一套底层系统。
在云原生服务网格场景下,多租户的核心目标是在共享 Envoy 代理实例的前提下,为不同业务线、不同团队或不同客户提供安全隔离、性能隔离和故障隔离。
关键区分:多租户 ≠ 多集群。多租户强调逻辑隔离,即使所有租户运行在同一个 Envoy 进程中,也必须保证一个租户的流量洪峰或配置错误不会影响其他租户。
1.2 Envoy 中的租户模型
Envoy 本身不直接定义“租户”概念,但通过其灵活的配置体系可以构建出清晰的租户模型。常见的实现方式包括:
- Listener 级隔离:每个租户绑定独立的监听器(Listener),使用不同的端口或 IP 地址。
- Filter Chain 级隔离:在同一个 Listener 内,通过 SNI 或 HTTP Host 头部匹配不同的 Filter Chain,路由到租户专属的配置。
- Cluster 级隔离:每个租户拥有独立的上游集群(Cluster),包括专属的连接池、断路器参数和负载均衡策略。
- Route Configuration 级隔离:通过虚拟主机(Virtual Host)和路由表(Route Table)实现租户粒度的流量治理。
| 隔离层级 | Envoy 配置对象 | 隔离粒度 | 典型场景 |
|---|---|---|---|
| L4 网络层 | Listener / Filter Chain | 端口 / SNI | 金融核心 vs 外围业务 |
| L7 应用层 | Virtual Host / Route | Host / Path | 多品牌电商共享网关 |
| 连接池层 | Cluster / Circuit Breaker | 上游端点组 | 读写分离、高优租户 |
| 流控层 | HTTP Connection Manager / 流控 Filter | HTTP/2 流级别 | 突发流量隔离、慢客户端保护 |
1.3 故障域概念与重要性
故障域(Failure Domain)是指系统中一个组件或一组资源发生故障时,所影响的范围。在多租户架构中,故障域的设计直接决定了爆炸半径——即一个租户的故障会扩散到多大范围。
核心原则:每个租户应该是一个独立的故障域。租户 A 的 HTTP/2 流控参数配置错误、流量突发或后端超时,不应导致租户 B 的连接池耗尽或请求被拒绝。
Envoy 中故障域的实现依赖于以下关键机制:
- 资源配额与限制:通过断路器(Circuit Breaker)为每个租户设置最大连接数、最大请求数、最大重试次数等硬限制。
- 流控参数隔离:HTTP/2 的流控窗口(Flow Control Window)、并发流限制(Max Concurrent Streams)等参数按租户独立配置。
- 超时与重试策略:每个租户拥有独立的请求超时、空闲超时和重试预算,防止慢租户拖垮全局。
- 优先级与调度:通过权重路由和优先级队列,确保高优租户在资源竞争时获得保障。
1.4 故障域的重要性总结
在多租户 Envoy 部署中,故障域设计直接关系到系统的可用性和可预测性。以下是故障域隔离带来的关键收益:
| 收益维度 | 说明 | Envoy 实现手段 |
|---|---|---|
| 可用性提升 | 单个租户的故障不会导致全局服务中断 | 独立断路器、超时配置 |
| 性能可预测 | 每个租户的资源配额固定,避免“吵闹邻居”效应 | 连接池大小、流控窗口独立 |
| 安全隔离 | 租户无法通过资源耗尽攻击影响其他租户 | RBAC + 资源配额 |
| 运维简化 | 故障定位范围缩小,爆炸半径可控 | 租户级监控指标、日志 |
| 合规性 | 满足金融、医疗等行业的数据隔离要求 | Listener 级隔离 + 审计 |
常见误区:不要认为“只要用了 Envoy 就自动获得多租户隔离”。默认配置下,所有租户共享同一个连接池和流控参数,一个租户的突发流量会直接耗尽全局资源。必须显式配置断路器、独立连接池和 HTTP/2 流控参数,才能实现真正的故障域隔离。