编程之路

  • home
  • article
  • class
  • label
  • utils

  • 搜索
Elasticsearch MongoDB 衡量点 aop 边缘计算 框架 物联网 敏捷开发 团队 压力测试 Markdown 学习方法 学习 产品 规范 日志 微服务 壁纸 开发平台 Java 全栈 前端 开发规范 MQTT CentOS 镜像站 IntelliJ IDEA FreeMarker UML 计算机 软件 Tomcat Netty Web Service Docker Dubbo Kafka NoSQL Redis 消息队列 RocketMQ RabbitMQ ActiveMQ 分布式事务 Spring 队列 Java 高级 GC JVM HTTP 网络安全 算法 设计模式 Spring Cloud Web SpringMVC 线程池 并发 锁🔒 多线程 Git Java 集合 Java 基础 MyBatis 数据库 MySQL Java 基础面试题 Java Nginx Linux Spring Boot

IoT MQ设计篇:调研与协议选型

发表于 2021-12-23 | 分类于 Java | 0 | 阅读次数 1149

概述

本篇是IoT MQ系列的第一篇,本篇主要从以下几个维度介绍下IoT MQ:

  • IoT MQ和Kafka,RocketMQ,RabbitMQ这些消息队列有什么区别
  • 目前IoT的传输协议有哪些,有什么区别,如何选择合适的协议作为基础协议?
  • IoT MQ的适用场景有哪些?

IoT MQ到底是什么东东

IoT MQ(Internet of things message queue)主要用来传输各种物联网设备的消息,可以理解IoT MQ就是物联网中的消息中间件。对于很多开发者而言,对于像Kafka,RocketMQ,RabbitMQ这样的消息队列是很熟悉的,那么IoT MQ相对于其他这种消息队列有哪些区别呢。

  • 适用对象: Kafka这一类的MQ的适用对象是各个系统,主要解决问题是各业务系统间的数据交互问题,其中两个最为重要的特征是:“异步解耦,削峰填谷”,IoT MQ的适用对象主要是各种物联网设备,例如手环健康统计;大棚温度,光照数据采集设备;手机APP等。最明显的特征是:“连接终端多种多样,网络不可靠”。
  • 设计复杂度: 设计系统时,系统的复杂度主要有“高可用,高性能,高可靠,规模,成本,安全,高扩展”等,其中“三高”是比较难设计的,对于Kafka,RocketMQ等就是“三高”的系统,所以内部很复杂,使用协议也是其自定义的私有协议。对于IoT MQ而言,消息数据的高可靠相对而言没有那么重要,因为百分之90的物联网设备的场景都是网络不可靠的,消息偶尔丢失是可以的。但是对于Kafka这类MQ和IoT MQ还有两个很明显的区别是:Kafka这一类是“低连接高请求“的,而IoT MQ是高连接高请求的。

IoT MQ协议

目前比较流行的IoT通信协议主要有:mqtt,coap,nb-iot,xmapp,http等。这里主要介绍mqtt和coap协议,这也是目前使用最多的协议。

coap

coap(Constrained Application Protocol)应用受限协议,其底层的传输协议是UDP,简单来看,通信方式像是一个很简单的http协议,主要特征有:

  • 基于UDP,不需要考虑连接成本,但是需要自己控制消息的重传,顺序等,相应的消息可靠性降低,但是传输成本降低,传输的数据量很小,
  • 通信方式跟Http很像,更像是M2M的,例如通过手机查看智能手环采集的心率信息。每个终端都可以看成即是服务器也是客户端。
  • 广播消息等是额外补充的协议,收集coap协议终端的数据相对比较麻烦。

mqtt

mqtt(Message Queuing Telemetry Transpor)消息队列遥测传输协议,其底层的传输协议是TCP,通信方式与Kafka这类MQ的通信方式很像,主要分为客户端设备与Mqtt服务端两个概念,设备采集消息与传输到服务端,服务端进行中专,主要特征有:

  • 基于TCP,在物联网内通信需要长连接,但是设备数很多(百万级)并且网络不可靠,所以对于连接设计的处理非常重要。
  • 默认是广播的,topic数量需要维护并且数量非常大,

mqtt与coap目前是使用最广的物联网通信协议,其中mqtt实际上使用最多的物联网协议,对与这两种协议而言,主要应用场景都是物联网,coap基于UDP,复杂度主要在于消息的可靠性,顺序,重传等需要自己处理,同时UDP保证了很高的性能,没有连接的开销;mqtt基于TCP,复杂度主要是设备session的保存,长连接的处理等,所以coap更适合那种对于数据可靠性要求比较低,数据性能要求更高,网络更差的场景,mqtt则与之相反,同时mqtt也很好做一些扩展,例如websocket协议,TLS安全等。如果要进行数据的采集,因为mqtt有Broker的概念,与kafka这些很像,这也是我们选择mqtt协议为基础研发IoT MQ的原因。

IoT MQ适用场景

  • 物联网设备信息上行采集与下行下发:例如净水池的设备每隔一小时采集一条水质报告传输到云上进行分析,通过设备管理平台可以下发一些消息对每个设备进行管理
  • 设备与设备之间简单交互(M2M),例如自己手机观察手环采集的心率信息,不需要额外的服务器,只需要手机与手环进行交互
  • 即时通讯:mqtt协议比较适合用来做即时通信,即app聊天,通知,弹幕等
  • 其它:一般来说,IoT 意味着设备多种多样且数量很多,网络不可靠等,所以这些协议都是以这样的环境产生的,在设计这样的mq时,除了考虑本身协议的实现和应用场景外,还要考虑如何做一些扩展,特别是运维管理,监控等
# MQTT # 物联网
使用 SpringBoot AOP 记录操作日志、异常日志
MYSQL类型与JAVA类型对应表
  • 文章目录
  • 站点概览
Adrian

Adrian

曙光在头上,不抬起头,便永远只能看见物质的闪光。

120 日志
11 分类
70 标签
RSS
Creative Commons
Links
  • 美团技术团队
  • 阮一峰
  • 程序猿DD
  • SpringBoot 中文社区
  • 在线文档
  • Bean Searcher
  • OkHttps
  • Grails
  • Sa-Token
  • 程序员的进击之路
  • bugstack 虫洞栈
  • Java 全栈知识体系
  • Gobrs-Async
  • 查询网
  • 微信开放社区
  • 物联网技术指南
  • emqx
  • 看云
  • 深圳核酸检测点查询
  • Hutool
  • Spring
  • V2EX
  • v-charts
  • Vert.x 官方文档
  • Vert.x 官方文档中文翻译
  • 极客时间
  • Apache RocketMQ 开发者指南
  • 知了
  • 阿里云知行动手实验室
  • Learn Git Branching
  • Spring Boot 教程
  • 未读代码
  • 如梦技术
  • jpom
  • Cubic
  • Easy-Es
  • bing-wallpaper
  • solon
  • LuatOS
  • ThingsBoard
  • Linux 中国◆开源社区
  • Apache Dubbo
  • Jenkins
  • 技术文章摘抄
  • VueJS
  • MapStruct
  • elasticsearch 中文社区
  • Apollo(阿波罗)
  • TiKV文档
  • Chrome插件分享
  • 一步步搭建物联网系统(教你设计物联网系统)
  • 全栈增长工程师指南
  • 程序员的自我修养
  • Pro Git(中文版)
  • 学习 Web 开发
  • 极客教程
  • PingCAP 文档中心
  • 酷壳
  • Refactoring Guru 网站
  • 学习 Java 语言
  • smart-doc
  • mybatis-plus
  • 字母哥博客
0%
© 2023 Adrian
由 Halo 强力驱动
|
主题 - NexT.Gemini v5.1.4