1. 多租户概念与隔离需求
1.1 什么是多租户
多租户(Multi-Tenancy)是一种软件架构模式,指同一套系统实例同时服务于多个独立用户群体(租户),每个租户在逻辑上彼此隔离,互不感知。在云原生场景下,租户可以是一个团队、一个项目、一个客户部门或一个微服务环境。
核心特征: 共享基础设施 + 逻辑隔离 + 资源配额独立 + 数据访问隔离
多租户与单租户的核心区别在于资源复用程度与隔离粒度:
| 对比维度 | 单租户架构 | 多租户架构 |
|---|---|---|
| 实例数量 | 每个租户独立部署一套 | 所有租户共享一套或有限套 |
| 资源利用率 | 低,存在大量空闲 | 高,通过复用降低总成本 |
| 运维复杂度 | 随租户数量线性增长 | 集中管理,增长较缓 |
| 隔离强度 | 物理/虚拟机级强隔离 | 逻辑/容器级隔离,需精心设计 |
| 适用场景 | 金融、合规要求极高的场景 | SaaS、DevOps 平台、测试环境 |
1.2 租户隔离的三大维度
在 Docker Compose 多租户栈中,隔离必须覆盖以下三个核心维度,缺一不可:
1.2.1 网络隔离
每个租户拥有独立的网络命名空间,包括独立的 IP 段、DNS 解析、端口空间和网络策略。租户 A 的服务不能直接访问租户 B 的数据库,除非通过显式网关或服务网格。
- 实现方式: Docker Compose 的
network隔离 + 自定义子网 - 关键指标: 租户间网络延迟 ≤ 1ms(同宿主机),吞吐量 ≥ 1Gbps
- 常见陷阱: 默认 bridge 网络不隔离端口,需使用
--internal或 overlay 网络
1.2.2 数据隔离
每个租户的数据存储(数据库、缓存、对象存储)在逻辑或物理上完全分离。一个租户的 SQL 注入或数据泄露不应影响其他租户。
- 实现方式: 独立数据库实例 / 独立 Schema / 行级隔离 + 加密密钥分离
- 关键指标: 数据恢复时间目标(RTO)≤ 15 分钟,恢复点目标(RPO)≤ 5 分钟
- 常见陷阱: 共享数据库时忘记设置
schema_per_tenant或行级过滤策略
1.2.3 资源隔离
每个租户的计算资源(CPU、内存、磁盘 IO、网络带宽)受到配额限制,防止“吵闹邻居”效应导致服务质量下降。
- 实现方式: Docker Compose 的
deploy.resources+ cgroup 限制 - 关键指标: CPU 超分比 ≤ 4:1,内存超分比 ≤ 1.5:1
- 常见陷阱: 只配 CPU 不配内存,导致 OOM Killer 误杀邻居租户进程
实践建议: 在 Docker Compose 中,网络隔离通过
networks 定义独立子网实现;数据隔离推荐每个租户一个独立数据库容器;资源隔离使用 deploy.resources.limits 和 reservations 配合 cgroup 驱动。
1.3 为什么选择 Docker Compose 作为编排工具
在 Kubernetes 成为容器编排事实标准的今天,选择 Docker Compose 作为多租户隔离栈的编排工具,是基于以下特定场景的理性决策:
| 评估维度 | Docker Compose | Kubernetes | 选择理由(本课程) |
|---|---|---|---|
| 学习曲线 | 低,1-2 天可上手 | 高,通常 2-4 周 | 团队快速交付,降低入门门槛 |
| 资源开销 | 单机,无额外控制面 | 至少 3 节点 + etcd | 开发/测试环境成本敏感 |
| 隔离粒度 | 进程级 + 网络命名空间 | Pod 级 + NetworkPolicy | Compose 足够满足逻辑隔离需求 |
| 启动速度 | 秒级(docker compose up -d) |
分钟级(含调度与拉取) | CI/CD 流水线需要快速环境拉起 |
| 配置复杂度 | 单个 YAML 文件 | 多个 CRD + Helm Chart | 减少运维心智负担 |
| 生态成熟度 | 适合 10-50 个租户规模 | 适合 100+ 租户大规模集群 | 中小规模场景更务实 |
适用边界: 当租户数量超过 50 个,或需要跨主机自动调度、滚动升级、自动扩缩容时,应迁移至 Kubernetes。Docker Compose 多租户栈的最佳场景是 中小规模(5-50 租户)的 DevOps 测试环境、SaaS 预览环境、内部工具平台。
Docker Compose 在多租户隔离栈中的独特优势体现在:
- 声明式租户定义: 每个租户对应一个
docker-compose.yml文件,通过project_name和network前缀实现命名空间隔离 - 资源配额原生支持: Docker Compose v2 直接支持
deploy.resources,无需额外安装插件 - 快速克隆与销毁: 租户环境创建/删除仅需一条命令,适合 CI/CD 动态分配
- 与 Docker 生态无缝集成: 可直接复用 Dockerfile、Volume、Secret 等原生能力
本课程定位: 我们将基于 Docker Compose 构建一套完整的多租户隔离栈,涵盖网络隔离、数据隔离、资源配额、监控告警、日志聚合和自动化运维。适合 5-50 个租户的中小规模场景,兼顾开发效率与生产稳定性。