- TCP 连接池优化: 确保
ModbusTransport只持有一个modbus.Client,并通过SetSlaveID复用连接。 - 指数退避重连: 在
Connect方法外围实现重试循环,使用 1s, 2s, 4s... 300s 的退避策略。 - 心跳保活: 实现独立 Goroutine,每 30s 执行一次轻量级读取(如读取 当前设备点位第一个地址),失败 3 次主动断开。
- MTU 探测: 连接建立后,尝试读取 32-125 个寄存器,确定
MaxBatchSize。 - 响应时间记录: 维护
map[batchSize]duration,记录不同批量大小下的平均 RTT。 - 有效地址学习: 记录
IllegalDataAddress错误,构建无效地址黑名单,避免无效读取。
- AIMD 算法: 实现加性增乘性减算法动态调整
BatchSize。 - 动态合并: 根据
BatchSize和网络状况动态调整合并间隙MaxGap。 - 自适应间隔: 采集循环中计算
LastDuration,动态调整Ticker。 - 背压控制: 监控
DataBuffer通道长度,积压时暂停或减缓采集。
- 零拷贝解析: 优化
decoder.go,使用binary.BigEndian.Uint16/32/64直接操作[]byte。 - 全类型支持: 确保所有 16 种 Modbus 数据格式(Float/Double/Long 变体)均有优化路径。
- 环形缓冲区: 实现简单的 RingBuffer 替代
[]model.Value切片,减少 GC。 - 批量提交: 实现
flushLoop,定时或定量提交数据。
- 点位级熔断:
PointRuntime增加FailCount,连续 3 次失败标记为Broken,冷却 5 分钟。 - 设备级熔断: 统计设备周期成功率,低于 50% 触发降级(Interval * 2)。
- 指标埋点: 在
Read/Write关键路径增加 Counter 和 Histogram 统计。 - 健康度计算: 定期计算并更新设备健康状态。
- 集成测试: 模拟网络波动,验证重连和降级逻辑。
- 性能测试: 对比优化前后的 CPU/内存和采集延迟。