IIoT消息队列(IoT MQ)选型

mq

为什么被需要MQ?

IIoT作为设备接入和业务层承上启下的作用,其最重要的职能在于提供一个统一接口:

  • 解耦上下各个不同系统的之间的关联性,使它们之间可以不直接依赖
  • 同构系统中每个结点上的一致性,是各个系统直接可以交流
  • 灵活地添加组件或适配系统,使其结构灵活,易于扩充

为了达到这三个功能,门面模式+适配器+观察者模式 的设计模式非常适合,那么消息队列就是最佳选择了。
消息队列作为门面,作为各个系统的接入点,解耦了它们之间的相互关联;我们还需要制定一套统一的消息标准,同构各个系统的接入方式;为了满足已有的协议和系统,需要使用适配器的方式,让它们兼容到整个的系统中来。

特性需求

各个不同的系统可能包括采取服务,各类设备,数据中心或SCADA等,为了满足这些不同的系统需要满足如下特性:

实时性
高并发
可靠性
安全防护
可扩展

消息队列协议对比

为了找到合适的消息队列系统,选定几个消息队列协议进行对比来找到合适方式。

  • MQTT(消息队列遥测传输),在物联网、小型设备、移动应用等方面有较广泛的应用
  • AMQP(级消息队列协议),是应用层协议的一个开放标准,为面向消息的中间件设计
  • Kafka(不是协议,是消息系统),解决有吞吐量要求而的日志和数据聚合作用

比较项:

消息队列协议对比

消息队列协议对比

从上面各项比较可以得知,MQTT优势是实时性,Kafka优势是数据聚合,AMQP优势是应层解耦

方案建议EMQ+Kafka

MQTT协议应用场景大多是在物联网设备的接入,对短数据有非常适应的实时性特点,Kafka和AMQP的实时性都不及MQTT。
MQTT专门为物联网设计,可以直接接入支持MQTT协议的设备,软件,系统或移动端。目前大多的物联网平台的做法是使用MQTT做设备上传协议,如果是其他采集协议,就使用网关做协议转换器,如下:

iot-mqtt

但我们公司不用选择设备的原因,其建议协议转换功能在采集服务器中,也是做为协议适配的功效,其适配器可以尽量灵活部署,可能是插件,服务器应用,桌面应用和Linux设备等。

MQTT在实时性上表现优异但在数据聚合方面上不足,所以建议EMQ+Kafka的模式。如果数据是输出给类似ETL(数字仓库)这样的,需要通过Kafka作缓冲和聚合;如果是连接到SCADA这样的系统,直接通过EMQ就可以了。

EMQ简介

EMQ是百万级分布式开源物联网MQTT消息服务器。基于高并发的Erlang/OTP语言平台设计,支持百万级连接和分布式集群,发布订阅模式的开源MQTT消息服务器。完整支持MQTT V3.1/V3.1.1协议规范,扩展支持WebSocket、Stomp、CoAP、MQTT-SN或私有TCP协议。

emqtt

官网了解更多:

http://emqtt.com
https://www.emqx.io
GitHub

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2021 朝着牛逼的道路一路狂奔 All Rights Reserved.

访客数 : | 访问量 :