物联网开发实战
郭朝斌
小米生态链企业秒秒测 IoT 事业部总监,前诺基亚高级工程师
17380 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
物联网开发实战
15
15
1.0x
00:00/00:00
登录|注册

12 | IoT Hub:面对海量设备如何打造高性能设备接入层?

你好,我是郭朝斌。
前面两讲,我们一直在谈物联网云平台针对海量数据的处理和存储技术。顺着物联网的数据技术体系继续往下探索,我们自然就会面临一个问题:物联网云平台的服务器需要管理海量设备的接入,并且接收来自设备的海量数据的输入,那么服务器要怎么应对这样的挑战呢?
我们来分析一下这个问题。物联网设备是通过某种通信协议接入云平台的,比如常用的 MQTT 协议,那么设备接入的服务器就是 MQTT Broker 服务器。
从架构设计来说,负责设备接入的这一部分一般叫作设备接入层,也被称为 IoT Hub。设备接入层之后,才是和互联网系统类似的业务层。具体的系统架构图可能是下面这样的:
不过,估计你也发现问题了,这样的架构根本无法支撑物联网场景中海量设备的接入和海量数据的输入。单台 MQTT Broker 服务器很容易面临性能瓶颈。所以前面提到的“服务器怎么应对挑战”的问题就变成了:怎么打造高性能的设备接入层?
我们再继续深入分析,把关键点定位得更具体一点。打造高性能的设备接入层,最重要的技术难点是,如何实现接入层的高并发。因为只有具备高并发的能力,才能有效地、可靠地实现数据的传输。
所以,现在问题又变成了:物联网云平台中,怎么实现高并发的设备接入层?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了物联网云平台面临的海量设备接入和数据输入挑战,重点讨论了构建高性能设备接入层的关键技术。首先从负载均衡角度出发,介绍了多台MQTT Broker服务器协作和负载均衡技术,如轮询策略和最小连接数策略,以实现服务器任务分配和压力平衡。其次,从消息队列方面探讨了消息队列的异步处理机制,实现了MQTT Broker服务器和数据流处理服务器之间的解耦和输入数据量的平衡,并推荐了Kafka和RabbitMQ等开源软件作为消息队列的选择。最后,介绍了缓存系统的重要性,以提高数据读写速度和减轻数据库压力,推荐了Redis和Memcached等常用开源缓存系统。整体而言,本文以深入浅出的方式详细讲解了构建高性能设备接入层的关键技术,为物联网平台的搭建提供了技术储备。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《物联网开发实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(24)

  • 最新
  • 精选
  • il李li
    对于每个设备负载均衡分配连接到那个MQTT Broker,收到设备PUB消息的Broker路由转发该消息到集群的其他Broker,这需要集群中维护一个全局的主题Topic与消息路由表Route Table的对应关系,能够准确转发到其他有订阅该主题的Broker节点上。而对于Broker收到PUB消息后,查到相应的Topic,并将消息发送给订阅此 Topic 的终端设备。这个全局的Topic消息路由表是个关键的设计

    作者回复: 大赞👍,完全正确

    2020-12-04
    4
    26
  • Geek_9b7997
    一般的企业级平台毕竟不是大厂平台,如果有了边缘网关后,并发量是不是就没有那么多了?其实也无需集群了?

    作者回复: 嗯,十几万、甚至几十万的量级都可以不用集群

    2020-12-04
    7
  • fwx
    当接入 IoT 设备数量在十万以内或者万级时,能否直接选择支持MQTT协议的消息队列,将MQTT Broker服务器和消息队列系统进行合二为一?

    作者回复: 可以,但是注意测试你使用的部分对mqtt协议的支持是否OK,一般情况下支持还可以,有些情况可能有问题,需要你往这方面留意一下。因为不是主要功能,mqtt方面的问题解决起来可能优先级不高。

    2020-12-04
    3
    2
  • 小太阳
    rabbitmq的mqtt插件,在生产环境使用有什么限制么?

    作者回复: RabbitMQ这些通过插件的方式支持mqtt,毕竟不是专门为mqtt的,之前有看到某些协议实现上有坑,要留意。

    2021-05-14
    1
  • InfoQ_Albert
    之前做个一项目需要对接物联网数据,需要用到消息队列来降低数据库的写入请求,当时对比了几个MQ;Kafka集群支持比较好,但是不支持MQTT协议;RabbitMQ支持MQTT协议但是使用的是Erlang语言编写,怕出问题了搞不了;当时项目的接入的物联网设备不多就30台,最后使用的是ActiveMQ的新一代叫Apollo,它可以提供消息队列和broker功能;但是不知如何部署集群,所以想问问郭老师?

    作者回复: 一些开源的软件是不支持集群的,如果必要,需要我们自己去开发让他支持集群

    2020-12-14
    1
  • Garwen
    相同主题的数据发送到了不同的设备上,但是这些MQTT Broker里面的数据都进了消息队列的同一主题里面了吧,所以订阅消息队列里面的对应主题就能接收到所有同一Topic的数据了。

    作者回复: 消息队列怎么知道订阅者是谁呢?如何给不同的订阅者发送消息呢 可以从多个broker如何配合考虑

    2020-12-11
    1
  • Dan
    方法一应该是直接从缓存那一集提取数据 然后再通过MQTT broken分发 方法二应该是每个mqtt都有有一分订阅名单,然后所有broker 都吧相关信息发给一个服务器综合处理

    作者回复: 👍方法二基本是一般的思路了

    2020-12-08
    1
  • 请教下老师,mqtt不也属于消费队列吗?那增加的rabbitmq这一层的意义大吗?

    作者回复: mqtt是一种通信协议,本身并不是消息队列的功能哈。它的名字使人有误解。其实是遵循的IBM的一个MQ产品系列名。

    2020-12-05
    2
    1
  • 贤伟
    我们是用3 kafka brokers集群做消息处理的, 每个topic有多个分区,每个分区有3个副本,分在3个broker上。同时每个topic我们有一个消费者group,每个group 有多个消费者,每个消费者去处理1个或多个partition(消费者就是数据处理微服务,可以动态扩展,保证启动时订阅同一个topic,属于同一个group)。 我的理解可以把consumer group当做一个订阅者,既能利用多分区并行消费,也可以保证该group可以收到topic的所有消息。

    作者回复: 嗯,你是结合具体的技术方案做了解释。这个机制已经保证了消息的消费。这里的特殊点是多个消费者一起来消费brokers上的消息,这个组里的消费者没有自己的独立性。如果消费某个topic的消费者只有它一个,它只连接其中一个broker,就需要考虑其他机制了。

    2020-12-04
    1
  • 杨磊
    HAProxy会变成整个系统的网络瓶颈吧?毕竟所有网络请求流量都要流经这里。 为什么不把网关配置为连接某固定MQTT Broker呢,这样就不去除了这个网络贷款瓶颈。 谢谢

    作者回复: 那broker不就成为瓶颈了吗?而且broker需要处理具体的应用协议,工作任务更重,更容易出现性能问题。

    2021-04-13
收起评论
显示
设置
留言
24
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部