物联网开发实战
郭朝斌
小米生态链企业秒秒测 IoT 事业部总监,前诺基亚高级工程师
5401 人已学习
立即订阅
登录后,你可以任选4讲全文学习
推荐试读
换一换
02 | 通信技术:设备接入网络的方式有哪些?
06 | 物模型:如何定义智能电灯?
09 | 边缘中心:物联网网关有多重要?
课程目录
已完结/共 32 讲
开篇词 (1讲)
开篇词 | 物联网这个趋势,你不应该错过
基础篇 (5讲)
01 | 入门介绍:如何定义物联网?
02 | 通信技术:设备接入网络的方式有哪些?
03 | 网络协议:设备使用什么语言与互联网对话?
04 | 数据分析:数据的价值有哪些?
05 | 系统实例:怎样设计一个简易物联网系统?
进阶篇 (10讲)
06 | 物模型:如何定义智能电灯?
07 | 零配置组网:设备如何发现彼此?
08 | MQTT:在实践中掌握一个通信协议
09 | 边缘中心:物联网网关有多重要?
10 | 数据处理框架:批处理还是流处理?
11 | 数据存储:物联网中的数据库有哪些?
12 | IoT Hub:面对海量设备如何打造高性能设备接入层?
13 | 隐私:在实践中如何保护用户隐私?
14 | 安全:物联网平台如何应对安全风险?
15 | 平台:智能家居开源平台的生态是怎样的?
实战篇 (7讲)
16 | 实战准备:如何搭建硬件开发环境?
17 | 远程控制:怎样打造联网的智能电灯?
18 | 场景联动:智能电灯如何感知光线?(上)
19 | 场景联动:智能电灯如何感知光线?(下)
20 | 智能语音:好玩的语音控制是怎么实现的?
21 | 多传感器集成:浇花怎么实现自动化?
22 | 掌控数据:家里的数据可以怎么利用?
结束语 (1讲)
结束语 | 永远做一个具有极客精神的人
测试题 (1讲)
结课测试 | 这些物联网的问题,你都掌握了吗?
加餐 (5讲)
加餐一 | 这5本关于物联网的好书,值得一读
加餐二 | 行业应用:物联网的发展将如何重塑我们的生活?
加餐三 | 行业应用:物联网的发展将如何升级第一、第二产业?
加餐四 | 5G技术将如何推动物联网的发展?
加餐五 | 投身物联网行业,如何做好职业规划?
用户故事 (2讲)
用户故事 | 让野蛮生长成为职业发展的助推剂
用户故事 | 转战物联网,我相信天道酬勤
物联网开发实战
15
15
1.0x
00:00/00:00
登录|注册
开通超级会员可免费学习本课程,还可解锁海量内容免费学特权。

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

你好,我是郭朝斌。
前面两讲,我们一直在谈物联网云平台针对海量数据的处理和存储技术。顺着物联网的数据技术体系继续往下探索,我们自然就会面临一个问题:物联网云平台的服务器需要管理海量设备的接入,并且接收来自设备的海量数据的输入,那么服务器要怎么应对这样的挑战呢?
我们来分析一下这个问题。物联网设备是通过某种通信协议接入云平台的,比如常用的 MQTT 协议,那么设备接入的服务器就是 MQTT Broker 服务器。
从架构设计来说,负责设备接入的这一部分一般叫作设备接入层,也被称为 IoT Hub。设备接入层之后,才是和互联网系统类似的业务层。具体的系统架构图可能是下面这样的:
不过,估计你也发现问题了,这样的架构根本无法支撑物联网场景中海量设备的接入和海量数据的输入。单台 MQTT Broker 服务器很容易面临性能瓶颈。所以前面提到的“服务器怎么应对挑战”的问题就变成了:怎么打造高性能的设备接入层?
我们再继续深入分析,把关键点定位得更具体一点。打造高性能的设备接入层,最重要的技术难点是,如何实现接入层的高并发。因为只有具备高并发的能力,才能有效地、可靠地实现数据的传输。
所以,现在问题又变成了:物联网云平台中,怎么实现高并发的设备接入层?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
02 | 通信技术:设备接入网络的方式有哪些?
06 | 物模型:如何定义智能电灯?
09 | 边缘中心:物联网网关有多重要?
10 | 数据处理框架:批处理还是流处理?
加餐一 | 这5本关于物联网的好书,值得一读
加餐四 | 5G技术将如何推动物联网的发展?
开通超级会员免费畅看本课程
开通会员
该文章仅可免费阅读部分内容,如需阅读完整文章,请开通超级会员或单独购买本课程。
登录 后留言

精选留言(21)

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

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

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

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

    2020-12-04
    5
  • YueShi
    这个问题是 怎么保证消息准确到达消费者(订阅者),
    就是保证消息不丢失,
    这个的解决是靠mq实现的, 常见的就是ack机制,
    消息确认机制: 消息在到达消费者后并被成功消费之后会向broker发送ack确认消息, broker才会认为这条消息已经消费完毕, 并进行下一条消息

    一般的ack级别分为 no-ack, auto-ack, manual-ack等

    但是过于严格的要求会导致新的问题产生, 就是一条消息被消费多次, 这个一般是通过代码去保证幂等性
    2020-12-05
    1
    3
  • 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
  • fwx
    当接入 IoT 设备数量在十万以内或者万级时,能否直接选择支持MQTT协议的消息队列,将MQTT Broker服务器和消息队列系统进行合二为一?

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

    2020-12-04
    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
  • 奇[爱心]一
    老师,您好。我是一个小白,文章中的数据库可以用什么数据库呢?还有流处理服务应该用什么?可以直接往数据库里这数据吗?
    2021-12-09
  • 前面讲网关的时候,北向接口里面没有提到mqtt协议支持。那么从网关到hub一般是有什么协议呢?如果还是mqtt,那网关在中间就是只做转发不做翻译?
    2021-06-17
  • 小太阳
    rabbitmq的mqtt插件,在生产环境使用有什么限制么?

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

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

    谢谢

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

    2021-04-13
  • 小可
    还有一种场景是设备数量多,且数据本身比较大,单条几百KB,如果数据上报走负载均衡,那么负载均衡的网卡就成了系统瓶颈,这种场景除了网卡融合还有其他方案吗?

    作者回复: 看设备端是否可控,如果可以,对设备划分,让设备接入不同的服务器

    2021-02-06
  • Geek_73e181
    能直接用卡夫卡代替mqtt吗?

    作者回复: 我想你指的mqtt是某个具体的实现,因为mqtt本意是一种协议,和Kafka完全不是一个维度的东西,无法直接比较。这要看你的应用场景了,mqtt针对物联网,客户端很轻巧,可以在嵌入式系统上运行。Kafka提供的工具生态应该是没有考虑这些的

    2021-01-27
  • 边际革命
    老师, 接入层有什么开源项目参考下吗?

    作者回复: 需要自己来组合搭建

    2021-01-13
  • 孙腾蛟
    HAProxy和网卡这部分会不会成为性能瓶颈,当有百万级别以上的并发, 作者有相关的文章或书推荐吗

    作者回复: 每种方案都有瓶颈的,如果特别大可以联系云服务商做更好的设计。如果自己搭建服务器实现,涉及的领域非常多,也不是一篇文章可以解决的

    2020-12-19
    2
  • 请教老师个问题:在加入缓存后,好像缺少一个将缓存数据落地的服务,这块有什么成熟解决方案吗?还是需要自己写一个服务去读缓存然后写入数据库?

    作者回复: 自己根据需求来做

    2020-12-07
  • Sceneryback
    系统把处理后的数据发到另一个 kafka topic, 几个 mqtt brokers 作为一个 consumer group 订阅此 topic 共同消费

    作者回复: 也是一个思路。这些brokers最终组成了一个什么呢?

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

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

    2020-12-05
    2
  • 德慢慢
    可以利用tag吗?

    作者回复: 可否具体讲讲过程是怎么样的呢?

    2020-12-04
收起评论
21
返回
顶部