背景
MQTT 是一个开放的工业标准,是一个轻量级的基于发布订阅模型的信息协议,尤其适合用于有些非靠谱网络环境下的小型和嵌入式设备运用,物联网行业兴盛下可选的MQTT Broker有非常多,除了经典的Mosquitto和AWS、Azure,百度云、阿里云、IBM等几个供给物联网MQTT接入服务的制品外,可用于商场生产的MQTT Broker还有多款,本文将重点介绍有些EMQ与VerneMq。
EMQ
介绍
EMQ X (简叫作 EMQ), 是一款完全开源,高度可伸缩,高可用的分布式 MQTT 信息服务器,同期亦支持 CoAP/LwM2M 一站式 IoT 协议接入。EMQ 是 5G时代万物互联的信息引擎,适用于IoT、M2M 和移动应用程序,可处理千万级别的并发客户端,EMQ是国人出产的一个开源Broker,已然用于非常多企业生产了,文档和资料亦非常齐全,除开源版本亦有企业版。EMQ 做为物联网应用研发和物联网平台搭建必须用到的基本设备软件,重点在边缘和云端实现物联网设备互联与设备上云,供给物联网设备接入、协议处理、信息路由、数据存储、流数据处理等核心能力。
特性
EMQ 特性: 物联网设备一站式连接。3G/4G/5G&NB-IoT 全网络支持,TLS/DTLS 多重网络安全,X.509 证书等多种身份认证;高并发低时延,大规模分布式。千万级并发连接,百万级信息吞吐,毫秒级信息时延。大规模分布式,高可用集群架构,弹性伸缩安排;扩展模块与插件。EMQ 内置扩展插件架构,支持以插件方式供给认证、ACL、存储接口,能非常方便的与上层物联网应用及其他 IT系统快速集成;多种物联网协议支持。完整支持 MQTT V5.0 协议规范,并下兼容 MQTT V3.1 和 V3.1.1,还可扩展支持 MQTT-SN、CoAP、LwM2M、WebSocket、STOMP或私有 TCP 等多种物联网协议;强大的规则引擎,快速应用集成。内置强大的规则引擎,一站式数据提取、过滤与转换。灵活集成 SQL、NoSQL、时序数据库,及 Kafka 等流处理中间件。快速应用集成与连续创新;边缘到云端,云端到跨云安排。从资源受限的边缘计算设备,到私有云、混合云和公共云之上,到跨域、跨 IDC 与跨多云,EMQ 支持理学机、VM、容器/K8S 跨平台任意安排;完全开放源码。EMQ 基于 Apache License 2.0 开源协议,无论是制品原型设计、物联网创业机构、还是大规模的商场安排,EMQ 都支持开源免费运用
EMQ 功能: 完整的 MQTT V3.1/V3.1.1 及 V5.0 协议规范支持(QoS0, QoS1, QoS2 信息支持、持久会话与离线信息、Retained 信息与Last Will 信息支持)TCP/SSL 连接支持,支持TLS/PSK 加密算法MQTT/WebSocket/SSL 支持HTTP 信息发布接口支持支持$SYS/# 系统主题、共享订阅 ($share/:group/topic)、客户端在线状态查找与订阅支持、延时 Publish ($delay/topic)支持客户端 ID 或 IP 位置认证,用户名秘码认证,LDAP、数据库(Redis、MySQL、PostgreSQL、MongoDB)、HTTP 认证集成,浏览器 Cookie 认证基于客户端 ID、IP 位置、用户名的拜访掌控 (ACL)多服务器节点集群 (Cluster)、网络分区自动愈合、按分区配置节点,且集群支持 manual、mcast、dns、etcd、k8s 等多种集群发掘方式信息速率限制、连接速率限制信息桥接(开源版本支持桥接EMQ X,企业版本支持Kafka、RabbitMQ、Pulsar、RocketMQ桥接)支持Stomp 协议、MQTT-SN 协议、CoAP 协议、LwM2M 协议、Stomp/SockJS 支持Flapping 检测,规定客户端在指按时间内断开次数过大后将禁止客户端在一按时间内登录黑名单支持,用户能够经过关联的 HTTP API 将指定客户端加入黑名单以拒绝该客户端拜访规则引擎(开源版本支持信息重新发布、桥接数据到 MQTT Broker、发送数据到 Web 服务,企业版本支持信息编解码,桥接到其它信息中间件或持久化到数据库,并可从持久化库中获取订阅关系)数据持久化(仅企业支持持久化到MySQL、Cassandra、InfluxDB等数据库中)
企业级EMQ 一站式处理方法如下图所示
架构
技术架构
异步架构:EMQ X 是基于 Erlang/OTP 平台的全异步的架构,异步 TCP 连接处理、异步主题 (Topic) 订阅、异步信息发布。仅有在资源负载限制部分采用同步设计,比如 TCP 连接创建和 Mnesia 数据库事务执行。EMQ X 3.0 版本中,一条 MQTT 信息从发布者 (Publisher) 到订阅者 (Subscriber),在 EMQ X Broker 内部异步流过一系列 Erlang 进程 Mailbox:
概念模型:EMQ X 概念上更像一台网络路由器 (Router) 或交换机 (Switch),而不是传统的企业级信息队列 (MQ)。相比网络路由器按 IP 位置或 MPLS 标签路由报文,EMQ X 按主题树 (Topic Trie) 发布订阅模式在集群节点间路由 MQTT 信息:
安排架构
EMQ X 集群可做为物联网接入服务(IoT Hub)安排,日前 EMQ 在青云、阿里云、AWS 等云服务供给商上均供给开箱即用的免费软件镜像,针对特殊硬件平台和系统版本如树莓派、Linux ARM,可运用源码编译安装,LB (负载平衡器) 负责分发设备的 MQTT 连接与信息到 EMQ X 集群,LB 加强 EMQ X 集群可用性、实现负载平衡以及动态扩容,开源 LB有Nginx、Haproxy。
典型安排架构:
VerneMQ
介绍
VerneMQ 基于 Erlang/OTP 平台研发,是高性能的分布式 MQTT 信息代理。它能够在硬件上水平和垂直扩展,以支持海量并发客户端,同期保持较低的延迟和容错能力,它实现了 OASIS 行业标准MQTT 协议。但 VerneMQ 还旨在经过供给一组与可扩展性、靠谱性和高性能以及操作简单性关联的独特功能,将信息传递和物联网应用程序提高到一个新的水平。
特性
VerneMQ 特性: 完全开放源码。基于 Apache License 2.0 开源协议,可免费进行商场修改和重用VerneMQ 无任何形式限制、无服务节点数量限制、无时间限制、无并发限制,并可供给商场支持可随时替换VerneMQ,功能能够在任何实现 MQTT 规范的broker上运行灵活,VerneMQ 支持自定义插件,经过Lua 脚本来扩充能力采用Erlang/OTP平台研发,支持故障隔离和容错内置的可扩展指标,便于与第三方系统集成
VerneMQ 功能: 完整的 MQTT V3.1/V3.1.1 及 V5.0 协议规范支持,支持QoS 0、QoS 1、QoS 2服务级别支持基于文、数据库(PostgreSQL、MySQL、Redis 和 MongoDB )的身份验证和授权支持数据桥接(桥接到MQTT Broker)支持系统主题( $SYS )、共享订阅TCP/SSL 连接支持MQTT/WebSocket/SSL 支持支持集群支持集成Graphite 、 Prometheus可扩展插件架构,支持Lua 插件脚本支持会话平衡、信息负载避免信息过载(用于系统守护),当队列中数据大于配置量,将进行信息丢弃,支持队列数据FIFO 或 LIFO 处理方式数据持久化(基于LevelDB)支持PROXY v2 协议支持webhookHTTP 管理 API
架构
VerneMQ采用Erlang实现,Erlang 旨在支持高并发和高可用性(容错)系统,数据副本采用Plumtree协议实现,MQTT 中的保存信息是运用主题做为键存储在代理上的信息,每当客户端订阅该特定主题时,代理都会发送该信息的副本,设计和构建从 Basho 构建和打包 Riak 数据库的方式以及 Plumtree 中借鉴了非常多,主题 trie 路由算法完全参考RabbitMQ MQTT 插件,采用LevelDB 做为数据持久化存储。
总结
EMQX 优良在于高并发连接与高吞吐信息的服务能力,以及物联网协议栈支持的完整性;扩展能力较强,无需太多研发,VerneMQ供给基本的并发连接与高吞吐信息的服务能力,物联网协议栈的完整性较弱仅支持 MQTT 协议;扩展能力较差,基本的业务组件支持度不足,商场成熟度不足客户量较少,缺乏开箱即用的功能插件。需求数据持久化避免节点殒机数据丢失可思虑VerneMQ以及企业版EMQ X,开源版本EMQ X需要采用扩展方式实现数据持久化,然则EMQ X经过开放标准物联网协议 MQTT、CoAP 和 LwM2M 连接任何设备,基于 TLS/SSL 和 X.509 证书的认证机制保证通信安全。运用 EMQ X 企业版本集群,能够毫不费力地弹性扩展到数千万个并发的 MQTT 连接,且因为是国产化软件支持、关注度以及功能丰富程度高于VerneMQ。
对比项目
EMQ
VerneMQ
License
开源+商场版
开源+商场定制
机构/社区
EMQ
VerenMQ
开源协议
Apache License 2.0
Apache License 2.0
研发团队
杭州映云科技有限机构
Octavo Labs AG,瑞士
研发语言
Erlang
Erlang
集群架构
支持
支持
支持协议
MQTT、CoAP、MQTT-SN、WebSocket、TCP、UDP、LwM2M
MQTT WebSocket
系统性能
集群支持千万级并发,单机开源十万企业版百万并发
集群支持百万级并发
MQTT
v3.1,v3.1.1,v5.0
v3.1,v3.1.1,v5.0
边缘计算
EMQ X Edge 支持树莓派,ARM 等架构,支持数据同步到云服务 Azure IoT Hub AWS
不支持
安全与认证
TLS/DTLS、X.509证书、JWT、OAuth2.0、应用协议(ID/用户名/秘码)、数据库与接口形式的认证与 ACL 功能(LDAP、DB、HTTP)
TLS/DTLS、X.509证书、配置文件形式的认证与 ACL 功能、数据库形式的认证与 ACL 功能,但支持数据库较少
数据持久化
企业版支持将信息数据持久化至外边数据库如 Redis、MySQL、PostgreSQL、MongoDB、Cassandra、Dynamo 等,开源版在内存中宕机则丢失
支持持久化至 Google LevelDB
扩展方式
Webhook、Trigger、Plugin 等,支持 Erlang 与 Lua、Java、Python 扩展研发
Webhook、Trigger、Plugin 等,支持 Erlang 与 Lua 扩展研发
数据存储
仅企业版
适配数据库:Redis、Mysql、PostgreSQL、MongoDB、Cassandra、OpenTSDB、TimescaleDB、InfluxDB
适配信息队列:Kakfa、RabbitMQ、Pulsar
桥接模式:支持桥接至标准 MQTT 协议信息服务
开源版支持 HTTP 将数据同步、存储
适配数据库:无,供给 Erlang 和 Lua 扩展研发
适配信息队列:无
桥接模式:支持桥接至标准 MQTT 协议信息服务
管理监控
支持可视化的 Dashboard,实现集群与节点的统一集中管理 支持第三方监控工具 Prometheus ,供给可视化 Grafana 界面模板
内置简单状态管理可视化界面 支持第三方监控工具 Prometheus ,可供给可视化 Grafana 界面
规则引擎
支持规则引擎,基于 SQL 的规则引擎给予 Broker 超越通常信息中间件的能力。除了在接受转发信息之外,规则引擎还能够解析信息的格式(企业版)。
规则引擎由信息的订阅,发布,确认的事件触发,按照信息的负载来执行相应的动作,降低应用研发的繁杂度。
不支持
举荐阅读
MQTT vs. AMQP 协议对比
Apache Storm vs. Spark Streaming
Apache hive vs. impala 大数据生态系统中的SQL分析引擎之争
HTTP vs. MQTT 物联网通信协议对比
|