物聯網傳統私有 TCP 協議服務遷移 —— EMQ X 私有 TCP 協議支持

前言

MQTT 是 IBM 於 1998 年設計和開發的工做在 TCP/IP 協議簇上是基於 TCP 協議的應用層協議。MQTT 採用輕量級的發佈/訂閱範式進行消息傳輸,旨在爲低帶寬和不穩定的網絡環境中的物聯網設備提供可靠的網絡服務,設備須要連結在消息中間件 (MQTT Broker)上進行消息通訊。git

衆多物聯網協議中,MQTT 以其開放、輕量、節能、通用等特色,被愈來愈多的企業所接受,已經成爲物聯網通訊協議的事實標準。但因爲所在行業特殊性或其餘種種緣由,在物聯網行業中有大量一樣基於 TCP/IP 的通訊協議:有造成規模的標準的行業協議如電力、道路交通、工控協議,也有公司、項目甚至是我的開發的私有協議。不管新舊項目都有可能遇到沒法使用 MQTT 協議的困境。github

物聯網傳統私有 TCP 協議存在的問題

TCP 協議通訊涉及網絡編程,客戶端與服務端軟件都須要應對和處理複雜的網絡環境、業務邏輯和組件架構問題,實際開發中每一個組件都須要在均衡性能和穩定性的同時兼顧安全性易用性,爲開發帶來了很大難度。編程

加之私有 TCP 協議因爲較爲小衆或者具有較強的行業專注性致使用戶較少,每每缺少一個優秀的客戶端和服務端軟件,隨着業務的發展設備數量增多通訊流量超出預期和功能需求增改,整個業務中潛在的問題將會被放大:安全

  • 服務端單機性能較差,水平擴展難度較大,服務能力限制了業務增加;
  • 在服務端/客戶端增改功能難度較大,限制了應用層功能需求發展;
  • 缺乏可靠的運維體系,運維管理存在不許確、不及時的問題。

EMQ X 做爲一款優秀的開源 MQTT Broker,在支持高性能、大規模標準 MQTT 協議百萬設備接入、支持集羣水平拓展的基礎上,拓展了私有 TCP 協議接入並集成大量開箱即用的功能:多種方式的認證鑑權、發佈訂閱 ACL 控制,規則引擎消息處理、消息存儲與橋接,完備的監控運維繫統、外部 REST API 控制調用等。bash

在高性能、高拓展性的基礎上,EMQ X 打通了上層應用程序對設備鏈接/通訊整個生命週期控制和數據交互通道,使得用戶能夠快速完成物聯網應用開發。服務器

目前 EMQ X 經過服務端適配/設備側適配的方式,提供完整的私有 TCP 接入方案:網絡

  • 服務端適配:針對既有私有 TCP 協議,在不改動舊網設備的狀況下調整服務器功能增長對的適配插件,適配後設備能夠無縫遷移鏈接到 EMQ X;
  • 設備側適配:針對新設備,根據 EMQ 提供的 EMQ 私有 TCP 協議規範 和接入 SDK 在設備側開發調整,適配後設備能夠無縫遷移鏈接至 EMQ X。

私有 TCP 協議設備接入示例

EMQ X TCP 私有協議接入的鏈接在應用層抹平了與 MQTT 鏈接的差別,以 emqx-tcp 插件爲例,部分配置項以下:架構

## 上行主題。上行消息到 EMQ 系統中的消息主題
##
## 佔位符:
##   - %c: 接入客戶端的 ClientId
##   - %u: 接入客戶端的 Username
tcp.proto.up_topic = tcp/%c/up

## 下行主題。客戶端接入成功後, emqx-tcp 會訂閱
## 該主題,以接收 EMQ 系統向該類型的客戶端下
## 發的消息。
##
## 佔位符:(同上)
tcp.proto.dn_topic = tcp/%c/dn

從配置項中咱們能夠看出私有 TCP 協議接入的通訊模式:併發

  • 客戶端的上行消息將發佈到 tcp/%c/up 主題,EMQ X 中其餘客戶端包括應用程序訂閱該主題便可接收到私有 TCP 協議設備信息;
  • 經過 EMQ X 內置的 REST API 或任意客戶端向 tcp/%c/dn 發佈消息便可送達該客戶端。

由此咱們與創建了私有 TCP 協議客戶端創建了雙向通訊,同時客戶端接入前可使用 EMQ X 內置的認證鑑權組件進行認證,消息抵達的時候亦可以使用發佈訂閱 ACL 組件進行訪問控制。整個環節中,規則引擎、消息橋接、持久化組件配置相關規則後也能夠處理該部分數據。框架

服務端適配

EMQ 爲客戶提供的私有化付費開發定製服務中包括私有 TCP 協議接入適配項目。

服務端適配針對既有私有 TCP 協議,在不改動舊網設備的狀況下調整服務器功能,適配後設備能夠無縫遷移鏈接到 EMQ X。EMQ X 系統分層中鏈接層負責處理服務端 Socket 鏈接與 MQTT 協議編解碼,其功能以下:

  1. 基於 eSockd 框架的異步 TCP 服務端
  2. TCP Acceptor 池與異步 TCP Accept
  3. TCP/SSL, WebSocket/SSL 鏈接支持
  4. 最大併發鏈接數限制
  5. 基於 IP 地址(CIDR)訪問控制
  6. 基於 Leaky Bucket 的流控
  7. MQTT 協議編解碼
  8. MQTT 協議心跳檢測
  9. MQTT 協議報文處理

image-20191112155608683.png

圖 1 EMQ X 功能架構圖 圖中紅框部分即爲私有 TCP/UDP 協議層

在當下架構設計中,要適配特定的私有 TCP 協議,僅需在鏈接層拓展相應的協議編解碼和報文處理功能。用戶以插件的形式擴展 EMQ X 協議適配器後,便可讓私有協議 TCP 設備無需通過網關/代理服務器直接接入 EMQ X,讓項目開發使用充分享受 EMQ X 帶來的便利。

設備側適配:EMQ 私有 TCP 協議規範

設備側適配針對新設備,根據 EMQ 提供的 EMQ 私有 TCP 協議規範 和接入 SDK 在設備側開發調整,適配後設備能夠無縫遷移鏈接至 EMQ X。

通過多個成熟項目的私有 TCP 協議開發定製經驗上,EMQ 推出一個通用的、基於 TCP 私有協議的接入規範 EMQ 私有 TCP 協議規範,相較於 MQTT 協議更加輕量,爲私有 TCP 接入提供了完整的解決方案。

EMQ X TCP 包含一個私有 TCP 協議標準和對應的接入插件 emqx-tcp,整個規範設計原則以下:

  1. 輕量: 儘可能減小頭部、控制字段的字節大小;
  2. 簡潔: 私有 TCP 協議,主要功能定位在透傳上層應用/協議的數據報文。因此功能應當簡潔,專一透明傳輸便可;
  3. 可靠: 保證消息有序可達。

規範中的 emqx-tcp 做爲一個靠近端側的一個接入模塊,按照其功能邏輯和整個系統的關係,將整個消息交換的過程能夠分紅三個部分:終端側,平臺側和其它側:

|<-- Terminal -->|<--------- Broker Side --------->|<---  Others  --->|
|<-    Side    ->|                                 |<--    Side    -->|

+---+                                                PUB  +-----------+
| D |  INCOMING  +----------+    PUB     +---------+   -->| subscriber|
| E |----------->|          |----------->|         |--/   +-----------+
| V |            | emqx-tcp |            |  EMQ X  |
| I |<-----------|          |<-----------|         |<--   +-----------+
| C |  OUTGOING  +----------+    PUB     +---------+   \--| publisher |
| E |                                                PUB  +-----------+
+---+
  1. 終端側,經過 EMQ X TCP 定義的 TCP 私有協議進行接入,而後實現數據的上報,或者接收下行的消息。
  2. 平臺側,主體是 emqx-tcp 接入插件和 EMQ X 系統。emqx-tcp 負責報文的編解碼,代理訂閱下行主題。實現將上行消息轉爲 EMQ X 系統中的 MQTT 消息 PUBLISH 到整個系統中;將下行的 MQTT 消息轉化爲 TCP 私有協議的報文結構,下發到終端。
  3. 其它側,能夠對 2 中出現的上行的 PUBLISH 消息的主題進行訂閱,以接收上行消息。或對發佈消息到具體的下行的主題,以發送數據到終端側。

兩種適配方式的比較

目前 EMQ X TCP 協議規範emqx-tcp 插件是隨 EMQ X Enterprise 分發的,EMQ X 企業版用戶能夠自由使用該部分功能,依據 EMQ 私有 TCP 協議規範 進行設備側的驅動、通訊開發,從設備側適配私有 TCP 協議接入。

但實際物聯網項目中設備側的協議多種多樣,舊項目或行業相關的項目使用有其餘私有 TCP 協議規範的時候 emqx-tcp 插件並不能直接適用,此時就須要從服務端來進行適配。

EMQ X TCP 協議規範emqx-tcp 插件更多價值是創建在諸多項目經驗上,爲企業私有 TCP 協議定製提供一個成熟方案。

EMQ 對私有 TCP 協議接入適配的僅在 EMQ X 企業版支持,適配後交付 EMQ X Enterprise 與對應的功能插件,開源用戶如具有 Erlang 開發經驗亦可自行開發實現。

歡迎各位用戶下載試用 EMQ X Enterprise,在私有 TCP 協議接入定製包括其餘私有化定製方面有任何需求能夠同 EMQ 聯繫:


更多信息請訪問咱們的官網 emqx.io,或關注咱們的開源項目 github.com/emqx/emqx ,詳細文檔請訪問 官方文檔

相關文章
相關標籤/搜索