物联网网关:设备和云平台之间的桥梁
物联网中跟设备有关的几个技术点,包括物模型、设备的零配置组网、设备进行网络通信要用到的 MQTT 协议等。但是,并不是所有的设备都能直接接入互联网,直接跟云平台通信。比如智能家居中的一些传感器,它们使用的通信技术是 BLE 或者 ZigBee,本身连 IP 地址都没有。那么,这样的设备要怎么联网呢?物联网网关正在成为整个物联网体系中不可或缺的角色。它作为物联网设备与云平台之间的桥梁,变得越来越重要。
协议转换:搭建桥梁的关键
物联网网关凭什么能搭建这座桥梁呢?奥秘就在于协议转换。BLE 、ZigBee 和 LoRa 设备在跟网关通信的时候,需要网关基于开放的或者内部私有的协议,解析出数据;然后网关再使用跟云平台的连接协议来组织数据,完成数据传输。
北向接口需要接入互联网,所以通常的选择有 RJ45 以太网口、光纤接口、Wi-Fi 和 4G、NB-IoT 等蜂窝网络模组等。南向接口用来连接物联网设备,除了刚说的 BLE、ZigBee、LoRa、Wi-Fi 这些无线技术的接口,常见的还有用在工控机(Industrial Personal Computer,工业控制计算机)上的 RJ45 以太网口、RS232、RS485 等有线接口。这里需要注意的是,每个网关设备的接口类型和个数不是固定的,因为网关产品一般会根据应用场景确定几个不同的规格型号。不同型号的网关需要支持不同类型的协议,以及不同个数协议的转换,所以网关的协议转换功能一般采用插件的软件架构方式。
插件机制这种二次开发能力非常重要。一方面,它让我们可以根据接口的情况,动态、灵活地配置协议转换功能;另一方面,它也可以方便我们开发私有协议的解析功能。比如通过 BLE、ZigBee 或 LoRa 技术跟网关通信的设备,它们通常采用的是私有的应用层协议,这就需要我们基于设备架构设计时定义的私有协议,专门编写解析代码。至于使用 RJ45 网口或 Wi-Fi 跟网关连接的物联网设备,除了采用基于 TCP 或者 UDP 的私有协议之外,也可能采用我们之前讲过的 MQTT 或者 CoAP 这样标准的协议。这时,我们就需要按照这些协议的格式来处理。另外,工控机 和 PLC (Programmable Logic Controller,可编程逻辑控制器)中经常使用的标准协议有 Modbus、ProfiBus、OPC UA 和 BACnet 等。如果你在相关行业,可能对它们有一定了解。这些协议也是需要进行转换的,因为它们一般只应用于工业领域。
网关的其他功能经过协议转换,网关就得到了通用格式的数据。对于这些数据,网关还需要进行持久化,把数据临时存储起来。网关的存储功能可以防止因网络临时故障等原因,导致设备数据的丢失。另外,网关和设备的配置信息也需要存储在网关中,以便设备运行过程中快速读取。
同时,数据的安全性也非常重要,物联网网关需要做好这几个方面的事情:
1、完善的本地身份认证。这样可以防止网关设备被随意修改软件或者数据。
2、网关保证数据的加密传输。因为很多物联网设备的计算能力非常弱,不具备进行数据加密的能力,这时就需要借助网关来保证数据或者控制命令的加密和解密。
3、网关能够支持运营商专网接入,或者支持 VPN(Virtual Private Network,虚拟专用网络)技术。这里我补充说明一下,VPN 技术的好处是基于互联网网络建立加密通道。这样既保证了数据传输的安全可靠,又比建立专线成本要低。常用的 VPN 协议有 IPsec、OpenVPN 等。除了我刚才讲到的协议转换、存储功能和安全管理,物联网网关一般还有设备管理、网关配置、空中升级这些功能模块。
网关+边缘计算
IotHub
负责设备接入的这一部分一般叫作设备接入层,也被称为 IoT Hub。设备接入层之后,才是和互联网系统类似的业务层
估计你也发现问题了,这样的架构根本无法支撑物联网场景中海量设备的接入和海量数据的输入。单台 MQTT Broker 服务器很容易面临性能瓶颈。所以前面提到的“服务器怎么应对挑战”的问题就变成了:怎么打造高性能的设备接入层?
负载均衡:让多台服务器更好地协作
负载是指服务器面对的网络连接和服务请求的压力,也就是 “困难”。均衡是针对服务器压力的解决办法,多个服务器一起来处理任务,并且这几个服务器的压力要达到平衡的状态,也就是“分担”。
负责算法:轮训,加权轮训,最小连接策略,原地址HASH
消息队列:避免耗时的等待
当负载均衡服务器将物联网设备的网络请求分配到 MQTT Broker 服务器后,MQTT Broker 服务器就可以与设备建立连接,并且收到设备上传的数据了。然后,数据就会传输给数据流处理服务器或者写入数据库中。但是,数据流处理和把数据写入数据库都是花时间的操作,它们和数据传入的速度并不一致。为了可以让 MQTT Broker 服务器高效地完成数据的传输,同时保证数据流处理和写入数据库的操作可靠执行,我们需要在 MQTT Broker 服务器和数据流处理服务器之间加入异步处理机制。
缓存系统:让数据读写更快速
缓存系统一般会将数据暂时存储在内存中,这样数据流处理应用就不需要直接与低速的磁盘打交道了。而且,如果我们读取的是经常用到的热点数据时,这些数据全都不需要重复从磁盘读取。这样既减轻了数据库的压力,又提高了数据处理速度,一举两得。