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

鏈接海量物聯網設備的 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 原創,轉載請註明出處。

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

相關文章
相關標籤/搜索