4、集成环境搭建:集成测试环境硬件/软件要求、Docker容器化部署、网络与数据库配置

集成环境是Testing驱动审批流回放验证的物理基础。本章从硬件/软件选型、Docker容器化部署、网络与数据库配置三个维度,给出可复现的搭建规范。所有配置均以“单机多容器+外部数据库”为基准拓扑,兼顾成本与回放性能。

4.1 硬件与软件要求

集成测试环境不需要生产级冗余,但必须保证CPU、内存、磁盘IO能够支撑至少3路并发回放线程。下表列出推荐配置与最低配置的差异:

资源项 最低配置 推荐配置 说明
CPU 4核 x86_64 8核 (支持超线程) 回放引擎对CPU指令集无特殊要求,但高频交易场景建议开启睿频
内存 16 GB 32 GB 每个容器预留2~4 GB,数据库独占8 GB以上
磁盘 200 GB SSD 500 GB NVMe 回放日志与数据库WAL日志对随机写延迟敏感
操作系统 Ubuntu 20.04 / CentOS 7.9 Ubuntu 22.04 LTS 内核版本 ≥ 5.4,支持cgroup v2
Docker 20.10.x 24.0.x + Compose v2 必须启用BuildKit和IPv6支持(可选)
数据库 PostgreSQL 13 PostgreSQL 16 需开启 logical replication 和 pg_stat_statements
选型建议: 如果团队使用Mac M系列芯片,建议在Docker中通过 --platform linux/amd64 运行x86镜像,避免ARM与x86混合部署带来的网络库兼容问题。

4.2 Docker容器化部署

采用Docker Compose编排四个核心服务:回放引擎、审批流模拟器、配置中心、监控代理。每个容器均绑定资源限制与健康检查。

version: '3.8'
services:
  replay-engine:
    image: registry.example.com/replay-engine:4.2.0
    container_name: re-engine
    ports:
      - "8080:8080"
    environment:
      - DB_HOST=postgres
      - DB_PORT=5432
      - DB_NAME=replaydb
      - REPLAY_THREADS=4
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 4G
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]
      interval: 15s
      retries: 3
    depends_on:
      postgres:
        condition: service_healthy

  approval-simulator:
    image: registry.example.com/approval-sim:3.1.0
    container_name: app-sim
    ports:
      - "9090:9090"
    environment:
      - SIM_MODE=replay
      - APPROVAL_RULES_PATH=/config/rules.json
    volumes:
      - ./config/rules.json:/config/rules.json:ro
    deploy:
      resources:
        limits:
          cpus: '1.5'
          memory: 2G

  config-center:
    image: consul:1.18
    container_name: config-ctr
    ports:
      - "8500:8500"
    command: agent -server -bootstrap-expect=1 -client=0.0.0.0

  postgres:
    image: postgres:16-alpine
    container_name: pg-replay
    environment:
      POSTGRES_DB: replaydb
      POSTGRES_USER: replay
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - pgdata:/var/lib/postgresql/data
      - ./init-scripts:/docker-entrypoint-initdb.d:ro
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 8G
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U replay -d replaydb"]
      interval: 10s

volumes:
  pgdata:
部署要点:
  • 所有容器使用 depends_on + condition: service_healthy 确保启动顺序。
  • 数据库密码通过环境变量 ${DB_PASSWORD} 注入,禁止硬编码。
  • 审批流规则文件 rules.json 以只读卷挂载,支持热更新。

下图展示容器间的调用关系与端口映射:

Docker容器化部署拓扑 回放引擎 :8080 审批流模拟器 :9090 配置中心 :8500 PostgreSQL 16 :5432 虚线路径:回放引擎通过配置中心获取审批规则,再写入数据库

4.3 网络配置

集成环境使用Docker内置的bridge网络,并显式定义子网与网关,避免与宿主机网段冲突。同时为每个服务分配固定IP,方便监控系统采集指标。

networks:
  replay-net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.28.0.0/16
          gateway: 172.28.0.1

services:
  replay-engine:
    networks:
      replay-net:
        ipv4_address: 172.28.0.10
  approval-simulator:
    networks:
      replay-net:
        ipv4_address: 172.28.0.11
  config-center:
    networks:
      replay-net:
        ipv4_address: 172.28.0.12
  postgres:
    networks:
      replay-net:
        ipv4_address: 172.28.0.20
网络避坑:
  • 不要使用 network_mode: host,会导致端口冲突且无法隔离回放流量。
  • 如果宿主机防火墙开启,需放行 172.28.0.0/16 段内的容器间通信。
  • 回放引擎与数据库之间的TCP连接数建议限制在50以内,避免连接池膨胀。

4.4 数据库配置

PostgreSQL是回放数据的核心存储。以下配置在 postgresql.conf 中必须调整,以匹配回放场景的高吞吐写入:

参数 推荐值 作用
max_connections 100 回放引擎+监控代理的连接上限
shared_buffers 2 GB 缓存回放过程中的审批流快照
work_mem 64 MB 排序与哈希聚合操作的内存
wal_level logical 支持回放进度订阅与增量同步
max_replication_slots 5 预留槽位给回放进度追踪
track_io_timing on 采集磁盘IO延迟,用于性能调优
pg_stat_statements.track all 记录所有SQL执行统计

初始化脚本 init.sql 需创建回放专用的表结构与索引:

CREATE TABLE IF NOT EXISTS replay_events (
    event_id BIGSERIAL PRIMARY KEY,
    flow_id VARCHAR(64) NOT NULL,
    step_name VARCHAR(128) NOT NULL,
    event_type VARCHAR(32) NOT NULL,
    payload JSONB,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_replay_events_flow_id ON replay_events(flow_id);
CREATE INDEX idx_replay_events_created_at ON replay_events(created_at);

CREATE TABLE IF NOT EXISTS replay_progress (
    flow_id VARCHAR(64) PRIMARY KEY,
    last_event_id BIGINT NOT NULL,
    status VARCHAR(16) DEFAULT 'running',
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- 加载pg_stat_statements扩展
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
性能基线: 在推荐配置下,单条回放事件写入延迟应低于2ms,批量插入(100条/批)吞吐量不低于5000 TPS。如果连续三次采样超过5ms,需要检查磁盘IO或调整 wal_buffers 至16 MB。

下图展示数据库连接池与回放引擎的交互流程:

数据库连接与回放写入流程 回放引擎 连接池(10~20) PgBouncer 事务级池化 PostgreSQL WAL + 索引 连接池策略 回放引擎 → PgBouncer(事务级复用)→ PostgreSQL(最大100连接) 避免回放引擎直连数据库,防止连接风暴导致WAL写入抖动

4.5 环境验证清单

搭建完成后,按以下步骤验证环境可用性:

  1. 执行 docker compose ps 确认所有容器状态为 Up (healthy)。
  2. 使用 curl http://localhost:8080/actuator/health 检查回放引擎健康端点。
  3. 连接数据库并执行 SELECT count(*) FROM replay_events; 返回0行。
  4. 运行一次最小回放测试:docker exec re-engine ./replay --dry-run,观察日志无ERROR。
  5. 检查 pg_stat_statements 视图,确认回放引擎的SQL调用已被记录。
快速排障: 如果容器启动后立即退出,执行 docker logs <container_name> --tail 50 查看错误堆栈。常见原因包括数据库密码错误、端口被占用、挂载卷权限不足。