Performance evaluation of MQTT and CoAP via a common middleware

5.4k 词

  Performance evaluation of MQTT and CoAP via a common middleware(全文翻译)

1
2
3
4
5
6
7
8
9
10
Dinesh Thangavel
Faculty of Engineering National University of Singapore
Xiaoping Ma
Sense and Sense-Abilities, Institute for Infocomm Research
Alvin Valera
Sense and Sense-Abilities, Institute for Infocomm Research
Hwee-Xian Tan
Sense and Sense-Abilities, Institute for Infocomm Research
Colin Keng-Yan Tan
School of Computing National University of Singapore

摘要:无线传感器网络(WSN)通常由在有限资源的设备上操作的传感器节点和网关组成。因此,WSN需要带宽高效和节能的应用协议进行数据传输。消息队列遥测传输(MQTT)和约束应用协议(CoAP)是为资源受限设备提出的两种此类协议。在本文中,我们设计和实现了一个支持MQTT和CoAP的常用中间件,并提供了一个通用的编程接口。我们设计可扩展的中间件来支持未来的协议。使用通用的中间件,我们进行了实验,研究MQTT和CoAP在端到端延迟和带宽消耗方面的性能。实验结果表明,MQTT消息具有比CoAP消息更低的丢包率,延迟低于CoAP消息,丢失率较高的延迟。此外,当消息大小小,损失率等于或小于25%时,CoAP生成比MQTT更低的附加流量,以确保消息的可靠性。

引言

无线传感器网络正在部署用于大规模的环境参数测量,如温度,湿度和空气质量在城市和恶劣环境中。典型的WSN部署包括传感器节点和网关。传感器节点测量物理环境并将数据发送到网关节点。网关聚合来自各种传感器节点的数据,然后将数据发送到服务器/代理。

从端到端的角度来看,WSN可以被视为包括两个子网:(i)连接传感器节点和一个或多个网关节点的子网,其中传感器节点路由数据,直到使用WSN协议到达其中一个网关(例如,集合树协议),以及(ii)连接网关和后端服务器或代理的另一子网。由传感器节点生成的传感器数据通过网关传送到服务器。同时,有兴趣接收传感器数据的客户端连接到服务器以获取数据。图1显示了传感器数据如何从传感器节点流向网关,然后传送到服务器,最终传送到客户端的一个示例。

2-1

为了将由网关节点收集的所有传感器数据传送到服务器,前者需要一种具有带宽高效、节能且能够处理有限硬件资源(即主存储器和电源)的协议。因此,已经提出了诸如消息队列遥测传输(MQTT)和受限应用协议(CoAP)的协议来专门解决现实世界WSN部署场景的难题。

无线传感器网络将数据从网关传输到客户端的一种方式是“发布-订阅”架构。在这种架构中,需要数据(称为订阅者)的客户端向服务器(也称为代理)注册其兴趣。产生数据的客户端(称为发布者)将数据发送到服务器,该服务器将新鲜数据转发给订阅者。该架构的主要优点之一是需要数据的客户端和发送数据的客户端解耦,即传感器节点不需要知道对其数据感兴趣的客户端的身份,相反,客户端不需要知道生成传感器数据的传感器节点的身份。这种去耦使架构具有高度的可扩展性。“发布订阅”架构由机器到机器(M2M)协议(如MQTT和CoAP)支持。

本文着重于将网关节点处的聚合传感器数据传输到后端服务器或代理。本文有两个新颖的贡献:(i)我们开发了一个常见的中间件,可以根据网关的“发布-订阅”体系结构适应不同的应用协议;和(ii)我们使用普通中间件在不同的网络条件下实验性地评估了CoAP和MQTT的性能。普通中间件的主要优点之一是它能够根据网络条件自适应地选择最合适的协议。

本文的其余部分组织如下:第二部分概述了CoAP和MQTT,并介绍了常见的中间件设计。第三节介绍了用于评估常用中间件的实验设置,第四节提供了实验结果的讨论。第五节终于得出结论。

应用层协议和通用的中间件

A. 消息队列遥测传输协议(MQTT)

消息队列遥测传输(MQTT)协议是为资源有限的设备而设计的应用层协议。它使用基于主题的发布订阅体系结构。这意味着当客户端向特定主题T发布消息M时,所有订阅主题T的客户端将接收到消息M。就像超文本传输协议(HTTP),MQTT依赖于传输控制协议(TCP)和IP作为其底层。然而,与HTTP相比,MQTT被设计为具有较低的协议开销。

MQTT中的消息的可靠性由三个服务质量(QoS)等级来考虑。QoS级别0意味着消息最多传送一次,不需要接收确认。QoS级别1意味着每个消息至少传送一次,并且需要确认消息接收。在QoS级别2中,四次握手机制用于一次传递消息。

B. 受限应用协议(CoAP)

约束应用协议(CoAP)是最近开发的应用层协议,旨在用于资源约束设备的通信。该协议基于表征状态传输(REST)架构,并支持像HTTP这样的请求响应模型。除请求响应模型外,CoAP还使用扩展GET方法支持发布订阅模式。与MQTT不同,CoAP的发布订阅模型使用通用资源标识符(URI)而不是主题。这意味着用户将订阅由URI U指定的特定资源。当发布者将数据D发布到URI U时,则所有订阅者都将被通知如D所示的新值。

2-2

CoAP和MQTT的主要区别在于,前者运行在用户数据报协议(UDP)之上,而后者运行在TCP之上。由于UDP本质上不可靠,CoAP提供了自己的可靠性机制。这是通过使用“confirmable messages” 和“non-confirmable messages”来实现的。confirmable messages需要确认,而non-confirmable messages不需要确认。 CoAP和MQTT之间的另一个区别是不同QoS级别的可用性。MQTT定义了3个QoS级别,而CoAP不提供差异化的QoS。CoAP和MQTT的主要区别已经在图2中总结了。

C. 通用的中间件

CoAP和MQTT只是为了进行网关到服务器的通信而提出的两种协议,实际上为此提出了许多协议。为了使网关节点具有高度的灵活性,它必须支持各种协议,但同时它必须暴露出一个通用的API来简化网关应用的开发。因此,我们提出一个具有以下功能的常见中间件:

  • 可扩展的,支持现存的和未来的网关到服务器的数据传输协议。
  • 通用API,提供通用的编程接口来访问底层协议的不同功能;
  • 有适应能力的,在将来,中间件可以智能地决定使用给定某些约束的协议。

普通中间件的当前设计和实现如图3所示。开发了一个通用接口,使网关能够使用任何协议将从传感器节点聚合的数据转发到服务器。如上所述,中间件对扩展是开放的,使得新协议可以容易地并入到中间件中。

2-3

中间件的公共接口提供诸如publishMessage()和isPublishSuccess()之类的API调用,以发布消息,并检查发布的消息是否已被代理成功接收和接受。虽然MQTT和CoAP的各自的协议实现是不同的,但是发布订阅体系结构的特征被用来创建通用的API调用。例如,API调用publishMessage()接受诸如消息、目的地和主题之类的参数。在MQTT的情况下,通过连接到作为目的地的IP地址的代理将消息发布到主题。在CoAP的情况下,首先使用目标和主题生成URI,然后将消息发布到URI。

这种常见的中间件实现已被用于比较MQTT和CoAP协议的性能。通用网关为协议的比较提供了一个统一的环境,简化了比较过程。比较方案采用的确切方法见第三部分。

实验配置

第二部分C中介绍的中间件用于研究MQTT和CoAP协议的性能。实验的目的是确定各种参数对协议性能的影响。根据延迟和每个消息传输的总数据(字节)来衡量协议的性能。每个消息传输的总数据是协议带宽使用的指标。延迟被测量为接收文件(模拟聚合传感器数据)的时间与文件发布时间之间的差异。

硬件配置

实验评估中使用的硬件设置包括笔记本电脑,BeagleBoard-xM和上网本,分别作为服务器,发布者,订阅者,一个广域网(WAN)仿真器如图4所示。在通过以太网连接到二层交换机的BeagleBoardxM中部署并执行了常见的中间件实现。这个中间件发挥了发布者的作用,网关发布的消息被路由通过上网本。被称为Wanem 的广域网模拟器应用程序在上网本上运行,以模拟有损网络连接,如Bhattacharyya和Bandyopadhyay所做的以前的工作。

MQTT服务器和CoAP服务器在具有4GB RAM的笔记本电脑中运行,并且该笔记本电脑也连接到第二层交换机,如图4所示。

为了确保计算延迟的时间同步,订阅者程序也在BeagleBoard-xM中运行。因此,BeagleBoard-xM中的中间件发布的任何消息将通过上网本到达笔记本电脑中的服务器,然后通过上网本返回到BeagleBoard-xM。

2-4

软件配置

MQTT和CoAP协议的开源实现,即Mosquitto和libcoap,与中间件集成,用于进行实验。为了模拟来自传感器节点的数据接收,在BeagleBoard-xM中执行一个小程序来生成传感器数据,而传感器数据又由网关发布。

2-6

为了准确计算延迟,由网关发布的每个由用户接收的消息都被记录下来。 Wireshark用于测量整个实验中通过网络传输的字节数。请注意,传输字节的总数包括协议开销以及重传。实验结果见第四节。

实验结果

由于简单的实验设置只涉及一个发布者,一个服务器和一个代理,两个协议实现了100%的消息传递率,而不管所有进行的实验中的丢包率如何。这反映了MQTT和CoAP都具有良好的重传方案来处理下层的丢包。因此,我们将我们的比较集中在消息延迟和每个消息生成的数据总量上。

A. 丢包对时延的影响

我们首先考虑丢包对两个协议的延迟性能的影响。任何网络中的分组丢失导致消息的重传,从而导致消息接收中的更长的延迟。为了公平比较,选择MQTT网关QoS 1和用户QoS 1以与CoAP的可确认消息进行比较,因为这两个设置在消息的传输和确认方面是相似的。

2-5

2-7

表I列举了不同丢包率下两种协议的平均延迟,图6绘制延迟累积分布函数(CDF)。显然,对于较低的数据包丢失值,消息对MQTT的延迟较低。然而,随着分组丢失的增加,CoAP在延迟方面表现优于MQTT。这是因为与丢包率较高时CoAP中较小的UDP开销相比,消息重传中涉及的TCP开销更大。

B. 丢包率对数据传输的影响

每个消息传输的数据被定义为产生的流量总量除以成功传递的消息的总数。它是从Wireshark计算的消息大小为60个字节在不同的损失率值的情况下。网关和订阅者的服务质量也是一样的。图中的曲线图7总结了获得的结果。该图表显示,QoS 2消息与QoS 0和QoS 1相比占用较多的带宽,用于较低的丢包率。这是因为QoS 2中的四次握手机制。QoS 0具有最少的数据传输,因为不需要来自其他主机的确认。

2-8

C. 各种消息大小的开销

传输的总数据与总消息大小的比率是数据传输涉及的开销的指标。各种有效负载大小的这个比率如图8所示。较小消息的比率很大,因为确认的大小与消息的大小相当。当消息大小增加时,确认的大小对额外的开销造成的影响很小。额外的开销主要由消息大小和重传次数决定。

当分组丢失率低时,对于所有消息大小,CoAP生成比MQTT少的开销。当丢包率较高时,当消息大小小时,CoAP仍然比MQTT拥有更少的开销。当消息大小增加时,反之亦然。这是因为当消息大小较大时,UDP丢失消息的概率高于TCP,导致CoAP比MQTT更频繁地重发整个消息。

2-9

D. 自适应改变协议

第IV-A,IV-B和IV-C节显示,两种协议的性能在不同的网络条件下是不同的。在不同网络条件下使用正确的协议可能会在不同方面提高网络的性能,例如平均消息延迟或每个传递消息生成的数据总量。除了网络条件,应用程序还可以根据不同的应用程序具有不同的要求(如低延迟或低带宽利用率)来决定协议的选择。

为了实现此功能,需要对网关和订阅者增加附加要求。网关必须能够检测网络条件,并且必须具有在不同网络条件下协议性能的先验知识。根据要优化的性能指标,网关将选择在传感器数据传输中使用的最佳协议。订阅者必须能够接收来自不同协议的消息。作为结果,订阅者最好有一个中间件来处理复杂性。我们开发的同样的中间件可以扩展到满足订阅者的要求。

总结与未来的工作

在本文中,我们研究了聚合传感器数据从网关节点到后端服务器或代理的传输。我们提出了一个灵活的常见中间件,公开了一个通用的编程接口,可以扩展为适应网络条件。使用通用的中间件,我们研究了MQTT和CoAP的两个最常用的网关到后端数据传输协议的性能。实验结果表明,不同协议的性能取决于不同的网络条件。对于低丢包率的情况,MQTT消息的延迟低于CoAP,而对于高丢包率的情况, MQTT消息的延迟高于CoAP。此外,当消息较小,丢包率等于或小于25%时,由于可靠传输,CoAP比MQTT生成更少的额外流量。

两个协议在性能上的差异可以被来提高网络性能,采用中间件根据当前的网络条件决定使用哪种协议。未来的研究领域包括检测网关上的网络状况,然后切换到为网络条件提供最大性能的协议。