2. 环境规划与架构设计:整体技术栈选型与网络拓扑

本章聚焦于支撑“批次追溯数据在材料申请流程”的底层基础设施与架构决策。一个高可用的追溯系统,必须从数据库、消息队列、应用服务器三个核心层面进行严谨选型,并设计清晰的网络拓扑与灾备策略。以下内容将直接指导后续章节的部署与配置实战。

2.1 整体技术栈选型

技术栈的选型遵循“生产级可用、社区活跃、运维成本可控”的原则。针对批次追溯场景中高频的写入(批次入库)与查询(材料申请追溯),我们采用以下组合:

层级 技术组件 版本建议 选型理由
数据库 PostgreSQL + TimescaleDB 扩展 PostgreSQL 15+ / TimescaleDB 2.12+ 原生支持时序数据分区,批次追溯数据天然带时间戳;强大的 JSONB 支持存储批次属性;流复制实现高可用。
消息队列 RabbitMQ 3.12+ 支持死信队列、延迟消息(用于批次过期提醒);AMQP 协议成熟,与 Spring Boot 集成度高;集群模式满足高可用。
应用服务器 Tomcat (内嵌于 Spring Boot) + Nginx Tomcat 10 / Nginx 1.24+ Spring Boot 内嵌 Tomcat 简化部署;Nginx 作为反向代理与负载均衡,处理 SSL 终结与静态资源缓存。
缓存 Redis 7.0+ 缓存批次基础信息与频繁查询的追溯路径,降低数据库压力;使用 Redis Cluster 或 Sentinel 保障高可用。
选型提示: 如果团队对时序数据库运维经验不足,可退化为 PostgreSQL 原生分区表 + 定期清理策略。但 TimescaleDB 的自动分区与压缩功能,在批次数据量超过 5000 万行时优势明显。

2.2 网络拓扑设计

网络拓扑采用经典的三层架构:接入层、应用层、数据层。所有内部服务调用均通过内网 VLAN 隔离,禁止数据库与消息队列直接暴露在公网。

网络拓扑架构图(三层隔离模型) 接入层(DMZ 区域) Nginx 负载均衡 SSL 终结节点 WAF 防护 应用层(内网服务区) 应用节点 1 应用节点 2 应用节点 3 Redis 缓存集群 数据层(核心数据区) PostgreSQL 主库 RabbitMQ 集群 PostgreSQL 从库
网络隔离要点:
  • 接入层:Nginx 只开放 443 端口,配置 IP 白名单与频率限制。
  • 应用层:应用节点只对内网开放 8080 端口,通过 Nginx upstream 进行健康检查。
  • 数据层:PostgreSQL 监听内网 IP,pg_hba.conf 只允许应用层网段访问;RabbitMQ 管理端口(15672)仅限运维跳板机访问。

2.3 高可用与灾备策略

批次追溯数据一旦丢失将导致供应链合规风险,因此高可用与灾备必须覆盖所有核心组件。我们采用“同城双活 + 异地灾备”的混合策略。

2.3.1 各组件高可用方案

组件 高可用模式 切换时间 RTO 数据丢失 RPO
PostgreSQL 流复制(1主2从)+ Patroni 自动故障转移 < 30 秒 < 1 秒(同步复制)
RabbitMQ 镜像队列集群(3节点) < 10 秒 0(队列内消息不丢失)
Redis Redis Sentinel 或 Cluster(3主3从) < 15 秒 < 1 秒(AOF + 主从同步)
Nginx Keepalived + 虚拟 IP(主备模式) < 5 秒 无状态,不涉及数据丢失

2.3.2 灾备策略

灾备分为两个层级:同城灾备与异地灾备。同城灾备用于应对机房级故障,异地灾备用于应对区域性灾难。

  • 同城灾备:在同一个城市的不同可用区部署一套完整的从库与消息队列节点。PostgreSQL 采用异步流复制,RPO 控制在 5 秒以内。RabbitMQ 通过 Shovel 或 Federation 插件跨可用区同步消息。
  • 异地灾备:在距离主中心 500 公里以上的地域部署一套冷备环境。每天凌晨通过 pg_dump 进行全量备份,并归档 WAL 日志到对象存储(如 MinIO)。灾备切换时,需要手动拉起数据库并恢复最近一次全量备份 + WAL 回放。
高可用与灾备架构图 主中心(可用区 A) Nginx 主 应用主节点 PG 主库 MQ 主节点 Redis 主 同城灾备(可用区 B) Nginx 备 应用备节点 PG 从库 MQ 镜像 Redis 从 流复制(异步) MQ 镜像同步 异地灾备:每日 WAL 归档 → 对象存储
灾备演练提醒: 每季度至少执行一次灾备切换演练。重点验证:1) Patroni 是否能在 30 秒内选举新主库;2) 应用连接池是否自动切换到新主库;3) 异地灾备的 WAL 回放时间是否在可接受范围内(建议不超过 2 小时)。

2.4 环境规划清单

在进入具体部署前,请根据下表核对环境资源是否就绪:

资源类型 规格要求 数量 备注
虚拟机 / 物理机 8 vCPU / 32 GB RAM / 500 GB SSD 6 台 3 台用于应用 + 中间件,3 台用于数据库集群
网络 内网千兆,公网带宽 ≥ 100 Mbps 1 个 VLAN 应用层与数据层严格隔离
存储 SSD 持久化卷,IOPS ≥ 3000 3 块 数据库主库独立挂载,从库可共用
域名 & 证书 泛域名 SSL 证书 1 张 用于 Nginx 反向代理