系列专题:通用系统批量比对工具设计(第三篇:系统架构设计)
一、架构设计目标
- 高性能:单表亿级数据处理 ≤ 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
三、架构模块详解
用户界面层(Web UI / API)
- 功能:
- Web UI:提供任务配置界面(数据源选择、转换规则编辑)、进度展示和结果查看。
- API:支持脚本化调用任务。
- 技术:Angular + WebSocket + Chart.js。
- 数据流:用户通过UI提交任务,实时接收进度反馈。
- 功能:
任务调度层(Distributed Scheduler)
- 功能:
- 负责任务分片与分配,支持分布式调度。
- 提供任务容错与重试机制。
- 技术选项:
- XXL-JOB:轻量级分片调度。
- 自研:基于Kafka发布任务,Hazelcast实现节点竞争。
- 数据流:接收用户任务,分解为子任务分发到微服务。
- 功能:
任务管理服务(Task Manager)
- 功能:
- 任务状态管理(创建、运行、完成)。
- 协调数据加载、比对和结果生成服务。
- 技术:Spring Boot + PostgreSQL(存储任务元数据)。
- 数据流:通过REST API调用下游服务,跟踪任务进度。
- 功能:
数据加载服务(Smart Data Loader)
- 功能:
- 从多种数据源(DB、File、API)加载数据。
- 根据配置执行智能转换(如字段映射、类型转换)。
- 技术:Spring Boot + Drools(规则引擎)+ Netty(API加载)。
- 实现:
- 流式加载:避免全量内存占用。
- 动态规则:Drools解析JSON配置(如
{"source": "id", "target": "userId", "transform": "toString"}
)。
- 数据流:读取原始数据,转换为统一格式后传递给比对服务。
- 功能:
比对服务(Compare Engine)
- 功能:
- 执行核心比对逻辑(新增、删除、修改)。
- 支持流式比对与分片处理。
- 调用标签服务添加标记。
- 技术:Spring Batch(分片与并行)+ Disruptor(异步处理)。
- 实现:
- 分片:每1000万条一shard,16线程并行。
- 流式比对:逐条比较,避免内存溢出。
- 数据流:接收两组转换后的数据流,输出差异结果。
- 功能:
标签服务(Tag Manager)
- 功能:
- 动态添加标签(如“异常”、“待核查”)。
- 支持手动与自动规则(如“差异率>10%”)。
- 技术:Spring Boot + PostgreSQL(标签存储)。
- 数据流:接收比对结果,添加标签后返回。
- 功能:
批量处理层(Spring Batch / Flow)
- 功能:
- 实现亿级数据的分片与并行处理。
- 支持流式读取与写入。
- 技术:Spring Batch + Spring Data Flow。
- 实现:
- Chunk模式:每次处理10万条。
- 分片:多节点协作。
- 数据流:将比对任务分解为小块,分布式执行。
- 功能:
消息队列与计算节点(Kafka / Hazelcast)
- 功能:
- Kafka:分发任务分片,确保高吞吐量。
- Hazelcast:分布式锁与缓存,同步节点状态。
- 实现:
- 任务分片通过Kafka Topic广播。
- 节点通过Hazelcast竞争执行权。
- 数据流:任务从队列流入计算节点,执行后反馈状态。
- 功能:
结果服务(Result Generator)
- 功能:
- 生成差异报告(HTML、Excel)和统计指标(匹配率、差异率)。
- 存储结果到持久化层。
- 技术:Spring Boot + Apache POI + Elasticsearch(统计)。
- 数据流:接收比对结果,生成报告并存储。
- 功能:
存储层(PostgreSQL / Elasticsearch / MinIO)
- 功能:
- PostgreSQL:存储任务元数据和标签。
- Elasticsearch:快速查询差异与统计指标。
- MinIO:存储大文件(如输入文件、报告)。
- 数据流:结果持久化后供用户查询。
- 功能:
通知服务(WebSocket / Email)
- 功能:
- 实时推送任务进度(如“已完成50%”)。
- 超长时间提醒(如任务超5分钟未完成)。
- 技术:Spring WebSocket + JavaMail。
- 数据流:从任务管理服务获取状态,推送至前端。
- 功能:
四、数据流与协作机制
任务提交与调度
- 用户通过UI/API提交任务,调度层分解为子任务,分发到Kafka。
数据加载与转换
- 数据加载服务从数据源读取原始数据,使用Drools解析转换规则,生成统一格式流。
比对与标签
- 比对服务接收两组数据流,Spring Batch分片处理,调用标签服务添加标记,输出差异结果。
结果生成与通知
- 结果服务汇总差异,生成报告并存储,通知服务实时推送进度。
分布式协作
- Kafka分发任务,Hazelcast同步状态,多节点并行执行,确保无重复计算。
五、性能与扩展性保障
亿级数据性能(≤ 2分钟)
- 分片:1亿条分10个shard,每shard 1000万条。
- 并行:16线程单节点,或多节点扩展。
- 吞吐量:假设100MB/s I/O,单节点约160万条/秒,总耗时约62秒。
扩展性
- 新数据源:扩展
SmartDataLoader
实现类。 - 新规则:添加Drools规则文件。
- 新节点:Kubernetes动态扩容。
- 新数据源:扩展
六、下一步规划
下一篇文章将聚焦于模块设计与实现,提供核心模块的代码示例(如智能转换、比对引擎、分布式调度),并细化亿级数据处理的优化策略。
总结
本篇设计了一个微服务架构,利用Spring Batch、Kafka和Hazelcast实现亿级数据的高效处理,Drools支持智能转换,WebSocket提供人性化体验。架构模块化且可扩展,满足性能与分布式需求。