EMQ X v4.3 正式發佈:性能大幅提升,更好用的多語言擴展

連接海量物聯網設備的 MQTT 消息服務器 - EMQ X 是基於高併發的 Erlang/OTP 語言平臺開發,支持百萬級連接和分佈式集羣架構。EMQ X 已經在全球物聯網市場廣泛應用,無論是產品原型設計、物聯網創業公司、還是大規模的商業部署,都支持免費使用。

產品介紹:https://www.emqx.cn/products/broker

下載地址:https://www.emqx.cn/downloads#broker

概覽

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 原創,轉載請註明出處。

原文鏈接:https://www.emqx.cn/blog/emqx-4-3-0-release-notes

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章