非功能需求
性能需求
后端服务
| 指标 | 要求 | 备注 |
|---|---|---|
| API 响应时间(P95) | < 200ms(读)/ < 500ms(写) | 非数据看板类接口 |
| API 并发处理能力 | 单实例 500 QPS | 4 核 8G 配置 |
| MQTT 消息吞吐 | 单实例 2000 msg/s | 遥测数据上报 |
| WebSocket 并发连接 | 单实例 5000 | 设备在线状态推送 |
数据看板
| 指标 | 要求 | 备注 |
|---|---|---|
| 时序数据查询(24h) | < 500ms | InfluxDB 聚合查询 |
| 时序数据查询(7d) | < 1s | 使用降采样数据 |
| 时序数据查询(30d+) | < 2s | 使用 1h 聚合数据 |
端到端延迟
| 指标 | 要求 | 备注 |
|---|---|---|
| 控制指令(云端 → 设备) | < 1s | 局域网环境 |
| 设备状态上报 → 前端刷新 | < 2s | 经 MQTT → 后端 → WebSocket |
| 设备上线/离线状态变更 | < 5s | 属性上报驱动 + Redis TTL 超时检测 |
扩展性
| 指标 | v1.0 目标 | 备注 |
|---|---|---|
| 支持产品数 | 100 | |
| 支持设备数 | 10,000 | |
| 单产品最大设备数 | 5,000 | |
| 单设备属性数 | 50 | 物模型属性定义上限 |
安全需求
通信安全
| 编号 | 需求 | 优先级 |
|---|---|---|
| SEC-001 | 生产环境强制 HTTPS + WSS | P0 |
| SEC-002 | MQTT 连接使用 TLS 加密(MQTTS) | P0 |
| SEC-003 | MQTT 设备认证使用 ClientId + Username + Password,由 EMQX 直连 PostgreSQL 认证 | P0 |
| SEC-004 | API 请求使用 JWT Bearer Token 认证 | P0 |
| SEC-005 | API 速率限制:默认 60 次/分钟/用户 | P1 |
数据安全
| 编号 | 需求 | 优先级 |
|---|---|---|
| SEC-006 | 用户密码使用 bcrypt + salt 哈希存储,不可逆 | P0 |
| SEC-007 | JWT Secret 和 Salt Secret 通过环境变量注入,不硬编码 | P0 |
| SEC-008 | 敏感操作(删除设备、修改权限)记录审计日志 | P1 |
| SEC-009 | 数据库连接使用 TLS,不暴露公网端口 | P1 |
权限与隔离
| 编号 | 需求 | 优先级 |
|---|---|---|
| SEC-010 | 用户只能访问自己被授权的设备和数据 | P1 |
| SEC-011 | 接口级权限校验,所有非公开端点必须声明权限 | P0 |
| SEC-012 | 设备间数据隔离:设备 A 不能订阅设备 B 的 Topic | P1 |
防护措施
| 编号 | 需求 | 优先级 |
|---|---|---|
| SEC-013 | 防暴力破解:登录失败 5 次锁定 15 分钟 | P1 |
| SEC-014 | SQL 注入防护:使用 Prisma 参数化查询 | P0 |
| SEC-015 | XSS 防护:前端输出转义 + CSP 头 | P1 |
| SEC-016 | 请求体大小限制:API 默认 10MB,文件上传 50MB | P1 |
可用性需求
| 指标 | 要求 |
|---|---|
| 系统可用性 | 99.5%(月宕机时间 < 3.6 小时) |
| 数据持久性 | 99.9% |
| 故障恢复时间(RTO) | < 1 小时 |
| 数据恢复点(RPO) | < 1 小时 |
兼容性需求
| 平台 | 要求 |
|---|---|
| Web 浏览器 | Chrome 90+, Edge 90+, Safari 15+ |
| 微信小程序 | 微信 8.0+,基础库 3.0+ |
| 移动端 H5 | iOS 15+ Safari, Android Chrome 90+ |
| 嵌入式 | ESP32-C3 (ESP-IDF v5.2), 通用 ESP32 系列 |
可维护性需求
| 编号 | 需求 | 优先级 |
|---|---|---|
| MAIN-001 | 结构化日志(Winston):JSON 格式,按天轮转,保留 30 天 | P1 |
| MAIN-002 | 健康检查端点:GET /api/v1/ 返回服务状态 | P0 |
| MAIN-003 | 系统状态端点:GET /api/v1/system/status 返回 DB/Redis/MQTT 连接状态 | P1 |
| MAIN-004 | Docker Compose 一键部署 | P0 |
| MAIN-005 | PM2 进程管理,支持自动重启 | P1 |
| MAIN-006 | 数据库迁移脚本版本化管理(Prisma Migrate) | P0 |
