MQTT QoS 設(shè)計:車聯(lián)網(wǎng)平臺消息傳輸質(zhì)量保障
前言
車聯(lián)網(wǎng)場景下會產(chǎn)生海量數(shù)據(jù),這些數(shù)據(jù)可以作為車輛診斷的基礎(chǔ),保障車輛安全穩(wěn)定地運行;也可以與手機(jī)等基礎(chǔ)設(shè)施進(jìn)行聯(lián)動,以提供更好的行車體驗。國家與行業(yè)也陸續(xù)出臺了相關(guān)政策文件,如《汽車駕駛自動化分級》、《國家車聯(lián)網(wǎng)產(chǎn)業(yè)標(biāo)準(zhǔn)體系建設(shè)指南》、《車聯(lián)網(wǎng)信息服務(wù)數(shù)據(jù)安全技術(shù)要求》等,對車聯(lián)網(wǎng)數(shù)據(jù)傳輸提出了更高要求。通信的安全、穩(wěn)定、可靠自始至終都是車聯(lián)網(wǎng)亙古不變的話題,因此一套完善的數(shù)據(jù)傳輸保障方案也是車聯(lián)網(wǎng)業(yè)務(wù)中不可忽視的一部分。
MQTT 協(xié)議中的 QoS 等級
作為現(xiàn)如今車聯(lián)網(wǎng)行業(yè)數(shù)據(jù)通信協(xié)議的首選, MQTT 協(xié)議中規(guī)定了消息服務(wù)質(zhì)量(Quality of Service,以下簡稱 QoS)。QoS 保證了在不同的網(wǎng)絡(luò)環(huán)境下消息傳遞的可靠性,可作為車聯(lián)網(wǎng)場景中保障消息可靠性傳輸?shù)氖滓獙崿F(xiàn)技術(shù)。
MQTT 設(shè)計了 3 個 QoS 等級:
(1) QoS 0
消息最多傳遞一次,如果當(dāng)時 MQTT 客戶端不可用,則會丟失該消息。Sender (可能是 Publisher 或者 Broker) 發(fā)送一條消息之后,就不再關(guān)心它有沒有發(fā)送到對方,也不設(shè)置任何重發(fā)機(jī)制。
(2) QoS 1
消息傳遞至少 1 次。包含了簡單的重發(fā)機(jī)制,Sender 發(fā)送消息之后等待接收者的 ACK,如果沒收到 ACK 則重新發(fā)送消息。這種模式能保證消息至少能到達(dá)一次,但無法保證消息重復(fù)。
(3) QoS 2
消息僅傳送一次。設(shè)計了重發(fā)和重復(fù)消息發(fā)現(xiàn)機(jī)制,保證消息到達(dá)對方并且嚴(yán)格只到達(dá)一次。
車聯(lián)網(wǎng)場景中的消息 QoS 設(shè)計
首先需要明確的是 QoS 級別越高,消息交互越復(fù)雜,系統(tǒng)資源消耗越大,所以 QoS 等級不是設(shè)置的越高越好。應(yīng)用程序可以根據(jù)自己的網(wǎng)絡(luò)場景和業(yè)務(wù)需求,選擇合適的 QoS 級別。
根據(jù)車聯(lián)網(wǎng)信息服務(wù)相關(guān)數(shù)據(jù)的屬性和特征,我們可以將其分為六類:基礎(chǔ)屬性類數(shù)據(jù)、車輛工控類數(shù)據(jù)、環(huán)境感知類數(shù)據(jù)、車控類數(shù)據(jù)、應(yīng)用服務(wù)類數(shù)據(jù)和用戶個人信息。那么在不同的車聯(lián)網(wǎng)場景中如何選擇 MQTT QoS 等級呢?
(1) 以下情況下可以選擇 QoS 0
可以接受消息偶爾丟失的場景下可以選擇 QoS 0。
車聯(lián)網(wǎng)提供的與娛樂相關(guān)的多媒體服務(wù),如天氣預(yù)報等數(shù)據(jù)等。還有部分涉車服務(wù)類數(shù)據(jù),如車輛歷史行車數(shù)據(jù)的上報、歷史行車操作數(shù)據(jù)等。
(2) 以下情況下可以選擇 QoS 1
車聯(lián)網(wǎng)大部分場景都是選用 QoS1,它實現(xiàn)了系統(tǒng)資源性能和消息實時性、可靠性最優(yōu)化。
QoS 1 廣泛運用于控車消息、行車上報數(shù)據(jù)(含新能源國標(biāo)和企標(biāo))、交通安全管控類數(shù)據(jù),和交通安全、道路安全相關(guān)的預(yù)警數(shù)據(jù)。
(3) 以下情況下可以選擇 QoS 2
對于不能忍受消息丟失,且不希望收到重復(fù)的消息,數(shù)據(jù)完整性與及時性要求較高的場景,可以選擇 QoS 2。
車聯(lián)網(wǎng)場景中 QoS 2 的應(yīng)用并不多,雖然其可以增加消息可靠性,但同時也使資源消耗和消息時延大幅增加。QoS 2 主要運用于對數(shù)據(jù)完整性與及時性要求較高的銀行、消防、航空等行業(yè),有些主機(jī)廠的行車告警和車輛充電樁計費費單消息會選擇采用 QoS 2。
特別提醒:
需要注意的是 MQTT 發(fā)布與訂閱操作中的 QoS 代表了不同的含義,發(fā)布時的 QoS 表示消息發(fā)送到 MQTT 服務(wù)器 使用的 QoS 等級,訂閱時的 QoS 表示 MQTT Broker 向自己轉(zhuǎn)發(fā)消息時可以使用的最大 QoS 等級。需要保障發(fā)送與訂閱的 QoS 一致,才能確保最終收到的消息是固定的 QoS 等級,否則會出現(xiàn)消費降級的情況。例如:A 發(fā)送的消息 QoS 為 2,B 訂閱的消息 QoS 為1,則最終接收到消息的 QoS 為 1。
EMQX 基于 QoS 等級的消息傳輸保障
為了更好地保障車聯(lián)網(wǎng)過程中人-車-路-網(wǎng)-云之間數(shù)據(jù)傳遞的安全可靠,同時提高消息吞吐效率,減少網(wǎng)絡(luò)波動帶來的影響, 云原生分布式物聯(lián)網(wǎng)消息服務(wù)器 EMQX 在全面適配 QoS 信令交互的基礎(chǔ)上,還設(shè)計了飛行窗口、消息隊列、消息全鏈路追蹤和離線消息存儲等功能來提高消息可靠性。
飛行窗口的設(shè)計可允許多個未確認(rèn)的 QoS 1 和 QoS 2 報文同時存在于網(wǎng)路鏈路上,消息隊列則可以滿足在消息鏈路中消息超出飛行窗口的同時對消息進(jìn)行進(jìn)一步存儲,以滿足客戶端離線時未接收的消息或者未確認(rèn)數(shù)據(jù)消息的存儲需求。飛行窗口同時也有 upgrade_qos 參數(shù)實現(xiàn)根據(jù)訂閱強(qiáng)制升級 QoS 之類的功能,可實現(xiàn) QoS 等級的一致性,確保不會出現(xiàn)消費降級的情況。此外,EMQX 還可提供限制業(yè)務(wù)按區(qū)域接入實現(xiàn)不同的 QoS 等級、數(shù)據(jù)橋接 QoS 管理、MQTT-SN 協(xié)議 QoS 管理等能力,均為車聯(lián)網(wǎng)場景下的消息可靠傳輸提供了有力保障。
下載體驗:https://www.emqx.com/zh/try?product=enterprise
結(jié)語
通過本文我們可以看到,MQTT 協(xié)議的 QoS 特性對于車聯(lián)網(wǎng)場景下消息數(shù)據(jù)的安全傳輸具有重要意義。作為完整支持 MQTT 協(xié)議標(biāo)準(zhǔn)的云原生分布式消息服務(wù)器,EMQX 在產(chǎn)品設(shè)計中充分利用 MQTT 協(xié)議的特性優(yōu)勢,為物聯(lián)網(wǎng)平臺與應(yīng)用構(gòu)建提供可靠的數(shù)據(jù)連接、移動、處理與集成。