MQTT QoS 設計:車聯網平臺消息傳輸質量保障
前言
車聯網場景下會產生海量數據,這些數據可以作為車輛診斷的基礎,保障車輛安全穩定地運行;也可以與手機等基礎設施進行聯動,以提供更好的行車體驗。國家與行業也陸續出臺了相關政策文件,如《汽車駕駛自動化分級》、《國家車聯網產業標準體系建設指南》、《車聯網信息服務數據安全技術要求》等,對車聯網數據傳輸提出了更高要求。通信的安全、穩定、可靠自始至終都是車聯網亙古不變的話題,因此一套完善的數據傳輸保障方案也是車聯網業務中不可忽視的一部分。
MQTT 協議中的 QoS 等級
作為現如今車聯網行業數據通信協議的首選, MQTT 協議中規定了消息服務質量(Quality of Service,以下簡稱 QoS)。QoS 保證了在不同的網絡環境下消息傳遞的可靠性,可作為車聯網場景中保障消息可靠性傳輸的首要實現技術。
MQTT 設計了 3 個 QoS 等級:
(1) QoS 0
消息最多傳遞一次,如果當時 MQTT 客戶端不可用,則會丟失該消息。Sender (可能是 Publisher 或者 Broker) 發送一條消息之后,就不再關心它有沒有發送到對方,也不設置任何重發機制。
(2) QoS 1
消息傳遞至少 1 次。包含了簡單的重發機制,Sender 發送消息之后等待接收者的 ACK,如果沒收到 ACK 則重新發送消息。這種模式能保證消息至少能到達一次,但無法保證消息重復。
(3) QoS 2
消息僅傳送一次。設計了重發和重復消息發現機制,保證消息到達對方并且嚴格只到達一次。
車聯網場景中的消息 QoS 設計
首先需要明確的是 QoS 級別越高,消息交互越復雜,系統資源消耗越大,所以 QoS 等級不是設置的越高越好。應用程序可以根據自己的網絡場景和業務需求,選擇合適的 QoS 級別。
根據車聯網信息服務相關數據的屬性和特征,我們可以將其分為六類:基礎屬性類數據、車輛工控類數據、環境感知類數據、車控類數據、應用服務類數據和用戶個人信息。那么在不同的車聯網場景中如何選擇 MQTT QoS 等級呢?
(1) 以下情況下可以選擇 QoS 0
可以接受消息偶爾丟失的場景下可以選擇 QoS 0。
車聯網提供的與娛樂相關的多媒體服務,如天氣預報等數據等。還有部分涉車服務類數據,如車輛歷史行車數據的上報、歷史行車操作數據等。
(2) 以下情況下可以選擇 QoS 1
車聯網大部分場景都是選用 QoS1,它實現了系統資源性能和消息實時性、可靠性最優化。
QoS 1 廣泛運用于控車消息、行車上報數據(含新能源國標和企標)、交通安全管控類數據,和交通安全、道路安全相關的預警數據。
(3) 以下情況下可以選擇 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 協議的特性優勢,為物聯網平臺與應用構建提供可靠的數據連接、移動、處理與集成。