4. 流量指标(Traffic):请求速率(RPS/QPS)、数据吞吐量(bps)、并发连接数、设备活跃度统计
在IoT场景中,流量指标直接反映设备与平台之间的通信负载与系统压力。与Web服务不同,IoT流量具有高并发、小数据包、长连接、突发性强的特点。本节聚焦四个核心流量维度:请求速率、数据吞吐量、并发连接数与设备活跃度。
4.1 流量指标定义与IoT场景差异
| 指标 | 通用定义 | IoT场景特殊含义 | 典型阈值参考 |
|---|---|---|---|
| RPS / QPS | 每秒请求数 / 每秒查询数 | 设备上报、指令下发、OTA轮询、心跳请求 | 单网关建议 ≤ 5000 RPS |
| 数据吞吐量(bps) | 每秒传输的比特数 | 传感器采样数据、视频流、日志批量上传 | NB-IoT 单设备 ≤ 100 kbps |
| 并发连接数 | 同一时刻保持的连接数量 | MQTT/TCP长连接、CoAP短连接、WebSocket | 单节点建议 ≤ 10万连接 |
| 设备活跃度 | 统计周期内在线/活跃设备比例 | 心跳超时判定、离线阈值、日活/月活 | 日活跃率 ≥ 95% 为健康 |
关键认知: IoT流量指标必须区分“设备侧”与“平台侧”。设备侧关注上行数据量与功耗;平台侧关注连接密度与请求处理能力。两者采集粒度不同,需分别设计采集点。
4.2 请求速率(RPS/QPS)采集方案
请求速率是衡量系统处理能力的第一指标。在IoT网关或边缘节点,通常使用滑动窗口计数器或令牌桶算法进行实时统计。
4.2.1 采集点设计
- 设备接入层:MQTT Broker、CoAP Server、HTTP API Gateway
- 协议适配层:协议转换器、消息解码器
- 业务处理层:规则引擎、数据清洗管道
4.2.2 采集实现(Go 示例)
// 滑动窗口计数器实现 RPS 采集
type SlidingWindow struct {
mu sync.Mutex
buckets [60]int64 // 60个1秒桶
lastTime int64
}
func (sw *SlidingWindow) Increment() {
sw.mu.Lock()
defer sw.mu.Unlock()
now := time.Now().Unix()
if now != sw.lastTime {
sw.buckets[now%60] = 0
sw.lastTime = now
}
sw.buckets[now%60]++
}
func (sw *SlidingWindow) GetRPS() int64 {
sw.mu.Lock()
defer sw.mu.Unlock()
var total int64
now := time.Now().Unix()
for i := int64(0); i < 60; i++ {
total += sw.buckets[(now-i)%60]
}
return total / 60
}
采集粒度建议: 设备级 RPS 按 1 秒粒度统计;网关级 RPS 按 10 秒聚合;平台级 RPS 按 1 分钟聚合上报。避免高频采集导致性能反噬。
4.3 数据吞吐量(bps)采集方案
数据吞吐量关注的是带宽占用与数据体量。IoT设备通常上报小数据包(几十字节到几KB),但海量设备并发时吞吐量可能达到Gbps级别。
4.3.1 分层采集策略
| 层级 | 采集对象 | 采集方式 | 存储周期 |
|---|---|---|---|
| 设备端 | 单设备上行/下行字节数 | 固件内嵌计数器 | 按天轮转 |
| 边缘网关 | 聚合吞吐量(bps) | 网卡流量统计 + 协议解析 | 按小时聚合 |
| 云平台 | 总入口/出口吞吐量 | 负载均衡器 + 消息队列监控 | 按分钟实时 |
4.3.2 吞吐量计算公式
吞吐量(bps) = (总字节数 × 8) / 时间窗口(秒)
示例:某网关1分钟内收到 15000 条消息,平均每条 256 字节
吞吐量 = (15000 × 256 × 8) / 60 = 512,000 bps ≈ 512 kbps
注意: 不要将吞吐量与带宽混淆。吞吐量是实际传输速率,带宽是链路最大容量。当吞吐量持续超过带宽的 70% 时,应触发扩容告警。
4.4 并发连接数采集方案
并发连接数是IoT平台连接密度的直接体现。MQTT长连接场景下,每个设备维持一个TCP连接,连接数直接决定服务器内存与文件描述符消耗。
4.4.1 连接状态模型
4.4.2 连接数采集关键点
- 采集维度:按协议类型(MQTT/CoAP/HTTP)、按设备类型(传感器/网关/摄像头)、按区域(机房/边缘节点)
- 采集频率:连接数变化较慢,建议 5~10 秒采集一次,避免频繁系统调用
- 告警阈值:单节点连接数达到最大连接数的 80% 时触发预警告警
4.5 设备活跃度统计方案
设备活跃度是IoT运维的健康度晴雨表。活跃度下降通常意味着网络故障、设备离线、固件异常或电池耗尽。
4.5.1 活跃度计算模型
设备活跃度 = (统计周期内至少上报1次数据的设备数) / (总注册设备数) × 100%
细化指标:
- 日活跃度(DAU):24小时内活跃设备占比
- 时活跃度(HAU):最近1小时内活跃设备占比
- 心跳活跃度:最近一次心跳在超时阈值内的设备占比
4.5.2 活跃度统计流程
4.5.3 活跃度统计避坑指南
常见陷阱:
- 心跳超时设置过短:NB-IoT设备可能30分钟才上报一次,超时设为5分钟会导致大量误判离线。
- 忽略夏令时/时区:活跃度统计应统一使用UTC时间,避免跨时区设备统计偏差。
- 活跃度与连接数混淆:设备保持TCP连接但不发送数据,属于“在线但不活跃”,两者需分开统计。
4.6 流量指标采集架构总览
| 指标 | 采集源 | 存储引擎 | 可视化工具 | 告警规则 |
|---|---|---|---|---|
| RPS/QPS | API Gateway / MQTT Broker | Prometheus + VictoriaMetrics | Grafana 热力图 | 突增 200% 持续 5 分钟 |
| 吞吐量(bps) | 网卡流量 + 应用层统计 | InfluxDB / TimescaleDB | Grafana 面积图 | 超过带宽 80% |
| 并发连接数 | TCP 连接表 / MQTT 会话 | Prometheus Gauge | Grafana 仪表盘 | 达到最大连接数 85% |
| 设备活跃度 | 心跳表 / 最后上报时间 | Redis + ClickHouse | Grafana 饼图 + 趋势线 | 活跃度低于 90% |
最佳实践: 流量指标采集应遵循“边缘聚合、云端分析”原则。边缘网关做1秒级实时统计,云端做分钟级聚合与历史分析。避免将所有原始流量上报到中心,造成带宽浪费与存储爆炸。