3. Development 环境定义:开发环境与生产环境的差异
在分布式事务鉴权拦截的移植适配工作中,Development 环境的定义直接决定了本地验证的有效性与生产部署的可靠性。开发环境与生产环境在资源约束、网络拓扑、服务发现、存储持久化等方面存在本质差异,理解这些差异是后续移植适配的前提。
3.1 核心差异对比
| 维度 | 开发环境 (Local Dev) | 生产环境 (Production) | 移植适配关注点 |
|---|---|---|---|
| 资源规模 | 单机/少量容器,CPU/内存有限 | 多节点集群,弹性伸缩 | 鉴权拦截器需支持资源降级与熔断 |
| 服务发现 | Docker Compose 内部 DNS / 固定 IP | K8s Service / 注册中心 (Nacos/Eureka) | 拦截器需适配动态端点解析 |
| 网络模型 | 扁平网络,端口映射 | Overlay 网络,CNI 插件,网络策略 | 分布式事务上下文透传需考虑网络延迟 |
| 存储持久化 | 容器卷挂载 / 临时数据 | PV/PVC,分布式存储 (Ceph/OSS) | 鉴权 Token 与事务日志的持久化策略 |
| 配置管理 | 环境变量 / .env 文件 | ConfigMap / Secret / 配置中心 | 鉴权密钥与事务超时配置的分离 |
| 可观测性 | 容器日志 / 简单链路追踪 | Prometheus + Grafana + 全链路追踪 | 拦截器需输出结构化指标与 TraceId |
移植适配原则:开发环境应尽可能模拟生产环境的网络拓扑与配置结构,但允许在资源规格、持久化方案上做简化。鉴权拦截器在开发环境中通过
@Profile("dev") 启用本地降级策略,在生产环境通过 @Profile("prod") 启用完整校验链路。
3.2 本地 Docker Compose 环境架构
Docker Compose 是开发阶段最常用的多容器编排工具,适用于单机模拟微服务拓扑。下图展示了包含分布式事务协调器、鉴权服务、业务服务 A/B 的本地开发环境架构。
本地开发建议:使用
docker-compose up -d 一键启动所有依赖服务。鉴权拦截器在开发阶段可配置 auth.skip=true 跳过 Token 校验,仅保留分布式事务上下文的传递逻辑,以加速调试。
3.3 云原生 K8s 环境架构
生产环境基于 Kubernetes 编排,服务以 Pod 形式运行,通过 Service 与 Ingress 暴露端点。下图展示了 K8s 环境下的分布式事务鉴权拦截部署拓扑。
3.4 环境移植适配清单
从 Docker Compose 移植到 K8s 时,分布式事务鉴权拦截器需要完成以下适配项:
- 服务发现适配:将
docker-compose中的固定服务名替换为 K8s Service DNS 名称(如auth-service.namespace.svc.cluster.local)。 - 配置注入适配:将
.env文件中的鉴权密钥、事务超时参数迁移至 K8s Secret 与 ConfigMap,通过spring.cloud.kubernetes.config自动加载。 - 网络策略适配:在 K8s 中定义 NetworkPolicy,仅允许网关 Pod 访问鉴权服务 8080 端口,业务 Pod 访问 Seata TC 的 8091 端口。
- 日志与指标适配:拦截器输出格式从
console调整为 JSON 结构化日志,并暴露/actuator/prometheus端点供 Prometheus 采集。 - 健康检查适配:为鉴权拦截器添加
livenessProbe与readinessProbe,确保 K8s 在拦截器未就绪时不会路由流量。
常见陷阱:开发环境中 Docker Compose 的容器重启策略为
unless-stopped,而 K8s 默认使用 Always 策略。鉴权拦截器在启动时若依赖 Seata TC 未就绪,应实现重试机制(如 Spring Retry 或 Resilience4j),避免 CrashLoopBackOff。
3.5 环境差异总结
| 适配维度 | Docker Compose 实现 | K8s 实现 | 拦截器改动量 |
|---|---|---|---|
| 服务调用 | http://auth-service:8080 |
http://auth-service:8080 (DNS 自动解析) |
低(仅需调整 namespace) |
| 配置管理 | application-dev.yml + .env |
ConfigMap + Secret |
中(需适配 Kubernetes 属性源) |
| 事务日志 | 本地文件挂载 ./logs:/logs |
PVC 持久卷 + 日志采集 Sidecar | 高(需实现日志轮转与采集) |
| 鉴权缓存 | 本地 Redis 容器 | Redis Sentinel 或 Cluster | 中(需配置哨兵地址) |
| 弹性伸缩 | 手动 docker-compose scale |
HPA 自动扩缩容 | 高(拦截器需无状态设计) |
移植策略:建议在开发环境中使用
kind 或 minikube 搭建本地 K8s 集群,提前暴露环境差异。鉴权拦截器的核心逻辑(Token 校验、事务上下文透传)保持与部署环境无关,仅通过 Spring Profile 切换配置源与服务发现策略。