EMQX 在物联网设备监控和控制的应用实践
作者:whook, EMQX 社区用户。
我目前任职于一家专注于物联网设备生产的公司。我们的设备需要监控超过 100 个指标信息,并支持远程控制。为了实现这一目标,我们设计了一套高效的系统架构,同时在架构中采用了 EMQX 来分发大吞吐量的实时物联网设备数据。这套架构的目标是实时处理和精确存储物联网设备数据,并确保系统的稳定性和用户的使用体验。
公司设备首先会采集各种指标信息,并将其编码为 Protobuf 格式,然后通过 MQTT 协议发送到 EMQX (高性能 MQTT 消息中间件)。EMQX 接收到信息后,会将其分发至 IOT-GATEWAY 进行处理 (IOT-GATEWAY 是我们自研系统的核心组件,负责处理并分发所有从设备发出的消息)。IOT-GATEWAY 将消息处理完毕后,会将其发送至 Kafka (分布式流处理平台,专门处理大量实时数据)。数据进入 Kafka 之后,其他业务系统便可获取数据并进行各类操作,比如数据分析、数据存储等。
这一系统架构完美满足了我们对设备指标信息的实时监控需求,并且支持远程控制功能。用户不仅可以在我们的平台上进行操作,还可以通过小程序或 APP 下达指令。这些指令会迅速发送到设备并得到执行,使用户能够随时随地控制设备。总的来说,这是一个高效、实时、可控的物联网设备监控和控制系统,能够满足各种业务需求。
同时,为了确保系统的稳定性和高性能,我们将 EMQX 升级到了 5.0.11 版本。这一新版本带来了许多全新的特性和改进,能够更好地支持我们业务的运行。
数据流详细说明
在系统架构中,我们采用了数据流处理方式,以确保数据的实时性、准确性和安全性。
首先,设备通过公网接入,利用物联网卡的 4G 网络实现连接。这一步骤不仅确保了设备与互联网的稳定连接,而且 4G 网络能够保证数据传输的高速和稳定。
设备接入网络后会连接到 EMQX 集群。EMQX 是 EMQ 公司旗下一个强大的 MQTT 消息中间件,能够处理大量的并发连接。设备接入 EMQX 集群后,通过 EMQX 的桥接功能,将数据量大的实时信息(每秒一条)转发到另一个 EMQX 集群,实现数据的分流。这种分流设计可以有效减轻单一集群的压力,从而保证系统的稳定运行。
桥接的 EMQX 集群连接的是我们自主研发的 IOT-GATEWAY。它支持动态扩容缩容,能够根据实时数据的大小,自动调整处理能力。IOT-GATEWAY 会将实时数据转发到 Kafka。对于非实时数据,系统会通过另一个IOT-GATEWAY 进行处理,最后也将数据转发到 Kafka,以确保所有数据都能得到有效的处理。
当数据进入 Kafka 后,我们设置了实时数据处理模块和非实时数据处理模块。实时数据处理模块接收 Kafka的实时数据,并将消息解析后存入 DWS,同时将设备最新的实时消息存入 Redis 和 MySQL,以备后续查询。非实时数据处理模块则主要对远控数据进行处理,确保远程控制的顺畅进行。
此外,还有 WEB-SERVICE 模块,这是对应 web、APP、小程序和平台的后台服务。它为用户提供设备最新情况的查看、远程控制设备的功能、用户设备权限的处理以及设备基础信息的管理等服务。
数据流 Topic 设计
在系统设计中,我们将client_id设定为设备出厂时的唯一编号。这种设计突出了设备的唯一性,确保了设备在整个系统中的唯一标识。
关于设备上行数据的主题(Topic)设计,我们采用了如下的格式:
mqtt/client/topic/CLIENT_ID/业务名称
这种设计让我们能够轻松监控某一具体设备的上行信息。通过将CLIENT_ID和业务名称相结合,我们可以更精确地了解设备的运行状态和业务处理情况,从而进行更有效的管理和决策。
在平台下行数据的主题(Topic)方面,我们采用了以下格式:
mqtt/server/topic/CLIENT_ID/业务名称
这种设计方便我们监控某一具体平台的下行信息。在某业务的数据流量较大的情况下,我们可以及时进行业务拆分,解决系统压力问题,确保系统的稳定性。
总体来说,Topic设计的目标是实现对设备信息和平台信息的精确监控,以及在系统压力增大时进行有效应对。通过这样的设计,我们可以确保系统的稳定运行,同时提高系统的处理效率和响应速度。
当前平台使用的 EMQX 功能
- 通过订阅 EMQX 系统级别的上下线主题,实时监控每个设备的上线和下线信息,从而提供实时的设备运行状态。
- 在用户管理方面,我们采用外置的 MySQL 数据库进行用户数据存储,这样不仅可以确保用户数据的稳定可靠,还便于进行用户数据的查询和管理。
- 在权限管理方面,我们设置了ACL(Access Control List)权限管理,对高权限用户和设备用户进行了区分。设备用户只能订阅普通主题,而不能订阅系统主题,从而有效防止设备用户对系统主题的非法访问。
- 通过实时流量监控,我们可以精确了解每个主题的流量情况,便于进行流量调控和系统优化。
- 在数据桥接方面,我们采用了 MQTT 桥接进行流量控制,有效控制了数据流量,确保系统的稳定运行。
- 我们采用了静态集群的方式,增强了系统的可用性,提高了系统的稳定性和可靠性。
- 此外,我们还设置了共享订阅的功能,实现了消费负载均衡,进一步提高了系统的处理效率和响应速度。