基于MQTT协议的物联网云平台设计与实现

2023-06-17 08:39孙友林
物联网技术 2023年6期
关键词:帐号云端账号

孙友林

(金朋物联网技术研究院(广州)有限公司,广东 广州 511400)

0 引 言

物联网云平台主要为了满足物联网产品的云端接入服务、后台管理、APP 接口等方面的需求[1-4],云平台建设必须满足以下3 个方面的要求:

(1)平台伸缩性强,即能够满足前期的小规模部署,也能方便应对后期用户的规模化增长的需求;

(2)平台的数据结构必须高度抽象,不能过多陷于具体某一款产品的定义和功能开发中;

(3)云平台的代码应该应用目前主流的通用方法进行开发,便于开发人员的招聘以及项目的维护管理。

基于以上要求,同时考虑到系统的通用性、扩展性、高可用性等方面,系统必须采用分布式、节点多活的部署方式,将相关业务模块进行充分拆分,然后再对各个服务进行集群部署,以确保服务的高可用性。

1 框架设计

整个系统选用MQTT 作为物联网通信协议标准,云平台架构如图1所示。整个云平台需要提供对各类设备的接入和消息收发服务,除此之外还需要提供对APP 以及设备端的REST 服务。消息服务器将只作为一个通道的功能存在,不进行业务逻辑的处理,MQTT 可以直接传输二进制数据,相对于XMPP 协议的XML,效率更高,更轻量化。所有暴露的接口和通道绑定域名地址,系统之间的数据交互跟IP地址解耦。搭建WebService 服务,开放统一的数据接口给APP/Web 客户端使用,管理人员在Web 控制台可以对设备进行管理。物联网平台的建立需要经过一个设备量的增长过程,在平台建设初期,要充分考虑后期的系统扩容[5-7]。云平台的任意节点均可以实现快速集群,系统可以根据业务发展情况,通过调整平台的集群部署结构,快速实现系统扩容。

图1 MQTT 物联网云服务系统架构

1.1 新设备接入注册流程

硬件设备需要在云端注册后,才能够正常使用,设备接入注册流程如图2所示。注册时,需要给云端提供ProductKey和Passcode,云端根据ProductKey 和Passcode 以及随机数生成 Did 后返回给设备,设备收到后保存到FLASH 中,除非设备被Reset,否则一直使用此Did。同时,设备在注册时也要提供给服务器一个类似MAC 的值,这个可以是MAC 地址,也可以是设备序列号,但必须是用户在设备外面可以直接见到的唯一标识,用来给用户绑定设备。开发者在云上新建一个产品时,会得到一个ProductKey。设备在初始化后,自身的嵌入式程序随机产生 Passcode,用于云端注册和APP 绑定的安全鉴权;用户想通过手机控制设备前,必须先与该设备绑定。绑定的过程其实就是获取设备的Did和Passcode的过程,需要有接触设备权限的用户才能获取设备的Passcode。当用户按下设备的某个按钮后,设备会在短时间内处于可被配对状态,这时用户可以通过手机获取到设备的Did 和Passcode,手机会把用户与设备的绑定信息同步到云端。

图2 新设备接入注册流程

1.2 设备上报消息流程

设备接入云并开始正常运行之后,各种传感器的实时数据会根据业务设定,定期上报数据。上报的数据通过MQTT推送到APP 给用户,同时云端也会对消息进行存储。设备上报消息流程如图3所示。

图3 设备上报消息流程

1.3 新用户注册账号流程

用户需要注册之后才能使用云平台提供的服务,因为云平台需要对设备进行各种绑定,所以即使用户是通过第三方帐号注册的,也需要创建对应的帐号。新用户注册账号流程如图4所示。

图4 新用户注册账号流程

1.4 APP 控制设备流程

用户发送的指令成功到达设备之后,设备的状态将被更改。设备状态被更改后会触发设备上报运行数据的消息,把设备的新数据推送到APP 和服务器。APP 控制设备流程如图5所示。

图5 APP 控制设备流程

2 性能及扩展

在本文设计框架中,DB、MQTT 服务器、MQTT Client、Webservice、Spring MVC 等模块是相对独立的,可以很轻易地部署在不同的服务器上而不需要做太多的改动。在系统建设初期,可以安排两台服务器,一台服务器作为MQTT 服务器,另外一台服务器则把DB 和业务逻辑处理的部分部署上去。根据Emqttd 官方的测试,一台i3 CPU 配4 GB 内存的服务器就可以支持十万级别数量的并发[8-10]。后期可以根据实际需求,进行灵活扩展。

3 安全控制

物联网系统的安全性是至关重要的,如果系统被人入侵,后果不堪设想。基于此,系统的安全设计要求如下:(1)全站实现HTTPS 通信;(2)MQTT 实现账号认证和非对称加密双重安全机制;(3)物联网云平台,除暴露必要的端口外,其他全部内网运行,内网运行也需要通过防火墙实现严格的审核机制;(4)所有的数据库,MongoDB、Redis 等均开启指定IP 登录,限制非法登录来源;(5)所有密码均采用Hash+Salt 的方式进行存储,避免数据库暴露后账号被撞库;(6)所有对外的Rest 接口,开启防刷功能,针对同一个API接口,对同一认证账号,限制每秒访问次数;(7)对APP端的接口采用Token 验证机制,所有Token 均有时效性,在超过之前,APP 端应该主动更新Token,否则用户将需要重新登录验证;(8)在MQTT 侧,对所有的客户端开启ACL鉴权,后台开启监控,可随时取消非法设备的MQTT 权限;(9)所有的MQTT 报文、Rest 接口请求,均写入日志或者数据库中,以备审计查询。

4 第三方帐号登录注册

新浪微博、QQ、微信、百度等各大社交网站平台都开放了第三方登录的API,申请通过之后,客户可以利用他们的帐号体系比较方便地注册和登录。注册登录具体流程如图6所示。

图6 第三方账号登录注册流程

5 帐号管理机制

物联网云平台的Client 端有两大类:一类是各种硬件设备,另一类是使用这些硬件设备的人。对于设备级别的帐号,可以通过新设备注册流程来实现。对于人这个级别的用户,又可以分为设备的直接使用者、设备的开发者以及物联网云系统的管理者和超级管理员等各种类型的用户,这些用户可以使用各种手机APP、电脑浏览器等与物联网云平台交互。这种类型的用户应支持直接注册或者第三方帐号登录注册等方式。

6 结 语

本文构建了一个基于MQTT 协议的物联网云平台,对云平台的基础框架及基础能力进行了设计及实现,云平台已经在智能家居、智慧路灯等系统中得到了应用。物联网平台为设备提供安全可靠的连接通信能力,向下连接海量设备,支撑设备数据采集上云;向上提供云端API,指令数据通过API 调用下发至设备端,实现远程控制。未来,物联网平台还要提供其他增值能力,如规则引擎、数据分析、边缘计算等,为各类IoT 场景和行业开发者赋能。

猜你喜欢
帐号云端账号
“账号”不是“帐号”
彤彤的聊天账号
施诈计骗走游戏账号
云端之城
美人如画隔云端
行走在云端
云端创意
如何查看迅雷数字账号
专家支招4类网上帐号最易被盗