3. 平台门户架构总览:门户集成层、租户路由层、服务网格层、基础设施层
多租户故障域隔离的实现,依赖于一套清晰分层的平台门户架构。每一层承担特定的职责,从用户接入、租户识别、流量管控到底层资源隔离,形成完整的隔离与故障切换链路。本章从宏观视角拆解四层架构的核心组件与交互关系。
3.1 四层架构总览
平台门户采用自顶向下的分层设计,每一层对上层提供抽象接口,对下层屏蔽实现细节。四层定义如下:
| 层级 | 核心职责 | 关键组件 | 故障域范围 |
|---|---|---|---|
| 门户集成层 | 统一用户入口、认证、会话管理 | API Gateway、OAuth2 Proxy、Web 控制台 | 全局 / 区域 |
| 租户路由层 | 租户识别、流量分发、隔离策略注入 | 租户路由器、策略引擎、DNS 调度 | 租户级 |
| 服务网格层 | 服务间通信治理、熔断、重试、故障注入 | Istio / Linkerd、Envoy Sidecar、mTLS | 命名空间 / 服务 |
| 基础设施层 | 计算、存储、网络资源隔离与故障域定义 | Kubernetes 集群、节点池、PV、CNI | 可用区 / 集群 |
架构原则:每一层只依赖其直接下层,不跨层调用。故障域从下往上逐层收缩,基础设施层故障不影响上层租户路由逻辑,租户路由层故障不扩散至门户集成层。
3.2 门户集成层:统一入口与身份边界
门户集成层是用户与平台交互的第一道边界。它负责:
- 统一认证:集成 OIDC / OAuth2 协议,支持 SSO、MFA。
- 会话管理:维护用户登录态,生成 JWT 并注入租户上下文。
- 请求代理:将前端请求转发至后端服务,完成协议转换与限流。
- 审计日志:记录所有用户操作,关联租户 ID 与请求链路。
该层通常部署为多副本无状态服务,通过全局负载均衡器对外暴露。故障域为全局或区域级别,任一实例故障不影响整体可用性。
3.3 租户路由层:隔离策略的决策中枢
租户路由层是四层架构中最核心的隔离决策点。它根据请求中的租户标识,动态选择目标服务实例或集群,并注入隔离策略。
核心工作流程:
- 租户识别:从 JWT、Header 或 Path 中提取租户 ID。
- 策略匹配:查询租户策略表,获取该租户的故障域要求(如:指定可用区、专用节点池)。
- 路由决策:将请求转发至对应故障域内的服务实例。
- 故障切换:当主故障域不可用时,按策略降级至备用域。
设计要点:租户路由层必须保持无状态,路由决策结果可缓存。故障切换逻辑应支持主动探测 + 被动超时两种触发方式,避免因路由层自身故障导致不可用。
3.4 服务网格层:细粒度流量治理与故障注入
服务网格层在 Pod 级别注入 Sidecar 代理,接管所有服务间通信。它为多租户隔离提供:
- 流量分割:基于租户标签将流量路由至指定版本或集群。
- 熔断与重试:防止单租户故障雪崩至其他租户。
- 故障注入测试:在预发环境模拟延迟或异常,验证隔离策略有效性。
- 可观测性:采集全链路 Trace 与 Metrics,关联租户维度。
服务网格的故障域通常限定在命名空间或服务级别。通过 Istio 的 DestinationRule 和 VirtualService,可以为每个租户定义独立的流量策略。
3.5 基础设施层:物理与逻辑资源隔离
基础设施层提供最底层的隔离保障。典型隔离手段包括:
| 隔离维度 | 实现方式 | 故障域粒度 |
|---|---|---|
| 计算隔离 | 节点池、Kubernetes Namespace、ResourceQuota | 节点 / 可用区 |
| 网络隔离 | CNI 策略、NetworkPolicy、独立 VPC | 子网 / VPC |
| 存储隔离 | PV 独立、StorageClass 限定可用区 | 存储后端 / 可用区 |
| 故障域定义 | Topology Spread Constraints、PodAntiAffinity | 可用区 / 集群 |
常见误区:仅依赖基础设施层隔离而不在上层做路由控制,会导致故障切换时流量仍可能漂移至故障域内。必须结合租户路由层的策略,才能实现用户无感知的故障切换。
3.6 四层架构交互流程(SVG)
下图展示一次完整请求在四层架构中的流转路径,以及各层故障域边界的划分:
3.7 故障切换路径示例(SVG)
当主故障域(可用区 A)发生基础设施故障时,租户路由层自动将流量切换至备用故障域(可用区 B)。下图展示切换前后的流量路径变化:
关键结论:四层架构中,租户路由层是故障切换的决策大脑,服务网格层提供细粒度流量控制,基础设施层保证资源物理隔离。三层协同工作,才能实现用户无感知的故障域隔离与切换。