博客 / 詳情

返回

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

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

產品介紹:https://www.emqx.com/zh/products/emqx

下載地址:https://www.emqx.com/zh/downloads?product=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.com/zh/blog/emqx-4-3-0-release-notes

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.