3. 环境规划:开发环境、测试环境、预发布环境、生产环境划分与资源规划

在供应链控制塔事件溯源项目中,合理的环境划分是保障交付质量与运维稳定性的基石。本章将定义四套标准环境(DEV、TEST、STAGING、PROD)的职责边界、资源规格与网络隔离策略,并给出基于 Kubernetes 命名空间与云资源的规划方案。

3.1 环境职责与隔离策略

每个环境对应一个独立的 Kubernetes 集群或强隔离命名空间组,通过网络策略(NetworkPolicy)与云防火墙实现南北向与东西向流量管控。

环境 代号 主要用途 数据策略 访问控制
开发环境 DEV 开发人员自测、单元集成、本地联调 脱敏样本数据,可随时重建 仅开发团队 VPN + 堡垒机
测试环境 TEST QA 功能测试、接口自动化、性能基准 脱敏全量数据,每日重置 QA 团队 + 开发只读
预发布环境 STAGING 生产灰度验证、压测、UAT 验收 脱敏近生产数据,与生产隔离 PM + QA Lead + 运维
生产环境 PROD 线上真实业务,SLA 99.99% 真实数据,严格备份与审计 仅运维 + 审批临时授权
环境隔离原则: DEV 与 TEST 可共用同一集群的不同命名空间,但 STAGING 与 PROD 必须使用独立集群,且 PROD 集群不允许部署任何非生产负载。

3.2 资源规划清单

以下资源规划基于事件溯源架构的核心组件:事件存储(Event Store)、消息队列(Kafka)、计算引擎(Flink/Spark)、API 网关与监控告警。所有环境均采用高可用部署,生产环境额外配置跨可用区容灾。

组件 DEV TEST STAGING PROD
Kubernetes 节点 3 台 4C8G 5 台 8C16G 7 台 16C32G 10 台 32C64G × 2 AZ
Event Store (PostgreSQL) 1 主 1 从 4C8G 1 主 2 从 8C16G 1 主 2 从 16C32G 1 主 3 从 + 同步备 32C64G
Kafka 集群 3 节点 4C8G 3 节点 8C16G 6 节点 16C32G 9 节点 32C64G × 2 AZ
Flink 作业管理器 1 台 4C8G 1 台 8C16G 2 台 16C32G HA 3 台 32C64G HA
API 网关 (Kong/Istio) 1 实例 2C4G 2 实例 4C8G 2 实例 8C16G HA 4 实例 16C32G HA
监控 (Prometheus + Grafana) 1 套 2C4G 1 套 4C8G 1 套 8C16G HA 1 套 16C32G HA + 异地
对象存储 (MinIO/S3) 2 节点 2C4G 2 节点 4C8G 4 节点 8C16G 6 节点 16C32G 纠删码
成本估算参考: 以阿里云按量计费为例,DEV 环境月均约 ¥3,500,TEST 约 ¥8,200,STAGING 约 ¥18,000,PROD 约 ¥65,000(含跨 AZ 流量与备份存储)。建议对 STAGING 与 PROD 采用预留实例节省 30%~40% 成本。

3.3 环境网络拓扑与部署流水线

下图展示了四套环境之间的网络隔离关系与 CI/CD 制品流转路径。代码从 DEV 开始逐级晋升,最终到达 PROD。

供应链控制塔环境网络拓扑与部署流水线 环境网络拓扑与部署流水线 DEV 开发环境 K8s 命名空间: dev 3 节点 4C8G 脱敏样本数据 TEST 测试环境 K8s 命名空间: test 5 节点 8C16G 脱敏全量数据 STAGING 预发布 独立 K8s 集群 7 节点 16C32G 近生产脱敏数据 PROD 生产环境 独立集群 × 2 AZ 10 节点 32C64G 真实数据 SLA 99.99% CI 构建 自动化测试 灰度审批 网络隔离策略 DEV/TEST 允许内部互访;STAGING 仅允许运维与审批流量;PROD 完全隔离,仅通过 API 网关暴露必要端口 制品仓库 (Harbor + Nexus) 集中监控与日志 (Prometheus + Loki)

3.4 环境配置管理

所有环境差异通过 ConfigMap 与 Secret 管理,禁止在代码中硬编码环境变量。推荐使用 Kustomize 或 Helm 进行多环境参数化部署。

# 目录结构示例:基于 Kustomize 的环境配置
event-sourcing-deploy/
├── base/
│   ├── kustomization.yaml
│   ├── deployment.yaml
│   ├── service.yaml
│   └── configmap.yaml
├── overlays/
│   ├── dev/
│   │   ├── kustomization.yaml
│   │   ├── configmap-patch.yaml
│   │   └── resource-limits.yaml
│   ├── test/
│   │   ├── kustomization.yaml
│   │   ├── configmap-patch.yaml
│   │   └── hpa.yaml
│   ├── staging/
│   │   ├── kustomization.yaml
│   │   ├── configmap-patch.yaml
│   │   └── ingress-tls.yaml
│   └── prod/
│       ├── kustomization.yaml
│       ├── configmap-patch.yaml
│       ├── pdb.yaml
│       └── network-policy.yaml
关键提醒: 生产环境的 Secret(如数据库密码、Kafka 证书)必须使用外部密钥管理服务(如 AWS Secrets Manager、Vault),禁止以明文形式存储在 Git 仓库中。STAGING 与 PROD 的密钥应完全独立,不可复用。

3.5 环境生命周期与清理策略

为控制成本并避免数据残留,各环境应设置自动化的生命周期管理规则。

  • DEV: 每晚 22:00 自动销毁非保留命名空间,次日 08:00 按需重建。数据保留不超过 7 天。
  • TEST: 每次测试任务完成后触发清理脚本,数据库每日凌晨 03:00 重置为基线快照。
  • STAGING: 灰度验证结束后保留 48 小时用于回滚验证,之后自动释放节点资源,仅保留基础架构。
  • PROD: 不自动销毁,但需定期(每月)进行灾难恢复演练,验证备份有效性。
自动化工具链: 使用 Terraform 管理云资源生命周期,结合 Jenkins Pipeline 或 Argo Workflows 实现环境创建、部署、测试、销毁的全流程自动化。建议为每个环境创建独立的 Terraform Workspace。