MQTT QoS 设计:车联网平台消息传输质量保障
在本专题系列文章中,我们将根据 EMQ 在车联网领域的实践经验,从协议选择等理论知识,到平台架构设计等实战操作,与大家分享如何搭建一个可靠、高效、符合行业场景需求的车联网平台。
在此之前,我们已经介绍了车联网场景中的 MQTT 协议,以及如何根据实际业务需求进行车联网 TSP 平台场景中的 MQTT 主题设计。接下来,我们就需要考虑如何将消息数据进行高质量的安全传输。在本篇文章中,我们将借助 MQTT 协议的 QoS 特性,介绍车联网场景中的 MQTT 消息 QoS 设计,保障数据传输质量。
前言
车联网场景下会产生海量数据,这些数据可以作为车辆诊断的基础,保障车辆安全稳定地运行;也可以与手机等基础设施进行联动,以提供更好的行车体验。国家与行业也陆续出台了相关政策文件,如《汽车驾驶自动化分级》、《国家车联网产业标准体系建设指南》、《车联网信息服务数据安全技术要求》等,对车联网数据传输提出了更高要求。通信的安全、稳定、可靠自始至终都是车联网亘古不变的话题,因此一套完善的数据传输保障方案也是车联网业务中不可忽视的一部分。
MQTT 协议中的 QoS 等级
作为现如今车联网行业数据通信协议的首选,MQTT 协议中规定了消息服务质量(Quality of Service,以下简称 QoS)。QoS 保证了在不同的网络环境下消息传递的可靠性,可作为车联网场景中保障消息可靠性传输的首要实现技术。
MQTT 设计了 3 个 QoS 等级:
QoS 0
消息最多传递一次,如果当时 MQTT 客户端不可用,则会丢失该消息。Sender (可能是 Publisher 或者 Broker) 发送一条消息之后,就不再关心它有没有发送到对方,也不设置任何重发机制。
QoS 1
消息传递至少 1 次。包含了简单的重发机制,Sender 发送消息之后等待接收者的 ACK,如果没收到 ACK 则重新发送消息。这种模式能保证消息至少能到达一次,但无法保证消息重复。
QoS 2
消息仅传送一次。设计了重发和重复消息发现机制,保证消息到达对方并且严格只到达一次。
车联网场景中的消息 QoS 设计
首先需要明确的是 QoS 级别越高,消息交互越复杂,系统资源消耗越大,所以 QoS 等级不是设置的越高越好。应用程序可以根据自己的网络场景和业务需求,选择合适的 QoS 级别。
根据车联网信息服务相关数据的属性和特征,我们可以将其分为六类:基础属性类数据、车辆工控类数据、环境感知类数据、车控类数据、应用服务类数据和用户个人信息。那么在不同的车联网场景中如何选择 MQTT QoS 等级呢?
以下情况下可以选择 QoS 0
可以接受消息偶尔丢失的场景下可以选择 QoS 0。
车联网提供的与娱乐相关的多媒体服务,如天气预报等数据等。还有部分涉车服务类数据,如车辆历史行车数据的上报、历史行车操作数据等。
以下情况下可以选择 QoS 1
车联网大部分场景都是选用 QoS1,它实现了系统资源性能和消息实时性、可靠性最优化。
QoS 1 广泛运用于控车消息、行车上报数据(含新能源国标和企标)、交通安全管控类数据,和交通安全、道路安全相关的预警数据。
以下情况下可以选择 QoS 2
对于不能忍受消息丢失,且不希望收到重复的消息,数据完整性与及时性要求较高的场景,可以选择 QoS 2。
车联网场景中 QoS 2 的应用并不多,虽然其可以增加消息可靠性,但同时也使资源消耗和消息时延大幅增加。QoS 2 主要运用于对数据完整性与及时性要求较高的银行、消防、航空等行业,有些主机厂的行车告警和车辆充电桩计费费单消息会选择采用 QoS 2。
特别提醒
需要注意的是 MQTT 发布与订阅操作中的 QoS 代表了不同的含义,发布时的 QoS 表示消息发送到 MQTT 服务器 使用的 QoS 等级,订阅时的 QoS 表示 MQTT Broker 向自己转发消息时可以使用的最大 QoS 等级。需要保障发送与订阅的 QoS 一致,才能确保最终收到的消息是固定的 QoS 等级,否则会出现消费降级的情况。例如:A 发送的消息 QoS 为 2,B 订阅的消息 QoS 为1,则最终接收到消息的 QoS 为 1。
EMQX 基于 QoS 等级的消息传输保障
为了更好地保障车联网过程中人-车-路-网-云之间数据传递的安全可靠,同时提高消息吞吐效率,减少网络波动带来的影响,云原生分布式物联网消息服务器 EMQX 在全面适配 QoS 信令交互的基础上,还设计了飞行窗口、消息队列、消息全链路追踪和离线消息存储等功能来提高消息可靠性。
飞行窗口的设计可允许多个未确认的 QoS 1 和 QoS 2 报文同时存在于网路链路上,消息队列则可以满足在消息链路中消息超出飞行窗口的同时对消息进行进一步存储,以满足客户端离线时未接收的消息或者未确认数据消息的存储需求。飞行窗口同时也有 upgrade_qos 参数实现根据订阅强制升级 QoS 之类的功能,可实现 QoS 等级的一致性,确保不会出现消费降级的情况。此外,EMQX 还可提供限制业务按区域接入实现不同的 QoS 等级、数据桥接 QoS 管理、MQTT-SN 协议 QoS 管理等能力,均为车联网场景下的消息可靠传输提供了有力保障。
下载体验:https://www.emqx.com/zh/try?product=enterprise
结语
通过本文我们可以看到,MQTT 协议的 QoS 特性对于车联网场景下消息数据的安全传输具有重要意义。作为完整支持 MQTT 协议标准的云原生分布式消息服务器,EMQX 在产品设计中充分利用 MQTT 协议的特性优势,为物联网平台与应用构建提供可靠的数据连接、移动、处理与集成。
版权声明: 本文为 EMQ 原创,转载请注明出处。
原文链接:https://www.emqx.com/zh/blog/mqtt-qos-design-for-internet-of-vehicles
MQTT QoS 设计:车联网平台消息传输质量保障相关推荐
- 车联网平台百万级消息吞吐架构设计
前言 在之前的文章中,我们提到车联网 TSP 平台拥有很多不同业务的主题,并介绍了如何根据不同业务场景进行 MQTT 主题设计.车辆会持续不断产生海量的消息,每一条通过车联网上报的数据都是非常珍贵的, ...
- 车联网 TSP 平台场景中的 MQTT 主题设计
本文作者:田桢,前上汽大众平台架构师,现为中科创达汽车云技术负责人 前言 在车联网生态中,TSP(Telematics Service Provider)平台在产业链中居于核心地位,上接汽车.车载设备 ...
- 物联网平台消息总线设计
物联网平台消息总线设计 一个物联网平台会有很多的消息类型,如设备上报的数据消息,设备离线,设备上线等消息.传统的消息处理无法满足错综复杂的物联网平台,基于主题订阅的消息模型是很适合用在物联网领域. 采 ...
- 车联网平台介绍(一)
车联网基本概述: 基本方向 目前各大主机厂都在建设自己的车联网平台(TSP),基本功能目前应该说都大同小异,无论从架构.还是实现功来看都差不多 车联网的整体方向包括两个,一个是 V2X 方向,一个是自 ...
- 谐云携手EMQ ,打造车联网平台联合解决方案
近日,谐云科技有限公司与EMQ映云科技完成多个产品兼容性测试认证,产品覆盖谐云中间件平台(HC-DSP)和云原生分布式物联网消息服务器 EMQX,以及谐云边缘计算平台(HC-EdgeStack)和超轻 ...
- WirelessCar如何借助亚马逊云科技打造车联网平台的高弹性和高可用
WirelessCar成立于1999年,专注汽车行业,为全球100个国家和地区的客户提供数字服务,在汽车行业和电信技术领域之间搭建起关键数字桥梁,创建一站式的汽车移动电子服务平台. 作为最早洞见车联网 ...
- MQTT QoS 详解
本文主要介绍 MQTT 协议中 QoS(服务质量) 的详细内容. 1.概述 MQTT 协议 中规定了消息服务质量(Quality of Service),它保证了在不同的网络环境下消息传递的可靠性,Q ...
- EMQ X 在上汽大众新一代车联网平台中的应用
本文作者:田桢,上汽大众移动互联业务架构与应用开发部资深架构师. 车联网是通过「云管端」技术建立车与车.车与人.车与路之间的连接,实现车载信息服务.车辆控制自动化和智能交通.通过车联网平台与 T-Bo ...
- 大型物联网平台如何来保障亿级设备安全连接上云?
摘要:华为云IoT设备接入云服务(后续章节简称为"IoTDA")提供海量设备的接入和管理能力,可以将IoT设备联接到华为云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配 ...
最新文章
- C语言函数strstr 分析及实现
- DCMTK:测试dcmiod的代码序列宏实现
- linux系统正常停机的命令,Linux系统重启命令大全
- .NET Core全新的配置管理[共9篇]
- python获取股票数据_python根据股票代码获取当前数据
- 大家都关注的Serverless,阿里怎么做的?
- esp8266 防掉线方法_ESP8266-12F 中断
- python distance matrix_Python 矩阵转置的几种方法小结
- android html片段,详解Android WebView加载html片段
- unity中使用本地数据库sqlite
- 蓝桥杯-明码 bitset初识
- VCF vs Maf | 变异注释及整理为Maf格式
- linux cat命令详解
- java程序猿面试问缺点怎么回答_面试程序员被问“你的缺点是什么”,我该怎么回答?...
- JAVA 16方格排序游戏
- 微信小程序转换为uni-app项目
- 汉字转拼音的c++实现
- PowerBuilder中图片文件的处理
- 优盘格式化了怎么恢复里面的数据?
- vue发送请求时遇到index.vue6ced90 Uncaught (in promise) TypeError Cannot read properties of undefined