EMQX在物联网方面的一种应用方式

本文正在参与 EMQ 征文活动

业务背景

在我们的公司,我们专注于物联网设备的生产,这些设备需要监控超过100个的指标信息并且支持远程控制。为了实现这个目标,我们设计了一个高效的系统架构。

首先,我们的设备会采集各种指标信息,这些信息会被编码为PROTOBUF格式,然后通过MQTT协议发送给EMQX,这是一个高性能的MQTT消息中间件。EMQX在接收到这些信息后,会将其分发到我们自研的IOT-GATEWAY进行处理。

IOT-GATEWAY是我们的核心组件,它负责处理并分发从设备发送过来的所有消息。在处理完这些消息后,IOT-GATEWAY将把它们发送到Kafka,Kafka是一个分布式流处理平台,它可以处理大量的实时数据。

然后,后续的业务系统就可以从Kafka中获取并处理这些数据了。这些业务系统可以进行各种操作,比如数据分析、数据存储等。这样,我们就可以实时监控我们设备的各种指标信息了。

此外,我们的设备还支持远程控制。用户可以在我们的平台上或者通过小程序或APP下发指令,这些指令会被发送到设备并执行。这样,用户就可以随时随地控制我们的设备了。

为了保持我们系统的稳定性和高性能,我们已经将EMQX升级到了5.0.11版本。这个新版本的EMQX包含了许多新的特性和改进,它可以更好地支持我们的业务。

总的来说,我们的系统是一个高效、实时、可控的物联网设备监控和控制系统,它可以满足我们的各种业务需求。

业务数据流逻辑

数据流说明:

在我们的物联网设备系统中,我们采用了一种细致入微的数据流处理方式,以确保数据的实时性、准确性和安全性。

首先,我们的设备通过公网接入,利用物联网卡的4G网络实现连接。这一步骤不仅实现了设备与互联网的连接,而且通过4G网络,我们可以保证数据传输的高速和稳定。

接入网络后,设备会连接到我们的EMQX集群。EMQX是一个强大的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权限管理,区分了高权限用户和设备用户。设备用户只能订阅普通主题,而不能订阅系统主题,这样可以有效防止设备用户对系统主题的非法访问。
  • 通过实时流量监控,我们可以精确地了解每个主题的流量情况,便于我们进行流量调控和系统优化。
  • 在数据桥接方面,我们使用MQTT桥接进行流量控制,可以有效地控制数据流量,保证系统的稳定运行。
  • 我们采用了静态集群的方式,增加了系统的可用性,提高了系统的稳定性和可靠性。
  • 我们还设置了共享订阅的功能,可以实现消费负载均衡,提高了系统的处理效率和响应速度。

后续计划

  • 引入TDENGINE,实现每个设备对应一张报表,方便聚合查询
  • 引入CDN,设备连接后就近上报数据。
3 个赞