# MatrixStability 开源:从零搭建 Android 长稳压测系统(Agent-Server 架构 + 崩溃指纹去重)
> 7 月 17 日我分享了一篇《从零搭建 Android 长稳压测系统》,介绍了 Pro 版的商业架构设计思路,收到很多私信问能不能学习代码。今天把核心架构抽离成一个**开源学习版 MatrixStability Lite**,保留 Agent-Server 分离、指纹去重、可视化看板等核心模块,5 分钟本地跑起来,适合学习和小团队试用。
---
## 一、为什么需要自动化长稳压测?
传统模式的问题:
1. **人工盯测**:多人轮班,成本高
2. **重复崩溃**:同一 bug 触发上百次,人工筛选效率低
3. **报告滞后**:压测结束才整理,错过最佳修复窗口
---
## 二、系统架构:Agent-Server 分离
```
[Agent] 设备侧日志采集 → HTTPS → [Server] 云端解析 + 去重 + 报告
```
**Agent 职责:**
- ADB 日志实时采集
- ANR / Crash / Tombstone 多模态识别
- 定时上报(可配置间隔)
**Server 职责:**
- FastAPI 高并发网关
- Pydantic 数据校验
- 崩溃指纹去重
- Jinja2 可视化看板
---
## 三、核心算法:崩溃指纹去重 ⭐
### 3.1 问题定义
同一 bug 可能触发多次,堆栈相似但不完全相同:
```
# 第 1 次
at com.example.MainActivity.onCreate(MainActivity.java:45)
# 第 100 次(内存地址不同)
at com.example.MainActivity.onCreate(MainActivity.java:45)
```
### 3.2 简化版算法(Lite)
```python
def extract_stack_trace(raw_content: str) -> str:
# 正则提取堆栈
pattern = r'at\s+([a-zA-Z_][\w.]+)\.([a-zA-Z_][\w$]*)\s*\(([^)]+)\)'
matches = re.findall(pattern, raw_content)
# 取前 3 层作为特征
return "|".join([f"{m[0]}.{m[1]}" for m in matches[:3]])
def generate_fingerprint(stack_trace: str) -> str:
return hashlib.md5(stack_trace.encode()).hexdigest()
```
**流程:**
原始日志 → 提取堆栈 → 取前 3 层 → MD5 哈希 → 查重 → 新崩溃/计数+1
### 3.3 算法局限与优化方向
| 局限 | 优化方向 |
|------|---------|
| 无法处理相似堆栈 | 参数化归一化(忽略内存地址) |
| 固定取 3 层 | 动态层数(根据堆栈深度调整) |
| 简单 MD5 | 局部敏感哈希(SimHash) |
---
## 四、快速开始
```bash
# 1. 克隆
git clone https://github.com/PerformanceTool999998/matrix-stability-lite.git
# 2. 启动 Server
cd server && pip install -r requirements.txt && uvicorn main:app --reload
# 3. 启动 Agent
cd agent && python agent_lite.py
# 4. 查看报告
open http://localhost:8000/api/v1/dashboard
```
---
## 五、项目结构
```text
matrix-stability-lite/
├── server/ # FastAPI 服务端
│ ├── app/
│ │ ├── database.py # SQLite + SQLAlchemy
│ │ ├── models.py # 数据模型
│ │ ├── schemas.py # Pydantic 校验
│ │ └── routers/
│ │ ├── upload.py # 日志上传 + 指纹去重
│ │ └── dashboard.py # 报告看板
│ ├── main.py
│ ├── templates/
│ │ └── dashboard.html # 可视化看板
│ └── requirements.txt
│
├── agent/ # 客户端
│ ├── agent_lite.py # 日志采集与上传
│ └── requirements.txt
│
├── docs/
│ ├── ARCHITECTURE.md # 架构详解 + 面试要点
│ └── RESUME.md # 简历包装指南
│
├── docker-compose.yml
├── .env.example
└── README.md
```
---
## 六、实测效果
使用 Lite 版模拟数据测试:
| 指标 | 数据 |
|------|------|
| 监控设备 | 1 台(DEMO_DEVICE_001) |
| 总崩溃次数 | 334 次 |
| 独立缺陷 | 3 个 |
| 去重率 | ~99% |
看板页面实时展示:
- 设备状态
- 崩溃类型分布(ANR / JAVA_CRASH / TOMBSTONE)
- 指纹去重统计
- 最近崩溃列表
---
## 七、学习价值
| 模块 | 可学习内容 |
|------|-----------|
| FastAPI | 路由、校验、异步 |
| SQLAlchemy | ORM、迁移、查询优化 |
| 指纹去重 | 哈希、特征提取、相似度 |
| 可视化 | Jinja2、数据聚合、报表设计 |
---
## 八、扩展方向
- [ ] 接入真实 ADB 日志(替换模拟数据)
- [ ] 钉钉 / 企业微信告警推送
- [ ] 多设备并发调度(设备池 + 队列)
- [ ] React + ECharts 前端升级
- [ ] PostgreSQL 替换 SQLite
- [ ] Redis 缓存热点指纹
---
## 九、关于 Pro 版
Lite 版为开源学习版,保留核心架构与简化算法,采用 MIT 协议,可自由学习使用。
如需以下企业功能,请通过 GitHub Issue 联系:
- 多租户管理
- 高级指纹去重(模糊匹配 + 参数化归一化)
- 云端部署(Render + Neon PostgreSQL)
- RSA 授权验证与 License 管理
- 高级报告模板与自动分级
---
## 十、与 Pro 版的差异
| 功能 | Lite(开源) | Pro(商业) |
|------|-------------|------------|
| 部署 | 本地 / Docker | 云端 Render |
| 数据库 | SQLite | PostgreSQL |
| 去重算法 | 简化 MD5 | 闭源指纹引擎 |
| 模糊匹配 | ❌ | ✅ |
| 多租户 | ❌ | ✅ |
| 授权验证 | ❌ | RSA + License |
| 协议 | MIT | 商业授权 |
---
## 结语
开源地址:[https://github.com/PerformanceTool999998/matrix-stability-lite](https://github.com/PerformanceTool999998/matrix-stability-lite)
欢迎 Star、Issue、PR,一起学习进步!
---
**关于作者:** Android 测试工程师,专注自动化测试与稳定性测试。
**相关阅读:**
- [《从零搭建 Android 长稳压测系统:7x24h 无人值守 + 云端指纹去重实战》](https://blog.csdn.net/m0_50486420/article/details/162976503)(Pro 版架构设计思路)