通用系统批量比对工具设计(第三篇:系统架构设计)

系列专题:通用系统批量比对工具设计(第三篇:系统架构设计)

一、架构设计目标

  • 高性能:单表亿级数据处理 ≤ 4分钟(目标 ≤ 2分钟),吞吐量 ≥ 50万条/秒。
  • 大数据支持:流式处理、分片与分布式计算。
  • 智能转换:动态规则解析与字段映射。
  • 分布式能力:支持任务调度与节点协作。
  • 人性化体验:实时反馈、进度可视化与超长时间提醒。

二、总体架构图

使用Mermaid绘制系统架构图如下:

graph TD
    A[用户界面<br>Web UI / API] -->|任务提交| B[任务调度层<br>Distributed Scheduler]
    A -->|实时反馈| L[通知服务<br>WebSocket / Email]
    B -->|任务分发| C[任务管理服务<br>Task Manager]
    C -->|REST调用| D[数据加载服务<br>Smart Data Loader]
    C -->|REST调用| E[比对服务<br>Compare Engine]
    C -->|REST调用| F[结果服务<br>Result Generator]
    D -->|数据读取| G[数据源<br>DB / File / API]
    D -->|转换规则| H[规则引擎<br>Drools]
    E -->|分片处理| I[批量处理层<br>Spring Batch / Flow]
    I -->|分布式协作| J[消息队列<br>Kafka]
    J -->|任务分配| K[计算节点<br>Hazelcast]
    E -->|标签管理| M[标签服务<br>Tag Manager]
    F -->|存储与分析| N[存储层<br>PostgreSQL / Elasticsearch / MinIO]
    F -->|输出| O[结果输出<br>HTML / Excel / Charts]
    L -->|进度更新| A

三、架构模块详解

  1. 用户界面层(Web UI / API)

    • 功能
      • Web UI:提供任务配置界面(数据源选择、转换规则编辑)、进度展示和结果查看。
      • API:支持脚本化调用任务。
    • 技术:Angular + WebSocket + Chart.js。
    • 数据流:用户通过UI提交任务,实时接收进度反馈。
  2. 任务调度层(Distributed Scheduler)

    • 功能
      • 负责任务分片与分配,支持分布式调度。
      • 提供任务容错与重试机制。
    • 技术选项
      • XXL-JOB:轻量级分片调度。
      • 自研:基于Kafka发布任务,Hazelcast实现节点竞争。
    • 数据流:接收用户任务,分解为子任务分发到微服务。
  3. 任务管理服务(Task Manager)

    • 功能
      • 任务状态管理(创建、运行、完成)。
      • 协调数据加载、比对和结果生成服务。
    • 技术:Spring Boot + PostgreSQL(存储任务元数据)。
    • 数据流:通过REST API调用下游服务,跟踪任务进度。
  4. 数据加载服务(Smart Data Loader)

    • 功能
      • 从多种数据源(DB、File、API)加载数据。
      • 根据配置执行智能转换(如字段映射、类型转换)。
    • 技术:Spring Boot + Drools(规则引擎)+ Netty(API加载)。
    • 实现
      • 流式加载:避免全量内存占用。
      • 动态规则:Drools解析JSON配置(如{"source": "id", "target": "userId", "transform": "toString"})。
    • 数据流:读取原始数据,转换为统一格式后传递给比对服务。
  5. 比对服务(Compare Engine)

    • 功能
      • 执行核心比对逻辑(新增、删除、修改)。
      • 支持流式比对与分片处理。
      • 调用标签服务添加标记。
    • 技术:Spring Batch(分片与并行)+ Disruptor(异步处理)。
    • 实现
      • 分片:每1000万条一shard,16线程并行。
      • 流式比对:逐条比较,避免内存溢出。
    • 数据流:接收两组转换后的数据流,输出差异结果。
  6. 标签服务(Tag Manager)

    • 功能
      • 动态添加标签(如“异常”、“待核查”)。
      • 支持手动与自动规则(如“差异率>10%”)。
    • 技术:Spring Boot + PostgreSQL(标签存储)。
    • 数据流:接收比对结果,添加标签后返回。
  7. 批量处理层(Spring Batch / Flow)

    • 功能
      • 实现亿级数据的分片与并行处理。
      • 支持流式读取与写入。
    • 技术:Spring Batch + Spring Data Flow。
    • 实现
      • Chunk模式:每次处理10万条。
      • 分片:多节点协作。
    • 数据流:将比对任务分解为小块,分布式执行。
  8. 消息队列与计算节点(Kafka / Hazelcast)

    • 功能
      • Kafka:分发任务分片,确保高吞吐量。
      • Hazelcast:分布式锁与缓存,同步节点状态。
    • 实现
      • 任务分片通过Kafka Topic广播。
      • 节点通过Hazelcast竞争执行权。
    • 数据流:任务从队列流入计算节点,执行后反馈状态。
  9. 结果服务(Result Generator)

    • 功能
      • 生成差异报告(HTML、Excel)和统计指标(匹配率、差异率)。
      • 存储结果到持久化层。
    • 技术:Spring Boot + Apache POI + Elasticsearch(统计)。
    • 数据流:接收比对结果,生成报告并存储。
  10. 存储层(PostgreSQL / Elasticsearch / MinIO)

    • 功能
      • PostgreSQL:存储任务元数据和标签。
      • Elasticsearch:快速查询差异与统计指标。
      • MinIO:存储大文件(如输入文件、报告)。
    • 数据流:结果持久化后供用户查询。
  11. 通知服务(WebSocket / Email)

    • 功能
      • 实时推送任务进度(如“已完成50%”)。
      • 超长时间提醒(如任务超5分钟未完成)。
    • 技术:Spring WebSocket + JavaMail。
    • 数据流:从任务管理服务获取状态,推送至前端。

四、数据流与协作机制

  1. 任务提交与调度

    • 用户通过UI/API提交任务,调度层分解为子任务,分发到Kafka。
  2. 数据加载与转换

    • 数据加载服务从数据源读取原始数据,使用Drools解析转换规则,生成统一格式流。
  3. 比对与标签

    • 比对服务接收两组数据流,Spring Batch分片处理,调用标签服务添加标记,输出差异结果。
  4. 结果生成与通知

    • 结果服务汇总差异,生成报告并存储,通知服务实时推送进度。
  5. 分布式协作

    • Kafka分发任务,Hazelcast同步状态,多节点并行执行,确保无重复计算。

五、性能与扩展性保障

  1. 亿级数据性能(≤ 2分钟)

    • 分片:1亿条分10个shard,每shard 1000万条。
    • 并行:16线程单节点,或多节点扩展。
    • 吞吐量:假设100MB/s I/O,单节点约160万条/秒,总耗时约62秒。
  2. 扩展性

    • 新数据源:扩展SmartDataLoader实现类。
    • 新规则:添加Drools规则文件。
    • 新节点:Kubernetes动态扩容。

六、下一步规划

下一篇文章将聚焦于模块设计与实现,提供核心模块的代码示例(如智能转换、比对引擎、分布式调度),并细化亿级数据处理的优化策略。


总结

本篇设计了一个微服务架构,利用Spring Batch、Kafka和Hazelcast实现亿级数据的高效处理,Drools支持智能转换,WebSocket提供人性化体验。架构模块化且可扩展,满足性能与分布式需求。

updatedupdated2025-03-312025-03-31