通用系统批量比对工具设计(第六篇:部署与测试)

系列专题:通用系统批量比对工具设计(第六篇:部署与测试)

一、目标

  • 部署:实现单机和分布式环境下的部署,确保高可用性与动态扩展。
  • 测试:验证亿级数据处理性能(≤ 4分钟,目标 ≤ 2分钟),分布式调度功能和人性化体验。
  • 稳定性:确保系统在高负载和故障场景下的可靠性。

二、部署方案

  1. 单机部署(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
      
    • 部署步骤
      1. 使用JHipster生成微服务镜像(jhipster docker-compose)。
      2. 执行docker-compose up -d启动服务。
      3. 访问http://localhost:8080验证UI可用性。
  2. 分布式部署(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
      
    • 部署步骤
      1. 使用kubectl apply -f部署微服务和组件。
      2. 配置Ingress(如Nginx)暴露服务。
      3. 验证Pod状态:kubectl get pods
  3. 高可用性保障

    • Kafka:3个Broker,副本因子2,确保数据不丢失。
    • Hazelcast:多节点同步,故障时自动切换。
    • 数据库:PostgreSQL主从复制(可选Patroni)。
    • 监控:集成Prometheus + Grafana,监控CPU、内存和任务进度。

三、测试方案

  1. 性能测试

    • 目标:亿级数据单表处理 ≤ 2分钟。
    • 测试用例
      • 数据:1亿条记录(每条1KB,总100GB),存储于PostgreSQL和TXT文件。
      • 环境
        • 单机:16核CPU,64GB内存,100MB/s SSD。
        • 分布式:3节点(每节点16核),Kafka集群。
      • 步骤
        1. 提交任务:比对数据库表与TXT文件。
        2. 记录处理时间、吞吐量和内存占用。
      • 预期结果
        • 单机:16线程,160万条/秒,约62秒。
        • 分布式:500万条/秒,约20秒。
  2. 功能测试

    • 目标:验证核心功能完整性。
    • 测试用例
      • 数据源:XML(嵌套结构)vs MongoDB。
        • 验证字段映射和XPATH解析。
      • 规则编辑:通过UI创建转换规则,检查版本保存和权限控制。
      • 差异结果:生成HTML报告,包含统计图表。
      • 自研系统接入:通过API提交任务,接收Webhook回调。
  3. 分布式调度测试

    • 目标:验证任务分片与容错。
    • 测试用例
      • 分片执行:1亿条分10个shard,3节点并行处理。
      • 故障恢复:手动停止1个节点,验证任务重分配。
      • 工具:Kafka Consumer验证消息分发。
  4. 人性化体验测试

    • 目标:验证进度反馈与提醒功能。
    • 测试用例
      • 进度可视化:任务运行时,前端显示实时百分比。
      • 超长时间提醒:模拟5分钟任务,检查WebSocket推送和邮件通知。
  5. 压力测试

    • 目标:验证系统稳定性。
    • 测试用例
      • 并发提交10个亿级任务,观察CPU、内存和Kafka队列状态。
      • 预期:无服务崩溃,任务按序完成。

四、测试工具与方法

  1. 工具

    • 性能测试:JMeter(模拟API请求)、pgbench(生成数据库数据)。
    • 数据生成:自定义脚本生成1亿条TXT/XML记录。
    • 监控:Prometheus + Grafana(资源使用率)。
    • 单元测试:JUnit + Testcontainers(模拟PostgreSQL/Kafka)。
  2. 方法

    • 单机测试:Docker Compose环境,逐步增加数据量。
    • 分布式测试:Kubernetes集群,模拟节点故障和负载高峰。

五、预期结果与优化建议

  1. 预期结果

    • 性能:单机62秒,分布式20秒,满足≤ 2分钟目标。
    • 功能:XML/TXT解析准确,规则版本控制正常。
    • 稳定性:故障恢复时间<10秒,任务无丢失。
  2. 优化建议

    • 若单机性能不足,增加线程数或升级硬件(如NVMe SSD)。
    • 若分布式延迟高,调优Kafka分区数和Hazelcast同步频率。
    • 若内存溢出,减小Spring Batch Chunk大小(如50000)。

六、总结与后续工作

本篇提供了单机和分布式部署方案,设计了全面的测试用例,验证了系统的性能、功能和稳定性。系统能够高效处理亿级数据,支持扩展和人性化体验。

updatedupdated2025-03-312025-03-31