物联网平台中最基础的部分之一就是通信,通信协议在物联网中常用的就是MQTT协议。针对MQTT协议,需要选择一款合适的MQTT服务器来搭建服务。
本文对搭建的Broker服务进行功能和性能方面的测试,来验证系统上线之前能否承受预先设计的压力。
1
MQTT协议简介
MQTT协议,是一种基于发布/订阅模式的“轻量级”通讯协议,该协议构建于TCP/IP协议之上。MQTT协议的最大优点在于,可以通过极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务,是一种低开销、低带宽占用的即时通讯协议。这些特点使其使用范围非常广泛,在IoT和M2M及一些小型化设备中已广泛使用。
图1
图1是MQTT协议中包含的几个身份:发布者(Publish)、代理(Broker)、订阅者(Subscribe)。
其中发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT协议传输的消息为:主题(Topic)和负载(payload)两部分,Topic可以理解为消息的类型,payload是消息的内容。如果对mqtt协议想更深入研究的话,可以查看官方网站或其他资料。
2
MQTT协议实现
MQTT协议的Broker有很多种,具体可以参考
https://github.com/mqtt/mqtt.github.io/wiki/servers,其中主要包括以下几种:
Apache-Apollo:
在ActiveMQ基础上发展而来的一款代理服务器,可以支持STOMP、AMQP、MQTT等多种协议,并且Apollo提供后台管理页面,方便开发者管理和调试。
EMQ 2.0:
号称百万级开源MQTT消息服务器,基于Erlang/OTP语言平台开发,支持大规模连接和分布式集群,发布订阅模式的开源MQTT消息服务器。
HiveMQ:
一个企业级的MQTT代理,主要用于企业和新兴的机器到机器M2M通讯和内部传输,最大程度的满足可伸缩性、易管理和安全特性,提供免费的个人版。HiveMQ提供了开源的插件开发包。
图2是众多broker对比的图片,可以根据自身业务的需求选择合适的broker。
图2
3
Broker服务功能测试
单纯broker服务的功能测试主要分为三个方面:连接功能测试、消息发布功能和消息订阅功能。
在连接功能测试中需要考虑ip+port、超时时间、协议类型、clientId、心跳间隔等参数;在消息发布功能中需要注意发布消息的服务质量(Qos)、消息发送的topic、消息发送的payload内容及格式;消息订阅的功能与消息发布功能类似,需要考虑订阅消息的服务质量(Qos)以及整个broker的服务质量,消息订阅的topic。
在IoT平台中,Broker作为设备端与云端交互的桥梁,单纯的broker测试是不能满足业务需求的,需要设备端和云端的整体测试。如果broker桥接了kafka进行数据的生产消费,需要把mq对业务的功能影响加入其中。在安全性方面,一方面需要考虑Broker 的ACL鉴权,另外一方面需要考虑消息传递的安全性。
针对以上功能调研了几款测试工具:
Eclipse Paho
https://www.eclipse.org/paho/
直接通过tcp或者tls进行ip+port的测试。由于使用客户端的方式,简单方便快捷。可以进行简单的功能测试,但在在pub消息为中文的时候,连接经常强制被断开。
Mosquitto
一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单。
官方网站为:http://mosquitto.org/
其他Web端或者插件端有MQTTLens,百度自行安装即可。
4
Broker服务性能测试
与传统的web服务性能测试相比,Broker服务的关注点除了服务器基本的负载、CPU、内存、磁盘IO等外,更多的是虚拟用户的数量,连接建立的响应时间及成功率,消息吞吐测试过程中更多的是网络的带宽。不同的应用有不同的系统要求,用户可以按自己的应用场景进行测试,而不是简单的连接压力测试。在IoT业务中,对Broker的测试主要包括并发连接测试、消息吞吐测试以及长时连接测试。并发连接测试中主要包括线性增长、阶梯增长、瞬时增长;消息吞吐测试中包括不同的传输方式、不同大小的payload。
图3是Broker连接和吞吐压力测试的一些功能点。
图3
图4是百万连接下broker的性能测试数据统计。
图4
总 结
以上是笔者前段时间对MQTT协议及Broker服务的学习认识及工作总结,不足之处还望指教。如果您对物联网平台感兴趣,也可以联系笔者共同交流。
领取专属 10元无门槛券
私享最新 技术干货