白皮书
车联网设计与实现:搭建可靠、高效、符合行业需求的车联网平台 →

基于 MQTT 的文件传输:统一数据通道简化物联网系统架构

EMQX Team
2023-8-7
基于 MQTT 的文件传输:统一数据通道简化物联网系统架构

引言:将 MQTT 用于文件传输

MQTT 是一种基于 TCP 的物联网通信协议,其 Payload 可以容纳任意类型的数据,例如文本、二进制、JSON、XML 等多种格式。这种灵活性使得 MQTT 在物联网应用中拥有广泛的适用性,能够满足不同场景下多样化数据传输的需求。

然而,使用 MQTT 传输大尺寸的 Payload 面临着一系列的挑战,如不支持超出协议规范的数据大小,传输时间较长可能导致网络拥塞,过大的报文也需要占用更多终端设备计算资源和内存空间。

针对这些问题,EMQX Enterprise 5.1 推出了解决方案:基于标准 MQTT 协议的文件传输功能。此功能旨在优化大文件传输的效率和可靠性,从而为用户带来更卓越的体验和性能表现。

哪些物联网场景需要文件传输

物联网应用往往面临多元化数据传输的场景,设备与云端之间需要快速可靠传输各类数据。

随着物联网在越来越多的行业中广泛应用,更多的应用场景被发掘出来。除了传感器数据和控制指令这样的实时结构化数据外,离线类型的文件数据,如音视频、图片和诊断日志等,也开始在物联网中扮演重要角色。

以下是物联网文件传输在各行业中的典型应用场景:

  • 汽车与出行 - 批量打包车内数据文件上传

    无人驾驶和驾驶辅助子系统的深度应用实现了汽车的智能化。车企用户可以通过物联网通道上传实时场景数据、机器学习日志文件、打包后的 CAN Bus 等数据作为云端计算平台的原始输入,以此来不断更新算法模型文件并最终下发到车机,持续改进自动驾驶体验,持续提高车企用户产品竞争力。

    对于货运和客运客户,可以定期采集驾驶舱、客运/货运仓的音视频数据并传输至云端,结合人工智能技术实现自动化的安全监控业务。

  • 工业制造 - 非结构化生产数据统一上报

    工业互联网环境中生产设备和传感器产生了大量非结构化数据如文本、图像、视频等,这些数据能够用于边缘 AI 推理,实现监控、质检等业务。

    对于边缘无法胜任的复杂数据处理,则可以借助文件传输功能可靠地上传至服务器或云平台,借助云端强大的算力来实现更深入的数据分析、监控和工业生产过程的优化。

  • 智慧城市 - 视频监控图片传输

    在智慧城市中,监控摄像头和车辆、行人流量识别设备产生大量的图片数据,通过 MQTT 文件传输的方式,这些数据可以与上层服务实现无缝对接,为智慧城市的各项服务和功能提供支持和基础。

综上所述,我们可以对文件传输的场景进行分类总结:

按传输内容:

包含二进制数据与媒体数据,数据的大小通常在 MB 级别,远超过常见的传感器遥测和控制指令数据。

  • 媒体数据则包括图片、音视频数据。
  • 二进制数据如日志文件、算法模型、升级包等;

按传输方向:

与物联网其他数据一致,绝大部分的数据传输是从端到云,用于数据上传的场景。少部分有云到端的下发需求,如 OTA 升级包、ML/AI 推理模型/算法等下发。

为什么使用 MQTT 进行文件传输

在文件传输领域,已经有一些成熟的技术,例如 FTP 和 HTTP。用户可以将 MQTT 与这些技术结合使用:通过 HTTP/FTP 传输文件内容,并利用 MQTT 传输事件和文件位置信息。

image.png

结合 HTTP 与 MQTT 的文件传输方案

这个方案实现了技术的异构融合,理论上能够充分发挥各自的优势,从而提高文件传输的效率和灵活性。然而在物联网环境下,用户可能会遇到以下问题:

  • 难以协调整体流控:在物联网设备低带宽、网络环境复杂且不可靠的情况下,采用多个连接同时向云端发送数据时,难以进行整体流量控制和优先级管理。特别是在通过 HTTP/FTP 进行大文件传输时,可能会长时间占用带宽,导致关键 MQTT 消息传输受阻。
  • 多个技术栈共存问题:在物联网终端中,设备通常资源有限。有些设备可能没有足够空间和处理能力引入额外技术栈。MQTT 更轻量,适用性比 HTTP/FTP 更好,能够绕过限制完成业务开发。
  • 额外的开发与管理成本:现有的 MQTT 通道已经有较为完备的设备的认证与授权体系,新引入的 FTP 和 HTTP 技术需要将安全与管理体系再重新实现一次,增加额外的开发和管理成本。
  • 性能的限制:HTTP/FTP 技术不适用于需要支持海量连接的物联网应用,除此之外,弱网情况下频繁的重连与重传将进一步放大 HTTP/FTP 文件传输的劣势,为应用的开发和运维带来很大压力。

在物联网这一特殊的环境下,结合 MQTT 轻量灵活的特性以及 EMQX 提供的海量物联网设备接入能力、统一的安全体系,使用 MQTT 通道进行文件传输,能够为业务开发与设备的管理带来诸多优势和便利。

EMQX 的 MQTT 文件传输功能

基于 MQTT 的文件传输面临多个挑战,既需要解决可靠性问题,确保文件 100% 完整,又需要解决文件管理与长期存储问题,同时,还需要适配各类应用的文件读取接口,实现更好的服务集成。

为此,EMQX 文件传输功能实现了以下特性:

  • 支持使用现有的 MQTT 连接,充分复用现有的客户端管理体系;
  • 支持分块传输,这意味着轻量级的客户端也能够处理大型文件,同时超过 MQTT 协议限制大小(256MB)的文件也能够被传输;
  • 支持断点续传,客户端设备可以随时暂停文件传输以进行更高优先级的数据传输,或从网络中断中恢复传输;
  • 可靠性保障,通过 QoS 1 级别消息,以及精心设计的校验、重传机制确保文件传输完整性;
  • 灵活的存储层配置,上传的文件分片能够自动合并,并保存到本地指定目录或与 S3 兼容的对象存储中,方便后续使用。

在协议层面,EMQX 文件传输基于标准的 MQTT 实现,通过指定的 MQTT 主题以及 Payload 实现整个传输流程,无需改造现有的客户端与应用即可进行集成。详细的传输协议请参考 MQTT 文件传输客户端开发

MQTT 文件传输

快速体验 MQTT 文件传输

MQTT 文件传输在 EMQX 企业版 5.1.0 版本中提供,您可以通过以下步骤快速体验这一流程:

  1. 下载 EMQX 企业版 5.1.0 及以上版本:点此下载

  2. 修改 etc/emqx.conf 配置文件,启用文件传输功能并设置导出目录:

    file_transfer {
      enable = true
      storage {
        local {
          enable = true
          exporter {
            local {
              enable = true
              root = "./data/file_exported"
            }
          }
        }
      }
    }
    
  3. 访问 MQTT 文件传输客户端开发 按照协议流程开发自己的客户端,或根据 MQTT 文件传输客户端示例 快速体验 MQTT 文件传输功能。以 Node.js 为例,示例执行过程如下:

    git clone https://github.com/emqx/MQTT-Client-Examples
    cd MQTT-Client-Examples
    
    cd mqtt-client-Node.js
    yarn install
    
    node emqx-file-transfer.js
    
  4. 执行成功后,您将在 data/file_exported 目录下看到传输完成并合并后的 emqx-architecture.png 图片文件。

结语

MQTT 作为一种轻量、灵活的消息传输协议,为企业提供了一种更加便捷和高效的文件传输解决方案。通过结构化数据与文件类型数据传输的有机结合,物联网能够实现的业务变得更加丰富多样。而统一的 MQTT 数据通道能够简化系统架构,降低应用的复杂性和维护成本。利用 EMQX 的 MQTT 文件传输功能,企业将可以实现更加便捷和多样性的物联网应用开发。

免费试用 EMQX 企业版
无限连接,任意集成,随处运行。
开始试用 →

推荐阅读

2023-3-6EMQX Team
MQTT over QUIC 多流支持

过去的 2 月份,EMQX 开源版发布了 v5.0.16、v5.0.17 以及 v5.0.18 三个版本,提供了 MQTT over QUIC 多流(multistream)支持。