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 或批次确认号后,网关才将对应数据标记为可删除;对于超时未确认的数据,进入重传队列,并记录重传次数。超过最大重传次数后,转入死信区或告警,而不是静默丢弃。

本地缓存生命周期与断点续传数据流 现场采集 点位/报文/批次 写入缓存 数据区 + 索引区 等待发送 按序排队 发送待确认 ACK / 批次确认 重传队列 超时/未确认 已确认 标记可删除 淘汰/归档 释放存储空间 超时未确认 重传成功 确认后 断点续传关键检查点 1. 序号连续,无空洞 2. ACK 后才删除 3. 重传有上限与告警

五、工业场景中的意义与常见误区

在工业现场,本地缓存的意义体现在三个方面:第一,抗网络波动,运营商专网、Wi-Fi 和 5G 都可能短时中断,缓存让数据先落地;第二,保护关键数据,如能耗、报警、工艺参数,断网期间不能丢;第三,支撑断点续传,通过序号和确认机制实现精确补传,避免重复上报造成平台侧统计偏差。

常见误区一:把缓存当“无限仓库”。工业网关存储有限,必须设置容量上限和淘汰策略,否则磁盘写满会导致新数据无法写入。误区二:发送成功就删除。没有 ACK 的“成功”只是本地发送成功,不代表平台已接收。误区三:忽略索引一致性。断电后索引损坏会导致缓存未命中,补传时出现空洞。
复盘建议:在部署前用“断网—恢复—核对”三步验证缓存策略。断网期间观察数据是否持续写入;恢复后检查补传序号是否连续;最后在平台侧核对总数与关键点位,确认没有重复和丢失。

总结来看,缓存定义明确了“存什么、怎么管”;命中与未命中决定了“读得快不快、补得全不全”;缓存粒度决定了“以什么单位组织数据”;缓存生命周期决定了“什么时候可以安全删除”。只有把这四者与断点续传的序号、确认、重传机制配合起来,工业网关才能在复杂现场中真正做到数据不丢、不重、不乱序。