387 lines
17 KiB
Markdown
387 lines
17 KiB
Markdown
# 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 |