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以只读卷挂载,支持热更新。
下图展示容器间的调用关系与端口映射:
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。
下图展示数据库连接池与回放引擎的交互流程:
4.5 环境验证清单
搭建完成后,按以下步骤验证环境可用性:
- 执行
docker compose ps确认所有容器状态为 Up (healthy)。 - 使用
curl http://localhost:8080/actuator/health检查回放引擎健康端点。 - 连接数据库并执行
SELECT count(*) FROM replay_events;返回0行。 - 运行一次最小回放测试:
docker exec re-engine ./replay --dry-run,观察日志无ERROR。 - 检查
pg_stat_statements视图,确认回放引擎的SQL调用已被记录。
快速排障: 如果容器启动后立即退出,执行
docker logs <container_name> --tail 50 查看错误堆栈。常见原因包括数据库密码错误、端口被占用、挂载卷权限不足。