Files
BigDataTool/docs/architecture.md
2025-08-05 23:27:25 +08:00

387 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DataTools Pro 系统架构设计
## 1. 系统概述
### 1.1 项目简介
DataTools Pro 是一个企业级数据处理与比对工具平台专注于提供高效、精准、可视化的数据分析解决方案。系统支持Cassandra数据库和Redis集群的数据比对分析具备分表查询、多主键查询、配置管理等企业级功能。
### 1.2 设计目标
- **高性能**: 支持大规模数据查询和比对处理
- **高可用**: 企业级稳定性和容错能力
- **易扩展**: 模块化设计,便于功能扩展
- **用户友好**: 直观的Web界面和操作体验
- **安全性**: 数据安全和访问控制
### 1.3 技术栈
```
前端技术栈:
├── 原生JavaScript (ES6+)
├── Bootstrap 5.1.3
├── Font Awesome 6.0.0
└── 模块化架构 (ES6 Modules)
后端技术栈:
├── Python 3.7+
├── Flask 2.3.3
├── Cassandra Driver 3.29.1
├── Redis Client
└── SQLite (配置存储)
数据存储:
├── Apache Cassandra (主要数据源)
├── Redis Cluster (缓存和数据源)
└── SQLite (配置和历史数据)
```
## 2. 整体架构
### 2.1 架构概览
```
┌─────────────────────────────────────────────────────────────┐
│ DataTools Pro 架构图 │
├─────────────────────────────────────────────────────────────┤
│ 前端层 (Frontend Layer) │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐│
│ │ 首页模块 │ │ Cassandra工具 │ │ Redis工具 ││
│ │ index.html │ │ db_compare.html │ │redis_compare.html││
│ └─────────────────┘ └─────────────────┘ └─────────────────┘│
│ │ │ │ │
│ ┌───────────────────────────────────────────────────────────┐│
│ │ 模块化JavaScript架构 ││
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐││
│ │ │ config │ │ utils │ │ api │ │ ui │ │ nav │││
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘││
│ └───────────────────────────────────────────────────────────┘│
├─────────────────────────────────────────────────────────────┤
│ 网关层 (Gateway Layer) │
│ ┌───────────────────────────────────────────────────────────┐│
│ │ Flask Web Server ││
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐││
│ │ │ 静态资源 │ │ API路由 │ │ 模板渲染 │││
│ │ │ 服务 │ │ 处理 │ │ 引擎 │││
│ │ └─────────────┘ └─────────────┘ └─────────────────────────┘││
│ └───────────────────────────────────────────────────────────┘│
├─────────────────────────────────────────────────────────────┤
│ 业务逻辑层 (Business Logic Layer) │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐│
│ │ 查询引擎 │ │ 数据比对 │ │ 配置管理 ││
│ │ QueryEngine │ │ DataComparison │ │ ConfigManager ││
│ └─────────────────┘ └─────────────────┘ └─────────────────┘│
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐│
│ │ 分表处理 │ │ 日志收集 │ │ Redis处理 ││
│ │ ShardingCalc │ │ QueryLogger │ │ RedisClient ││
│ └─────────────────┘ └─────────────────┘ └─────────────────┘│
├─────────────────────────────────────────────────────────────┤
│ 数据访问层 (Data Access Layer) │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐│
│ │ Cassandra │ │ Redis Cluster │ │ SQLite DB ││
│ │ 客户端 │ │ 客户端 │ │ 本地存储 ││
│ └─────────────────┘ └─────────────────┘ └─────────────────┘│
├─────────────────────────────────────────────────────────────┤
│ 数据存储层 (Data Storage Layer) │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐│
│ │ 生产环境 │ │ 测试环境 │ │ 配置数据 ││
│ │ Cassandra │ │ Cassandra │ │ SQLite ││
│ └─────────────────┘ └─────────────────┘ └─────────────────┘│
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 生产Redis │ │ 测试Redis │ │
│ │ 集群 │ │ 集群 │ │
│ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### 2.2 核心组件
#### 2.2.1 前端架构
```javascript
// 模块化架构设计
static/js/
├── app-main.js // 主应用入口,统一管理
└── modules/
├── config.js // 配置管理 - API端点、UI配置
├── utils.js // 工具函数 - 通用功能库
├── api.js // HTTP客户端 - 统一请求处理
├── ui.js // UI组件 - 提示、模态框、分页
└── navigation.js // 导航管理 - 路由、面包屑、快捷键
```
**设计模式**: 模块化 + 单例模式
**核心特性**:
- ES6模块化避免全局变量污染
- 统一的配置管理和错误处理
- 响应式UI组件和交互增强
- 键盘快捷键和无障碍支持
#### 2.2.2 后端架构
```python
# 模块化后端设计
modules/
├── api_routes.py // API路由定义和请求处理
├── cassandra_client.py // Cassandra数据库连接和操作
├── redis_client.py // Redis集群连接和操作
├── query_engine.py // 查询引擎和SQL构建
├── data_comparison.py // 数据比对算法和分析
├── sharding.py // 分表计算和时间戳处理
├── config_manager.py // 配置组管理和持久化
├── query_logger.py // 查询日志收集和管理
└── database.py // SQLite数据库操作
```
**设计模式**: 分层架构 + 依赖注入
**核心特性**:
- 单一职责原则,模块解耦
- 统一的错误处理和日志记录
- 连接池管理和资源优化
- 配置驱动的灵活部署
## 3. 核心功能模块
### 3.1 Cassandra数据比对模块
#### 3.1.1 功能特性
- **多模式查询**: 单表查询、分表查询、多主键查询
- **时间分表支持**: TWCS (Time Window Compaction Strategy) 分表计算
- **复合主键**: 支持多字段组合主键查询
- **字段级比对**: 支持包含/排除字段的精细化比较
- **JSON处理**: 智能JSON字段识别和深度比较
#### 3.1.2 核心算法
```python
# 分表索引计算算法
def calculate_shard_index(timestamp, interval_seconds, table_count):
"""
计算分表索引
- timestamp: 从Key中提取的时间戳
- interval_seconds: 分表时间间隔(默认604800秒=7天)
- table_count: 分表数量(默认14张表)
"""
return int(timestamp) // interval_seconds % table_count
# 时间戳提取算法
def extract_timestamp_from_key(key):
"""
从Key中提取时间戳 - 删除所有非数字字符
示例: 'wmid_1609459200' -> 1609459200
"""
return re.sub(r'\D', '', key)
# 复合主键匹配算法
def match_composite_key(record, key_fields, key_values):
"""
复合主键匹配逻辑
- 支持单主键和复合主键统一处理
- 自动类型转换和字段验证
"""
if len(key_fields) == 1:
return str(record.get(key_fields[0])) == str(key_values[0])
else:
return all(
str(record.get(field)) == str(value)
for field, value in zip(key_fields, key_values)
)
```
### 3.2 Redis集群比对模块
#### 3.2.1 功能特性
- **多数据类型支持**: String、Hash、List、Set、ZSet
- **查询模式**: 随机采样、指定Key查询
- **集群管理**: 多节点集群配置和连接管理
- **性能监控**: 连接状态、查询耗时统计
- **批量操作**: 大批量Key的并行处理
#### 3.2.2 Redis集群架构
```python
# Redis集群连接配置
{
"cluster_name": "生产集群",
"nodes": [
{"host": "127.0.0.1", "port": 6379},
{"host": "127.0.0.1", "port": 6380}
],
"password": "optional_password",
"socket_timeout": 3,
"socket_connect_timeout": 3,
"max_connections_per_node": 16
}
```
### 3.3 数据比对引擎
#### 3.3.1 比对算法
```python
# 数据比对核心逻辑
class DataComparison:
def compare_results(self, pro_data, test_data, key_fields):
"""
数据比对主算法:
1. 构建数据索引映射 (基于主键)
2. 逐字段深度比较
3. JSON字段特殊处理
4. 数组字段顺序无关比较
5. 生成差异报告和统计
"""
differences = []
identical_results = []
field_diff_count = {}
# 构建生产数据索引
pro_index = self.build_data_index(pro_data, key_fields)
test_index = self.build_data_index(test_data, key_fields)
# 执行比对逻辑
for key, pro_record in pro_index.items():
if key in test_index:
test_record = test_index[key]
diffs = self.compare_records(pro_record, test_record)
if diffs:
differences.extend(diffs)
else:
identical_results.append({
'key': key,
'pro_fields': pro_record,
'test_fields': test_record
})
return {
'differences': differences,
'identical_results': identical_results,
'field_diff_count': field_diff_count,
'summary': self.generate_summary(differences, identical_results)
}
```
#### 3.3.2 JSON处理算法
```python
def compare_json_values(pro_value, test_value):
"""
JSON值比较算法:
1. 智能检测JSON格式
2. 规范化JSON字符串
3. 深度比较对象结构
4. 数组顺序无关比较
"""
if self.is_json_field(pro_value) and self.is_json_field(test_value):
try:
pro_obj = json.loads(pro_value)
test_obj = json.loads(test_value)
return self.deep_compare_objects(pro_obj, test_obj)
except:
return pro_value == test_value
return pro_value == test_value
```
## 4. 数据流架构
### 4.1 查询执行流程
```mermaid
graph TD
A[用户请求] --> B[前端验证]
B --> C[API路由]
C --> D{查询类型}
D -->|单表查询| E[QueryEngine.execute_query]
D -->|分表查询| F[QueryEngine.execute_sharding_query]
E --> G[数据库连接]
F --> H[分表计算]
H --> G
G --> I[并行查询执行]
I --> J[数据收集]
J --> K[DataComparison.compare_results]
K --> L[结果分析]
L --> M[日志记录]
M --> N[响应返回]
```
### 4.2 配置管理流程
```mermaid
graph TD
A[配置创建/更新] --> B[ConfigManager验证]
B --> C[SQLite持久化]
C --> D[配置缓存更新]
D --> E[前端状态同步]
F[配置加载] --> G[SQLite查询]
G --> H[配置反序列化]
H --> I[前端配置应用]
```
## 5. 性能优化策略
### 5.1 查询优化
- **连接池管理**: 复用数据库连接,减少连接开销
- **并行查询**: 多线程并行执行生产和测试环境查询
- **分批处理**: 大量Key分批查询避免内存溢出
- **索引优化**: 合理设计Cassandra分区键和聚簇键
### 5.2 前端性能
- **懒加载**: 按需加载JS模块和数据
- **虚拟分页**: 大数据集的分页展示
- **防抖节流**: 用户输入和搜索的性能优化
- **缓存策略**: 查询结果和配置数据的客户端缓存
### 5.3 内存管理
- **流式处理**: 大数据集的流式读取和处理
- **及时释放**: 查询完成后及时释放数据库连接和内存
- **垃圾回收**: Python和JavaScript的内存回收优化
## 6. 扩展性设计
### 6.1 水平扩展
- **无状态设计**: 应用层无状态,支持负载均衡
- **配置外部化**: 支持配置中心和环境变量
- **容器化**: Docker容器化部署
- **微服务拆分**: 可拆分为独立的查询服务和比对服务
### 6.2 功能扩展
- **插件架构**: 支持自定义数据源和比对算法
- **API开放**: RESTful API支持第三方集成
- **规则引擎**: 可配置的数据验证和比对规则
- **报告生成**: 支持多种格式的报告导出
## 7. 安全架构
### 7.1 数据安全
- **连接加密**: 支持SSL/TLS加密连接
- **密码管理**: 敏感信息加密存储
- **访问控制**: 基于角色的权限管理
- **审计日志**: 完整的操作审计记录
### 7.2 系统安全
- **输入验证**: 严格的参数验证和SQL注入防护
- **错误处理**: 不暴露敏感系统信息
- **会话管理**: 安全的会话管理机制
- **网络安全**: 防火墙和网络隔离
## 8. 监控和运维
### 8.1 系统监控
- **性能指标**: 查询耗时、成功率、错误率
- **资源监控**: CPU、内存、网络使用情况
- **业务指标**: 查询量、用户活跃度、功能使用统计
- **告警机制**: 异常情况的实时告警
### 8.2 日志管理
- **结构化日志**: JSON格式的结构化日志
- **日志分级**: INFO、WARNING、ERROR、DEBUG
- **日志轮转**: 自动日志清理和归档
- **日志分析**: 支持ELK等日志分析工具
## 9. 技术债务和改进计划
### 9.1 当前技术债务
- **单体应用**: 所有功能集中在单个Flask应用中
- **前端技术**: 使用原生JavaScript缺乏现代化框架
- **测试覆盖**: 缺乏完整的单元测试和集成测试
- **文档完善**: API文档和代码注释需要完善
### 9.2 改进计划
- **微服务改造**: 逐步拆分为独立的微服务
- **前端升级**: 考虑引入Vue.js或React框架
- **CI/CD**: 建立完整的持续集成和部署流程
- **性能测试**: 建立性能基准和压力测试
---
**版本**: v2.0.0
**更新日期**: 2024-08-05
**维护者**: DataTools Pro Team