17 KiB
17 KiB
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 前端架构
// 模块化架构设计
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 后端架构
# 模块化后端设计
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 核心算法
# 分表索引计算算法
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集群架构
# 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 比对算法
# 数据比对核心逻辑
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处理算法
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 查询执行流程
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 配置管理流程
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