乐趣区

关于mqtt:EMQ-X-与-RabbitMQ-消息服务器-MQTT-性能对比上

本文素材来源于 RabbitMQ Summit 2019 会议上 Erlang Solutions 工程师 Grigory Starinkin 的发言内容。原内容次要对 MQTT 音讯服务器 EMQ X 与 RabbitMQ 进行了介绍及压力测试比照。在此基础上,咱们对其进行了补充,深入分析了 EMQ X 以及 RabbitMQ 的在外围架构上的偏重,并据此剖析了它们为 MQTT 集群模式体现带来的不同影响。

MQTT 协定 – 订阅和公布

MQTT 是一个十分轻量级的订阅和公布协定,当初曾经是物联网畛域最具统治位置和应用最宽泛的传输协定。MQTT 协定每个音讯起码仅需 2 个字节(其中报头仅需 1 个字节,其余字节能够全副作为音讯载荷)就能够实现通信,专为那些资源和空间无限、功耗敏感的硬件所打造。其次要模式是 Pub/Sub(公布 / 订阅),客户端能够表演两个角色,一个角色是发布者,其在连贯到服务器之后将针对某个特定主题发送音讯给服务器;另一个角色是订阅者,能够订阅感兴趣的主题来接管其中的音讯。订阅者也能够应用通配符订阅主题,这样就能够一次订阅多个不同的主题,还能够应用共享订阅进行负载平衡散发。

以下图片揭示了 MQTT 协定是如何运作的:

目前市场上有很多 MQTT 客户端 SDK,也有很多 MQTT Broker。EMQ X 和 RabbitMQ 是 Erlang 家族中具备代表性的两大开源音讯服务器,咱们接下来将针对 MQTT 场景对其进行深刻比照。

EMQ X 与 RabbitMQ

EMQ X 是基于高并发的 Erlang/OTP 语言平台开发,反对百万级连贯、分布式集群架构、公布订阅模式的开源 MQTT 音讯服务器。开源至今,EMQ X 在寰球物联网市场失去了广泛应用。在开源版根底上,还陆续倒退了商业版和提供云版本(cloud-hosting)(https://www.emqx.com/zh/cloud)。EMQ X 反对很多插件,具备弱小拓展能力,用户依附插件能够实现更多的性能。

RabbitMQ 是实现了高级音讯队列协定(AMQP)的开源音讯代理软件(亦称面向音讯的中间件)。RabbitMQ 服务器也是基于 Erlang 语言开发的,当初能够通过插件配置的模式,使其反对 MQTT 协定。

不难发现,他们都选用了 Erlang 作为开发语言,并且他们都应用了 Erlang 语言携带的分布式数据库管理系统 —— Mnesia。Mnesia 实用于替换路由拓扑和在集群之内的节点之间替换信息。

压力测试

MQTT 服务器在理论应用中的性能通常被用户作为判断一个服务器好坏的规范,因而本次评测也将重点关注这两个服务器在压力测试下的性能测试后果。

测试工具

本次压力测试的工具选用了 MZBench。MZBench(https://github.com/mzbench/mzbench)是一个应用 Erlang 语言写的测试工具。它具备以下三个类型的节点:

  • MZSever:能够用来创立场景(scenarios),例如创立一个发布者和多个订阅者。这些信息会作为服务器传送至 MZBench;
  • MZController:从服务器产生的信息会进一步被传送到这里;
  • MZNodes:它们会作为 MQTT 客户端来连入你的集群,如下图所示。

这次评测应用了一个云主机 M5 large 的实例,每个 MQTT 音讯服务器集群由 3 个节点组成,每个节点的配置是双核,8GB 内存。须要强调的是,咱们对于 EMQ X 和 RabbitMQ 的测试应用了完全一致的硬件资源以打消变量。所有这些都装备了 Prometheus 节点导出器用于将指标推送到 Prometheus,并由 Grafana 进行最初的数据收集。

测试场景

压力测试将会有两个场景,「多对一」和「一对多」。

多对一

许多设施作为发布者,如温度传感器或者是压力传感器,发送数据给一个服务器。服务器再将这些数据发送给一个控制器(即订阅者)解决这些数据。

一对多

一个控制器作为发布者将音讯传送给服务器,再由服务器将这些音讯传送给多个作为订阅者的设施。

在每个场景里,「多」的那一方的数量将会从 2000 个逐步回升到 10000 个。每个场景里,每一秒会发送一条载荷为 256 字节的音讯。这样的公布并不会造成过大的吞吐量。仅仅应用 256 字节载荷是为了展现出这两个服务器的工作原理,以及他们的集群模式如何对这些场景作出反应的。

测试后果

左侧 Y 轴是指 CPU 占用,底部 X 轴是指「多」侧的客户端数量变动。

多对一

从「多对一」的后果能够看出,EMQ X 和 RabbitMQ 相比并没有太大差异。

一对多

然而从「一对多」的后果来看,RabbitMQ 相比于 EMQ X 的确有很显著的差距。


造成这种差距的起因是什么?咱们将在下篇内容中具体解析具体起因。

版权申明:本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/emqx-or-rabbitmq-part-1

技术支持:如对本文或 EMQ 相干产品有疑难,可拜访 EMQ 问答社区 https://askemq.com 发问,咱们将会及时回复反对。

更多技术干货,欢送关注咱们公众号【EMQ 中文社区】。

退出移动版