人类在互联网和计算机上创建的数据并不总是准确的,人类打字、扫描、拍照或录音也并不总是可靠的。但是,如果机器上有传感器收集数据并能够与其他机器通信呢?如果有某种协议可以使医疗和个人设备、电器和其他电子设备相互发送和接收数据呢?
例如,这样的系统意味着人们可以准确地跟踪他们库存中的物品。或者他们商店中需要更换、补充或修理的零件或项目。由于设备中的传感器收集数据,这意味着数据更准确、更可靠。
随着第四次工业革命的到来,这个系统成为可能。它带来了物联网、机器人、人工智能和其他新兴的颠覆性技术。
一、MQTT概述
智能电视、智能手表和其他可以相互发送和接收信息的“智能”设备和小工具现在与网站上的Cookie一样常见。这些可以通过传感器收集数据并将其发送到其他设备的智能设备称为物联网设备。
物联网设备如何做到这一点?它们相互通信的能力是通过一种称为消息队列遥测传输(MQTT)的消息传递技术实现的。它是一个基于IP的轻量级消息传递系统,为物联网提供支持。它使控制器、传感器和其他小工具或设备能够相互“交谈”。此外,它还支持并不总是在线的设备,例如配备微控制器的自动化设备。
MQTT消息传递协议由IBM公司的Andy Clark和Eurotech公司的Arlen Nipper于1999年创建。它最初是主要用于石油和天然气行业的专有协议,后来成为一个开源协议。MQTT设计用于在低带宽网络中工作。这一特性非常适合数字足迹较小的机器对机器通信和物联网设备。它不仅适用于低带宽网络,也适用于高延迟环境。
MQTT用于制造业、卫生、电信、汽车等其他行业。它现在被公认为物联网消息传递的标准。该消息系统采用发布者/订阅者原则,使用MQTT服务器进行操作。发送者和接收者都不需要直接相互连接。
源数据由订阅接收此类数据的客户端发布和接收。发布者和订阅者的关系是这样的:
- 发布者(数据源)在主题上传输数据或消息。
- 客户端订阅主题以接收消息。
- 服务器将发布者与订阅者匹配。
- 如果未找到匹配项,则丢弃该消息。
这种安排类似于广播或电视广播——只能查看您所调到的频道的传输。在MQTT中,数据源“发布”数据,接收者获取数据,因为他们是注册订阅者。
二、MQTT架构及数据传输协议
MQTT旨在成为轻量级设备的简单发布/订阅协议,由两个主要组件组成:代理/服务器和客户端。
1.MQTT代理/服务器
运行从数据源或发布者接收消息的软件的计算机称为代理或服务器。然后,服务器/代理将数据从源发送到其正确的目的地,即订阅者。该软件可以使用专有或开源软件、现场台式电脑或Raspberry Pi安装在基于云的代理/服务器上。但是,如果正在处理可以通过互联网控制的物联网项目,则使用基于云的服务器更合适。
服务器可以管理多达数千个同时连接的MQTT客户端,具体取决于实现。因此,在选择MQTT服务器时,可扩展性和集成性是必不可少的考虑因素。除了接收和发送消息之外,服务器还具有其他能力,例如:
- 安全
需要保护MQTT。它应该要求其客户提供强大的用户名和密码。此外,传输控制协议连接应使用安全套接字层(SSL)和传输层安全性(TLS)进行加密。这些安全措施应确保消息在传输过程中的安全性和隐私性。
- 服务质量(QoS)级别
服务质量(QoS)级别是消息源和预期接收者之间的协议。该协议定义了特定消息的传递保证。MQ遥测传输中有三个级别的服务质量(QoS):
(1)最多一次(0)
在这一级别,无法保证交付。这个级别最多保证的是“尽力而为”的交付。该消息既不存储也不重新发送,并且收件人不发送接收确认。当互联网可靠且需要快速交付数据时,使用这一服务质量级别。
(2)至少一次(1)
保证消息至少传递给订阅者一次。发布者存储消息,直到接收者发送接收确认。
服务器还确认发布者发送的消息,让客户端知道消息已收到。如果客户端没有收到确认,消息将再次发送。
确认告诉订阅者客户端所有与客户端订阅的主题有关的消息都已发布。虽然在这一级别可以保证收到消息,但如果没有按时收到回执,则可能会出现重复消息。
如果客户端需要接收订阅主题的所有消息,则使用级别2。但是,许多商业服务器不支持级别2,因为它相对较慢且占用资源。
(3)恰好一次(2)
级别2是消息队列遥测传输(MQTT)中的最高服务质量级别。每条消息都保证被订阅者接收一次。它也是三个服务质量(QoS)级别中最安全但最慢的一个。虽然级别1可能导致消息重复,但级别2保证只接收一次数据。
这一保证由发布者和订阅者之间的两个(至少两个)“请求和响应”流提供,这表明消息已被接收。一旦订阅者确认收到消息,发布者就可以丢弃数据包。如果发布者没有收到来自订阅者的“收到消息”信号,则消息将继续发送,直到消息被确认。
高QoS级别更可靠,但涉及高带宽要求和更高延迟,这会减慢数据传输速度。当不需要快速消息传递并且重复消息可能导致问题时,使用这一级别。
就QoS而言,消息传递有两个方面:从发布者到服务器以及从服务器到订阅者。每次将数据发送到服务器时,数据或消息的来源/发布者都会设置数据的QoS级别。然后,服务器根据客户端的QoS级别(在订阅过程开始时设置)将数据发送到订阅者客户端。如果客户端的QoS设置低于发布客户端,则服务器将发送QoS较低的数据。
这一特性允许MQTT提供附加的消息传递服务质量,确保根据客户端的要求发送数据。
- 存储和转发
即使订阅者客户端无法接收消息,某些MQTT消息也可以存储并转发给订阅者。这些消息称为客户端可以订阅的“存储和转发主题”。当订阅者可以接收消息时,订阅了存储和转发功能的客户端可以接收存储的数据。
要使这一功能有效运行,MQTT服务器需要执行以下操作:
(1)跟踪每个订阅者的客户ID。
(2)跟踪成功发送到每个客户端的最后一条消息的标识符。
MQTT代理会自动删除过期消息,除非配置保留它们。代理存储配置的主题,以防将来的客户订阅它们。然后,这些消息将按照最初接收消息的顺序传递给订阅者。
2.MQTT客户端
MQTT客户端可以是发布者和订阅者。标签“发布者”和“订阅者”指的是发布消息或订阅接收消息的客户端。在MQTT中,发布/订阅功能可以在同一个客户端中实现。客户端可以在通信阶段执行不同的功能,如订阅、取消订阅、发布、连接和断开连接。
此外,这些客户端可以是任何设备或应用程序,从台式电脑到配备各种完全承诺的基于云的代理/服务器。客户端可以是具有最小库和有限资源的紧凑型设备,并使用无线网络连接。
可以这么说,任何能够通过TCP/IP堆栈运行MQTT的设备都可以成为客户端。MQTT的实现是简化和直接的,这些特性使MQTT非常适合使用最少资源的小型设备。
三、结论
MQTT是一种使智能家电、智能小工具和其他物联网(IoT)设备“对话”并与其他机器或系统共享信息的技术。这种消息传递技术使智能手机、冰箱、可穿戴设备、恒温器、远程传感器和其他智能小工具相互交换数据。
MQTT中的数据流在服务器/代理的帮助下通过简单的发布者/订阅者系统工作。发布者通过服务器传输有关主题的数据;然后,服务器将数据传输到订阅该主题的客户端。
原文链接:https://www.smartdatacollective.com/how-data-flow-works-in-mq-telemetry-transport-mqtt/