系列专题:通用系统批量比对工具设计(第六篇:部署与测试)
一、目标
- 部署:实现单机和分布式环境下的部署,确保高可用性与动态扩展。
- 测试:验证亿级数据处理性能(≤ 4分钟,目标 ≤ 2分钟),分布式调度功能和人性化体验。
- 稳定性:确保系统在高负载和故障场景下的可靠性。
二、部署方案
单机部署(Docker Compose)
- 适用场景:开发、测试或中小规模生产环境。
- 架构:
- 微服务:任务管理、数据加载、比对、结果生成。
- 组件:PostgreSQL、Kafka、Hazelcast、MinIO。
- 配置文件(docker-compose.yml):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
version: '3.8' services: task-manager: image: task-manager:latest ports: - "8080:8080" environment: - SPRING_DATASOURCE_URL=jdbc:postgresql://postgresql:5432/compare_db - KAFKA_BOOTSTRAP_SERVERS=kafka:9092 depends_on: - postgresql - kafka data-loader: image: data-loader:latest environment: - KAFKA_BOOTSTRAP_SERVERS=kafka:9092 depends_on: - kafka compare-engine: image: compare-engine:latest environment: - KAFKA_BOOTSTRAP_SERVERS=kafka:9092 depends_on: - kafka result-generator: image: result-generator:latest environment: - MINIO_URL=http://minio:9000 depends_on: - minio postgresql: image: postgres:15 environment: - POSTGRES_DB=compare_db - POSTGRES_USER=admin - POSTGRES_PASSWORD=password ports: - "5432:5432" kafka: image: confluentinc/cp-kafka:latest ports: - "9092:9092" environment: - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 depends_on: - zookeeper zookeeper: image: confluentinc/cp-zookeeper:latest ports: - "2181:2181" minio: image: minio/minio:latest ports: - "9000:9000" environment: - MINIO_ROOT_USER=admin - MINIO_ROOT_PASSWORD=password command: server /data
- 部署步骤:
- 使用JHipster生成微服务镜像(
jhipster docker-compose
)。 - 执行
docker-compose up -d
启动服务。 - 访问
http://localhost:8080
验证UI可用性。
- 使用JHipster生成微服务镜像(
分布式部署(Kubernetes)
- 适用场景:大规模生产环境,支持亿级数据和高并发。
- 架构:
- 微服务Pod:动态扩展(HPA)。
- Kafka集群:3个Broker + Zookeeper。
- Hazelcast集群:3节点同步。
- MinIO:分布式对象存储。
- 配置文件(示例:task-manager-deployment.yaml):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
apiVersion: apps/v1 kind: Deployment metadata: name: task-manager spec: replicas: 3 selector: matchLabels: app: task-manager template: metadata: labels: app: task-manager spec: containers: - name: task-manager image: task-manager:latest ports: - containerPort: 8080 env: - name: SPRING_DATASOURCE_URL value: "jdbc:postgresql://postgresql:5432/compare_db" - name: KAFKA_BOOTSTRAP_SERVERS value: "kafka:9092" --- apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: task-manager-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: task-manager minReplicas: 3 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70
- 部署步骤:
- 使用
kubectl apply -f
部署微服务和组件。 - 配置Ingress(如Nginx)暴露服务。
- 验证Pod状态:
kubectl get pods
。
- 使用
高可用性保障
- Kafka:3个Broker,副本因子2,确保数据不丢失。
- Hazelcast:多节点同步,故障时自动切换。
- 数据库:PostgreSQL主从复制(可选Patroni)。
- 监控:集成Prometheus + Grafana,监控CPU、内存和任务进度。
三、测试方案
性能测试
- 目标:亿级数据单表处理 ≤ 2分钟。
- 测试用例:
- 数据:1亿条记录(每条1KB,总100GB),存储于PostgreSQL和TXT文件。
- 环境:
- 单机:16核CPU,64GB内存,100MB/s SSD。
- 分布式:3节点(每节点16核),Kafka集群。
- 步骤:
- 提交任务:比对数据库表与TXT文件。
- 记录处理时间、吞吐量和内存占用。
- 预期结果:
- 单机:16线程,160万条/秒,约62秒。
- 分布式:500万条/秒,约20秒。
功能测试
- 目标:验证核心功能完整性。
- 测试用例:
- 数据源:XML(嵌套结构)vs MongoDB。
- 验证字段映射和XPATH解析。
- 规则编辑:通过UI创建转换规则,检查版本保存和权限控制。
- 差异结果:生成HTML报告,包含统计图表。
- 自研系统接入:通过API提交任务,接收Webhook回调。
- 数据源:XML(嵌套结构)vs MongoDB。
分布式调度测试
- 目标:验证任务分片与容错。
- 测试用例:
- 分片执行:1亿条分10个shard,3节点并行处理。
- 故障恢复:手动停止1个节点,验证任务重分配。
- 工具:Kafka Consumer验证消息分发。
人性化体验测试
- 目标:验证进度反馈与提醒功能。
- 测试用例:
- 进度可视化:任务运行时,前端显示实时百分比。
- 超长时间提醒:模拟5分钟任务,检查WebSocket推送和邮件通知。
压力测试
- 目标:验证系统稳定性。
- 测试用例:
- 并发提交10个亿级任务,观察CPU、内存和Kafka队列状态。
- 预期:无服务崩溃,任务按序完成。
四、测试工具与方法
工具
- 性能测试:JMeter(模拟API请求)、pgbench(生成数据库数据)。
- 数据生成:自定义脚本生成1亿条TXT/XML记录。
- 监控:Prometheus + Grafana(资源使用率)。
- 单元测试:JUnit + Testcontainers(模拟PostgreSQL/Kafka)。
方法
- 单机测试:Docker Compose环境,逐步增加数据量。
- 分布式测试:Kubernetes集群,模拟节点故障和负载高峰。
五、预期结果与优化建议
预期结果
- 性能:单机62秒,分布式20秒,满足≤ 2分钟目标。
- 功能:XML/TXT解析准确,规则版本控制正常。
- 稳定性:故障恢复时间<10秒,任务无丢失。
优化建议
- 若单机性能不足,增加线程数或升级硬件(如NVMe SSD)。
- 若分布式延迟高,调优Kafka分区数和Hazelcast同步频率。
- 若内存溢出,减小Spring Batch Chunk大小(如50000)。
六、总结与后续工作
本篇提供了单机和分布式部署方案,设计了全面的测试用例,验证了系统的性能、功能和稳定性。系统能够高效处理亿级数据,支持扩展和人性化体验。