当前位置:   article > 正文

EMQX简介

emqx

EMQX是什么?

EMQX 是一款大规模可弹性伸缩的云原生分布式物联网 MQTT 消息服务器。支持亿级的MQTT服务订阅。是目前相对性能较好的MQTT Broker,提供三种服务:1.云服务版本;2.商业版;3.开源版。

EMQX特性

  • 开放源码:基于 Apache 2.0 许可证完全开源,自 2013 年起 200+ 开源版本迭代。
  • MQTT 5.0:100% 支持 MQTT 5.0 和 3.x 协议标准,更好的伸缩性、安全性和可靠性。
  • 海量连接:单节点支持 500 万 MQTT 设备连接,集群可扩展至1亿并发 MQTT 连接。
  • 高性能:单节点支持每秒实时接收、移动、处理与分发数百万条的 MQTT 消息。
  • 低时延:基于 OTP 软实时的运行时系统设计,消息分发与投递时延低于 1 毫秒。
  • 高可用:采用 Masterless 的大规模分布式集群架构,实现系统高可用和水平扩展。

集群设计

EMQX 分布式的基本功能是将消息转发和投递给各节点上的订阅者,同一个主题的订阅者可能会绑定到不同节点,实现以上功能则在集群中维护了几个与之相关的数据结构:订阅表,路由表,主题树。

  • 订阅表: 主题 - 订阅者
    MQTT 客户端订阅主题时,EMQX 会维护主题(Topic) -> 订阅者(Subscriber) 映射的订阅表。订阅表只存在于订阅者所在的 EMQX 节点上,例如:
node1:
    topic1 -> client1, client2
    topic2 -> client3
node2:
    topic1 -> client4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 路由表: 主题 - 节点
    而同一集群的所有节点,都会复制一份主题(Topic) -> 节点(Node) 映射的路由表,例如:
topic1 -> node1, node2
topic2 -> node3
topic3 -> node2, node4
  • 1
  • 2
  • 3
  • 主题树: 带通配符的主题匹配
    除路由表之外,EMQX 集群中的每个节点也会维护一份主题树(Topic Trie) 的备份。
    例如下述主题订阅关系:
    客户端 节点 订阅主题
    client1 node1 t/+/x, t/+/y
    client2 node2 t/#
    client3 node3 t/+/x, t/a
    在所有订阅完成时,EMQX 中会维护如下主题树 (Topic Trie) 和路由表 (Route Table):
t/+/x -> node1, node3
t/+/y -> node1
t/#   -> node2
t/a   -> node3
  • 1
  • 2
  • 3
  • 4

消息派发工程

MQTT 客户端发布消息时,所在节点会根据消息主题,检索路由表并转发消息到相关节点,再由相关节点检索本地的订阅表并将消息发送给相关订阅者。

例如 client1 向主题 t/a 发布消息,消息在节点间的路由与派发流程:

client1 发布主题为 t/a 的消息到节点 node1
node1 通过查询主题树,得知 t/a 可匹配到现有的 t/a、t/# 这两个主题。
node1 通过查询路由表,得知主题 t/a 只在 node3 上有订阅者,而主题 t/# 只在 node2 上有订阅者。故 node1 将消息转发给 node2 和 node3。
node2 收到转发来的 t/a 消息后,查询本地订阅表,获取本节点上订阅了 t/# 的订阅者,并把消息投递给他们。
node3 收到转发来的 t/a 消息后,查询本地订阅表,获取本节点上订阅了 t/a 的订阅者,并把消息投递给他们。
消息转发和投递结束。
请添加图片描述

数据分片与共享方式

EMQX 的订阅表在集群中是分片(partitioned)的,而主题树和路由表是共享(replicated)的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/188679
推荐阅读
相关标签
  

闽ICP备14008679号