IoT物联网平台的服务器需要管理海量设备的接入,并且接收来自设备的海量数据的输入,那么服务器要怎么应对这样的挑战呢?
IoT设备一般是通过MQTT 协议接入云平台的,那么设备接入的服务器就是 MQTT Broker 服务器。
从架构设计来说,负责设备接入的部分一般叫作设备接入层,也被称为 IoT Hub。设备接入层之后,才是和互联网系统类似的业务层。具体的系统架构图可能是下面这样的:
估计你也发现问题了,这样的架构根本无法支撑物联网场景中海量设备的接入和海量数据的输入。单台 MQTT Broker 服务器很容易面临性能瓶颈,怎么打造高性能的设备接入层?
接下来,我就带你一步一步地设计一个高并发的设备接入层。在这个过程中,我会为你详细地讲解我们需要用到的重要技术,让你为物联网平台的搭建做好技术储备。
负载均衡:让多台服务器协作
面对性能瓶颈,我们可以集合多个服务器的力量来解决问题,也就是说,可以通过增加多台 MQTT Broker 服务器来满足海量设备的连接请求。
但是服务器数量变多之后,它们具体要怎么协作呢?比如一个 MQTT 请求过来了,它应该被分配给哪台服务器处理呢?更进一步地说,怎么保证每台服务器的负担和压力都基本平衡呢?
这就要用到负载均衡技术。负载均衡(Load Balancer)这个名字非常形象,我们可以分成“负载”和“均衡”两个词来理解。
-
负载是指服务器面对的网络连接和服务请求的压力,也就是 “困难”。
-
均衡是针对服务器压力的解决办法,多个服务器一起来处理任务,并且这几个服务器的压力要达到平衡的状态,也就是“分担”。
当负载均衡服务器将物联网设备的网络请求分配到 MQTT Broker 服务器后,MQTT Broker 服务器就可以与设备建立连接,并且收到设备上传的数据了。然后,数据就会传输给数据流处理服务器或者写入数据库中。
但是,数据流处理和把数据写入数据库都是花时间的操作,它们和数据传入的速度并不一致。为了可以让 MQTT Broker 服务器高效地完成数据的传输,同时保证数据流处理和写入数据库的操作可靠执行,我们需要在 MQTT Broker 服务器和数据流处理服务器之间加入异步处理机制。
消息队列:避免耗时等待
异步处理机制要怎么实现呢?行业内一般通过消息队列来实现。你可以把消息队列想象成双十一购物节后的快递公司,它收到商家大量的运单,然后快递公司按照一定的节奏完成这些运单的递送任务。
在我们的系统中,MQTT Broker 服务器将数据给到消息队列,就完成了数据传输的工作。在这之后,数据流处理和写入数据库的操作只要按照自己的节奏,消费消息队列内的数据就行了。
另外,消息队列还提供了额外的两个好处:
-
实现了 MQTT Broker 服务器和数据流处理服务器之间的解耦,双方没有直接的依赖,所以维护更新会更加方便。
-
可以平衡输入数据量的大小变化,所以数据流处理服务器不会因为骤增的压力而崩溃。
既然消息队列这么重要,你肯定也想知道,在实践中有没有开源的软件可以选择呢?答案是有的。最常见的选择有 Kafka 和 RabbitMQ 等。
缓存系统:让数据读写更快速
从架构图中我们可以看出来,数据流处理服务器处理完数据后,这些数据会存储到数据库中,提供给批处理或者业务服务器使用。
但是数据库的读写数据是一个速度比较慢的操作,尤其是基于磁盘介质存储的数据库。为了提高性能,就需要用到缓存系统了。
缓存系统一般会将数据暂时存储在内存中,这样数据流处理应用就不需要直接与低速的磁盘打交道了。而且,如果我们读取的是经常用到的热点数据时,这些数据全都不需要重复从磁盘读取。这样既减轻了数据库的压力,又提高了数据处理速度,一举两得。
缓存系统的常用开源选择有 Redis 和 Memcached 等。其中 Redis 更是在数据持久机制和主从节点复制的高可用特性上做了很多工作,不但功能强大,而且效率也很高。
加入缓存系统之后,设备接入层的整体系统架构就完成了,你可以参考下面这张图。
小结
总结一下,物联网云平台的服务器为了应对海量设备接入和海量数据输入的挑战,需要打造高并发的设备接入层。所以在这一讲中,我带你设计并完善了设备接入层的整体架构,并讲解了需要用到的负载均衡、消息队列和缓存系统等技术。
扫码获取完整《物联网开发实战》
本文章来源于互联网,如有侵权,请联系删除!原文地址:面对海量IoT设备,如何打造高性能物联网平台接入层?
##注:本教程不涉及硬件方面,所有的硬件发送数据都是模拟的。最终完成的目标是,在阿里云接收到硬件的数据,然后转发到自建服务器,然后存储并大屏展示,其中还包含远程控制硬件设备。(后面可能还有其他需求,还没有想好。) 一、创建物联网平台实例 物联网平台在连接少量设…