鏈接海量物聯網設備的 MQTT 消息服務器 - EMQ X 是基於高併發的 Erlang/OTP 語言平臺開發,支持百萬級鏈接和分佈式集羣架構。EMQ X 已經在全球物聯網市場普遍應用,不管是產品原型設計、物聯網創業公司、仍是大規模的商業部署,都支持無償使用。html
產品介紹:https://www.emqx.cn/products/brokergit
下載地址:https://www.emqx.cn/downloads#brokergithub
概覽
EMQ X v4.3.0 版本修復了一些已知問題並新增了諸多特性,在通配符訂閱性能、路由表內存佔用、規則引擎性能以及大量客戶端離線處理性能方面作了較大改進,同時將 多語言 擴展底層通訊方式由 erlport 更換爲更爲靈活的 gRPC 通訊。編程
該版本是 4.x 最後一個次要版本,旨在於爲用戶提供一個功能豐富、性能穩定的 MQTT 服務器,推薦全部 4.x 用戶升級到此版本,此後 4.x 版本將進入維護狀態,EMQ X Team 將進入到後續 5.0 版本開發工做中。緩存
訪問 EMQ X GitHub 倉庫,點擊右上角的 Watch 便可關注 EMQ X 5.0 最新動態。安全
特性概覽:observer_cli 查看 Erlang VM 運行情況服務器
升級到 4.3 版本
查看升級指南:https://docs.emqx.cn/broker/v4.3/changes/upgrade-4.3.html#升級到-4-3-版本架構
詳細更新日誌:https://docs.emqx.cn/broker/v4.3/changes/changes-4.3.html併發
性能改進
多語言擴展功能底層實現方式由 erlport 改成 gRPC
多語言擴展容許用戶使用其它編程語言如 Python、 Java 等直接向 EMQ X 掛載鉤子進行業務處理,接收並處理監聽器字節數據報文實現自定義協議的解析。運維
多語言擴展能以用戶熟悉的編程語言處理客戶端鏈接生命週期,快速集成到物聯網應用中;接入任意的私有協議,享受由 EMQ X 帶來的諸多性能和功能優點。
此前 EMQ X 多語言擴展基於 erlport 進行跨語言通訊,考慮到語言支持層面不廣、性能水平不足且會與 EMQ X 自身功能產生資源競爭問題。在此版本中咱們將底層方式更換爲 gRPC,可以更好的實現跨語言和跨平臺工做,提供更高的性能和清晰的管理能力,有效改善用戶開發和維護難度。
提高規則引擎的性能
此前咱們爲規則引擎添加了全部可用的鉤子,即便沒有建立規則 EMQ X 觸發任何事件時都會嘗試去匹配規則,致使沒必要要的開銷。
此版本中咱們進行了改進,僅爲已建立的規則添加必要的鉤子,有效降提高了規則引擎性能。
支持路由表壓縮,減小內存佔用
支持路由表壓縮,減小內存佔用並加強訂閱性能,但發佈性能會略受影響,所以提供了關閉選項。
優化通配符訂閱性能
優化 EMQ X 集羣條件下通配符訂閱性能,比以前版本提高了 10 倍以上。
提高大量客戶端同時離線時的處理性能
此前下線消息和新上線消息會在 Broker 進程堆積,咱們修復該問題實現了性能提高。
新增特性
規則引擎
- 規則引擎新增更新資源邏輯,能夠在不刪除規則的狀況下更換動做使用的資源
- 規則引擎 SQL 函數支持 unix 時間戳與 rfc3339 格式時間之間的轉換
- 保持對 EMQ X Broker 啓動後鏈接失敗的資源進行重試,避免資源短暫宕機恢復以後規則沒法恢復使用
運維管理
- 支持 observer_cli,在 console 啓動模式下輸入 observer_cli:start(). 可查看 Erlang VM 實時運行詳細情況
- Prometheus 支持集羣指標
- 支持單行日誌輸出,並支持 rfc3339 時間格式
- 支持 IPv6 自動探測
- 全部發行版都支持環境變量覆蓋配置文件(之前僅適用於 Docker)
- 開源版支持 Dashboard 上傳證書文件(之前僅適用於企業版)
MQTT 加強
- 共享訂閱分發策略配置爲 round_robin 時隨機選擇起始點
- 共享訂閱支持按源主題的 Hash 分發消息,設備與共享訂閱之間能夠有固定的分發通道
其餘功能
- WebSocket 鏈接支持獲取真實 IP 與 Port
- Websocket 監聽器支持從 subprotocols 列表中選擇支持的 subprotocol
- 支持 MySQL 8.0 的默認認證方法 caching_sha2_password
- 支持 Mnesia 認證信息的導入導出
- 容許使用 Base64 編碼的客戶端證書或者客戶端證書的 MD5 值做爲用戶名或者 Client ID
- 支持重啓監聽器,某些在監聽器設置無需重啓 EMQ X 便可更新
- 僅在正式版本中啓用數據遙測功能
- 支持清除全部 ACL 緩存
- Redis 哨兵模式支持 SSL 鏈接
- emqx_auth_clientid 與 emqx_auth_usernmae 合併爲 emqx_auth_mnesia。請參考 文檔 將數據到舊版本導出,並導入到 4.3 中
- Docker 默認輸出日誌到控制檯,設置 EMQX_LOG__TO=file 使日誌輸出到文件
- 支持輸出 JSON 格式的日誌,某些日誌分析系統如 ELK 能夠更好的進行配置使用
安全性提高
- 保護 EMQ X Broker 免受跨站點 WebSocket 劫持攻擊
- SSL 支持 verify 與 server_name_indication 配置項
- SSL 支持證書鏈最大長度以及私鑰文件密碼配置項
- JWT 認證支持 JWKS
開發構建
-
支持 Erlang/OTP 23
升級到 Erlang/OTP 23 版本,爲提升特性更新和錯誤修復速度,EMQ X fork 並維護了 Erlang/OTP 項目,默認使用 http://github.com/emqx/otp 進行構建。
-
新安裝包僅支持 macOS 10.14 及以上版本
-
項目調整爲 umbrella 結構
項目結構調整以後下降了依賴管理的複雜度,同依賴之間互相關聯的修改原子性獲得保障;同時 review 和測試複雜度下降,對社區開發者更加友好。
-
支持使用 Elixir 編譯插件
錯誤修復
MQTT 協議
- 修復 MQTT 心跳報文的處理
- 修復 MQTT 報文接收計數問題
- 限制飛行窗口的最大長度爲 65535
- 修復 Server Keep Alive 生效狀況下 Dashboard 中 Keep Alive 字段的值未同步的問題
網關
- 修復 CoAP 鏈接中 ACL 配置不生效的問題
- 修復使用相同 ClientID 的 CoAP 客戶端能夠同時接入的問題
- 修復 MQTT-SN 睡眠模式不可用的問題
- 修復 MQTT-SN 網關在睡眠模式下會丟棄 DISCONNECT 報文的問題
- 修復 LwM2M 網關將數字編碼、解碼爲無符號整型的問題
- 修復 Clean Session 爲 false 的 MQTT-SN 鏈接在非正常斷開時沒有發佈遺囑消息的問題
資源
- 修復 MySQL 認證 SSL/TLS 鏈接功能不可用的問題
- 修復 Redis 重連失敗問題
其餘修復
- 修復 ekka_locker 在極端條件下內存可能無限增加的問題
- 修復 MQTT 橋接功能中 max_inflight_size 配置項不生效的問題
- 修復 MQTT 橋接飛行窗口的問題
- 修復 MQTT 橋接功能中指標統計錯誤和 retry_interval 字段進行了屢次單位轉換的問題
- 修復告警持續時間計算錯誤的問題
- 修復過長的 Client ID 沒法追蹤的問題
- 修復查詢客戶端信息可能出現崩潰的問題
- 修復主題重寫與 ACL 在發佈訂閱時執行順序不一致的問題
- 修復 WebSocket 鏈接沒法使用對端證書做爲用戶名的問題
- 修復認證數據沒法導入的問題
- 修復 Docker 中 EMQ X 可能啓動失敗的問題
- 修復 OOM 時快速殺死鏈接進程
版權聲明: 本文爲 EMQ 原創,轉載請註明出處。