3. 本地缓存核心概念
在工业网关的数据链路中,本地缓存并不是一个“可有可无的磁盘目录”,而是连接现场设备与云端平台之间的可靠性缓冲层。当网络抖动、平台限流、链路中断或云端维护时,网关必须先把采集到的数据可靠地保存在本地,待链路恢复后再按顺序补传。理解本地缓存,核心要抓住四个概念:缓存的定义、缓存命中与未命中、缓存粒度、缓存生命周期。这四个概念共同决定了断点续传能否做到“不丢、不重、不乱序”。
一、缓存的定义:不只是存文件,而是可管理的数据暂存区
在工业网关语境下,本地缓存是指网关在将现场数据转发到目标平台之前,先把数据写入本地持久化存储(如 eMMC、SSD、SD 卡或工业级闪存),并维护其状态、顺序和索引的一种机制。它与普通“临时文件”最大的区别在于:缓存中的数据带有元数据,包括采集时间、设备标识、点位标识、质量码、序号、重传次数、确认状态等。
因此,一个可用的本地缓存通常由三部分组成:
- 数据区:实际存储采集值、时间戳和业务字段。
- 索引区:记录每条数据的偏移、序号、状态,支持快速查找和顺序读取。
- 策略区:定义容量上限、淘汰规则、重传策略、确认机制和持久化周期。
二、缓存命中与未命中:决定读取效率与补传路径
缓存命中(Cache Hit)是指网关在需要读取某条数据时,能够直接从本地缓存索引中定位到它,无需回源到现场设备或历史数据库。缓存未命中(Cache Miss)则相反:请求的数据不在本地缓存中,网关必须重新向设备采集、向平台查询,或者标记为缺失。
在断点续传场景中,命中与未命中直接影响补传效率。例如,平台要求补传某时间段的数据,如果网关的索引区能够快速命中对应序号区间,就可以顺序读取并批量发送;如果索引损坏或数据已被淘汰,就会发生未命中,导致补传失败或需要重新采集。
| 状态 | 触发条件 | 网关行为 | 对断点续传的影响 |
|---|---|---|---|
| 缓存命中 | 索引中存在目标序号且数据未过期 | 直接读取并发送 | 补传快、顺序稳定 |
| 缓存未命中 | 数据被淘汰、索引损坏或从未写入 | 回源采集或标记缺失 | 可能丢点、补传延迟增大 |
| 部分命中 | 区间内部分数据存在 | 分段读取、分段发送 | 需处理空洞与顺序拼接 |
三、缓存粒度:按点、按包还是按批次
缓存粒度决定了网关以多大的单位组织数据。粒度过细,索引和元数据开销大;粒度过粗,断点续传时容易重复发送或难以精确定位。工业网关常见三种粒度:
- 按点位缓存:每条点位变化独立存储,适合高频、关键参数,但写入次数多。
- 按报文/包缓存:以 Modbus、OPC UA 或 MQTT 报文为单位,适合协议级补传。
- 按批次缓存:将一段时间内的多个点位打包成一个批次,适合低带宽、批量上报场景。
选择粒度时,要同时考虑采集频率、单条数据大小、存储介质寿命和平台接口的批量能力。例如,高频振动监测适合按批次缓存并压缩;而安全联锁信号则更适合按点位独立缓存,确保关键事件不被批次延迟掩盖。
# 示例:缓存粒度配置片段
cache:
granularity: batch # point | packet | batch
batch_size: 200 # 每批最多 200 条
flush_interval_ms: 500 # 最长 500ms 落盘一次
max_disk_usage_mb: 4096 # 缓存上限 4GB
eviction: oldest_first # 淘汰策略:最旧优先
四、缓存生命周期:从写入、确认到淘汰
缓存生命周期描述一条数据从产生到最终删除的完整过程。典型阶段包括:写入、持久化、等待发送、已发送待确认、已确认、可淘汰。断点续传的关键在于“已发送待确认”阶段:如果网关发送后未收到平台确认,就不能删除数据,否则会丢点;如果收到确认后仍不删除,则会无限占用存储。
因此,生命周期管理必须与确认机制绑定。常见做法是:平台返回 ACK 或批次确认号后,网关才将对应数据标记为可删除;对于超时未确认的数据,进入重传队列,并记录重传次数。超过最大重传次数后,转入死信区或告警,而不是静默丢弃。
五、工业场景中的意义与常见误区
在工业现场,本地缓存的意义体现在三个方面:第一,抗网络波动,运营商专网、Wi-Fi 和 5G 都可能短时中断,缓存让数据先落地;第二,保护关键数据,如能耗、报警、工艺参数,断网期间不能丢;第三,支撑断点续传,通过序号和确认机制实现精确补传,避免重复上报造成平台侧统计偏差。
总结来看,缓存定义明确了“存什么、怎么管”;命中与未命中决定了“读得快不快、补得全不全”;缓存粒度决定了“以什么单位组织数据”;缓存生命周期决定了“什么时候可以安全删除”。只有把这四者与断点续传的序号、确认、重传机制配合起来,工业网关才能在复杂现场中真正做到数据不丢、不重、不乱序。