共计 4076 个字符,预计需要花费 11 分钟才能阅读完成。
NanoMQ 持续放弃稳步更新,0.9.0 将于 7 月初正式公布。此版本为大家带来了 2 个重要的性能更新:规定引擎和反对 QUIC 的 NanoSDK。同时还减少了离线数据缓存配置,各项性能优化和缺点修复也在继续进行中。
轻便易用的嵌入式规定引擎
规定引擎是 EMQX 深受宽广用户青睐的一项性能,NanoMQ 也依据用户需要推出了雷同的性能,用户当初能够不便地通过编写 SQL 规定对音讯进行解决后从新公布或存入数据库进行长久化。
NanoMQ 的规定引擎由对立音讯接口和各种不同指标插件组成,不同插件各自享有独立的配置文件。目前只有 SQLite 插件作为数据长久化选项,将来会减少更多的可选插件。
应用规定引擎须要先在全局配置 /etc/nanomq_rule.conf 里开启 SQLite 插件性能:
## Rule engine option, when persistence with | |
## rule engine, this option is must be ON. | |
## | |
## Value: ON | OFF | |
rule_option=ON | |
## Rule engine plugins option | |
## Choose a plugin to enable | |
## | |
## Value: enable/disable | |
rule_option.sqlite=enable | |
## Rule engine option database config path | |
## Rule engine plugin config path, default is exec path. | |
## | |
## Value: File nanomq_rule_sqlite.conf | |
rule_option.sqlite.conf.path=/etc/nanomq_rule_sqlite.conf |
而后再对应的插件配置文件 /etc/nanomq_rule_sqlite.conf 中配置对应的 SQL 语句和数据库参数:
## Rule engine option SQLite3 database path | |
## Rule engine db path, default is exec path. | |
## | |
## Value: File | |
rule.sqlite.path=/tmp/sqlite_rule.db | |
## Rule engine option SQLite3 database table name | |
## Rule engine db table name. | |
## | |
## Value: String | |
rule.sqlite.table=broker | |
## Rule engine option sql | |
## Rule engine sql clause. | |
## | |
## Value: String | |
SELECT * FROM "abc" WHERE payload.x.y = 10 |
如此配置,NanoMQ 就会应用配置中的 SQL 解决所有的 Publish 音讯后长久化到对应的 SQLite 数据库表中。
例如此时咱们公布两条不同的音讯到 abc 主题:
msg1: "{"x": {"y": 10},"z":"str1","a": 1111} | |
msg2: "{"x": {"y": 11},"z":"str1","a": 1111} |
而后就能在 SQLite 数据库中看到:
sqlite> SELECT * FROM Broker; | |
RowId|Qos|Id|Topic|Clientid|Username|Password|Timestamp|Payload | |
1|1|1|abc|nanomq-57a0d6ab|abc|(null)|1656066147|{"x": {"y": 10}, "z": "str1", "a": 1111} | |
2|1|1|abc|nanomq-9c1ca526|abc|(null)|1656066147|{"x": {"y": 10}, "z": "str1", "a": 1111} | |
3|1|1|abc|nanomq-7ff24b6f|abc|(null)|1656066147|{"x": {"y": 10}, "z": "str1", "a": 1111} | |
4|1|1|abc|nanomq-83e7ff63|abc|(null)|1656066147|{"x": {"y": 10}, "z": "str1", "a": 1111} |
可见只有合乎规定的音讯 msg1 被长久化到了数据库中。规定引擎目前反对规范 JSON 解析和罕用的 SQL 语句和符号,具体详情请参阅文档。
目前 NanoMQ 的规定引擎运行程序是在解决完 MQTT 音讯之后串行执行,如果规定耗时过多的话会影响 Broker 自身的性能和音讯吞吐。如果有许多数据须要通过规定引擎进行长久化,倡议将 /etc/nanomq.conf 中的 parallel=32 数量进步以减少逻辑线程数以反对更多规定和音讯的并行处理。
边缘数据缓存配置
边缘服务往往运行在弱网或者顽劣环境中,断网断电的状况时常产生。在之前的版本中,NanoMQ 的桥接性能反对了将未收到确认的 QoS 1/2 音讯缓存在本地 SQLite 中并主动重发来防止数据失落。此次公布的 v0.9.0 减少了对桥接连贯断开的解决,并且针对边缘场景减少了许多配置选项,以防止因为缓存的数据过大写满 Flash 或者写入次数过多导致 Flash 寿命耗尽。
/etc/nanomq_bridge.conf 的新增配置选项有:
## Enable sqlite cache | |
## Whether to enable sqlite cache | |
## 是否开启 SQLite 离线音讯缓存性能 | |
## Value: boolean | |
bridge.sqlite.enable=false | |
## Max message limitation for caching | |
## (0 means ineffective) | |
## Value: 1-infinity | |
## 最大缓存到磁盘 /Flash 的音讯条数限度 | |
bridge.sqlite.disk_cache_size=102400 | |
## Mounted file path | |
## SQLite 数据库文件门路 | |
## Value: path | |
#bridge.sqlite.mounted_file_path=/tmp/ | |
## The threshold of flushing messages to flash. | |
## flush msg to disk when reach this number | |
## Value: 1-infinity | |
## 数据刷盘的缓存窗口(音讯条数),倡议依据音讯大小设置为 音讯条数 * 音讯大小 = page size | |
bridge.sqlite.flush_mem_threshold=100 | |
## Resend interval (ms) | |
## The interval for resending the messages after failure recovered. (not related to trigger) | |
## 缓存音讯的重发距离 | |
## Value: 1-infinity | |
bridge.sqlite.resend_interval=5000 |
同时 0.9.0 版本也不再须要用户自行批改编译参数来启用 SQLite,当初能够通过配置文件管制 Broker 和桥接性能是否启用 SQLite 作为缓存选项。另外咱们也对 SQLite 的应用做了优化,开启了 WAL 模式,并采纳了全同步形式防止文件系统损坏。而且从这一个版本开始,桥接的离线缓存性能配置选项和 Broker 的 QoS 音讯默认缓存拆散,倡议只须要对云端桥接进行断网数据主动缓存和续传的用户不必开启 /etc/nanomq.conf 的 SQLite 性能。
NanoSDK:首个 C 语言的 MQTT over QUIC SDK
6 月 11 日,IETF 正式颁布了 HTTP/3 RFC 技术标准文档,QUIC 正式成为了传输层规范之一。IoT 利用常常会遇到诸如网络漫游、弱网环境频繁重连和网络拥塞等问题,利用 QUIC 的流式多路复用、分路流控、更低的连贯建设提早等个性,这些问题都能够失去显著改善。NanoSDK 0.6.0 基于 MsQuic 我的项目率先实现了 C 语言的第一个 MQTT over QUIC SDK。倡议搭配寰球首个反对 MQTT over QUIC 的 Broker——EMQX 5.0 一起应用。
NanoSDK 通过为 NNG 的传输层减少 QUIC 反对,使 MQTT、nanomsg 等协定可能从 TCP 转为 UDP,从而提供更好的物联网连贯体验。其外部将 QUIC Stream 和 MQTT 连贯映射绑定,并内置实现了 0RTT 疾速握手重连性能。
API 方面放弃了之前的应用习惯,一行代码即可基于 QUIC 创立 MQTT 客户端:
## Create MQTT over Quic client with NanoSDK | |
nng_mqtt_quic_client_open(&socket, url); |
音讯示例代码请参考:
https://github.com/nanomq/Nan…,编译后能够通过以下命令连贯 EMQX 5.0 的 14567 端口进行测试。
quic_client sub/pub mqtt-quic://54.75.171.11:14567 topic msg
其余性能优化及 Bug 修复
此外,NanoMQ 0.9.0 还有如下 bug 修复和更新优化:
- 减少了最大接管音讯长度和最大可转发音讯长度的配置选项,不便进行大音讯收发。
- 修复了 nanomq broker restart 重启命令不失效的状况。
- 勾销了对 C++ compiler 的编译要求。
- 修复了收到客户端 Disconnect 音讯不会清理会话和遗愿音讯的问题。
- 修复了 v0.8.0 中 MQTT over WebSocket 服务无奈失常工作的问题。
- 修复了客户端 unsub 会导致服务进行的问题。
- 修复了客户端大量公布音讯导致积压时,Sub 客户端忽然端断开导致的数据竞争问题。
行将到来
NanoMQ 将于下个月正式公布 0.10 stable release 版本,并反对 MQTT 多路桥接性能。目前此性能处于 Demo 阶段,在最新的主分支已能够应用。用户能够自行编译装置应用,欢送尝鲜:https://github.com/emqx/nanomq/。
版权申明:本文为 EMQ 原创,转载请注明出处。
原文链接:https://www.emqx.com/zh/blog/nanomq-newsletter-202206