EMQX + PolarDB-X 一站式 IoT 数据解决方案

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 本文整理自 EMQX 产品经理李国伟,在PolarDB开源社区中关于EMQX与PolarDB-X构建一站式IoT数据解决方案的分享。本篇内容主要分为四个部分:1. IoT数据特性 2. EMQX介绍 3. EMQX与PolarDB-X集成 4. EMQX+PolarDB-X方案DEMO。

本文整理自 EMQX 产品经理李国伟,在PolarDB开源社区中关于EMQX与PolarDB-X构建一站式IoT数据解决方案的分享。本篇内容主要分为四个部分:


1. IoT数据特性

2. EMQX介绍

3. EMQX与PolarDB-X集成

4. EMQX+PolarDB-X方案DEMO

 

一、IoT数据特性

图片.png

物联网应用场景离不开数据的采集、传输、存储、分析等过程。大家可以按照数据特性以及业务需求,把物联网数据划分为元数据、消息数据、时序数据。如上图所示,数据集通过EMQX连接设备,实现数据存储。


元数据是设备最新的状态数据,如在线状态、当前传感器数值。消息数据是设备发布的消息,包括上报数据和下发指令。时序数据是持续变化的元数据和消息数据。

图片.png 

在物联网应用中,数据存储的需求无处不在。元数据、消息数据经过存储使用后,可以支撑起各类业务需求。由于连接数规模、采集点数量庞大,不同的数据业务,需要对应不同的数据库选型。


元数据需要频繁插入更新,并且支持结构化查询,所以推荐使用关系数据库,进行存储。

消息数据不需要全量存储,只需要记录关键操作,或者提取消息数据的关键数据,应当根据业务情况适当的选型。


时序数据的特点是,数据修改频次低,海量数据对写入速度和存储压缩比敏感,查询需求多样,所以推荐使用时序数据库。

 

二、EMQX介绍

图片.pngMQTT是一个轻量的发布订阅模式消息传输协议,专门针对低带宽和不稳定网络环境的物联网应用设计。


MQTT协议是基于发布/订阅模式的物联网通信协议,凭借简单易实现、支持QoS、报文小等特点,占据了物联网协议的半壁江山。


MQTT协议广泛应用于物联网、移动互联网、智能硬件、车联网、电力、能源等领域,既能作为网关在设备侧接入通信,也能作为设备-云端的通信协议:行业内ZigBee、LoRa、Modbus等绝大多数网关协议最终都转换为MQTT协议接入上云。

图片.png

EMQX是MQTT代理,即MQTT消息服务器。它将设备和应用联系起来,充当设备与设备、设备与应用之间的桥梁。


EMQX是一个大规模分布式的物联网专用的MQTT消息服务器。它可以高效可靠的连接海量物联网设备,提供高可靠、高性能的实时数据移动、处理和集成,助力构建关键业务的物联网平台和应用。

图片.png 

EMQX基于Apache 2.0许可证完全开源,自2013年起200+开源版本迭代,在全球都有广泛的用户。


EMQX在协议的支持度、接入、吞吐、延迟等方面有显著的优势。在最新发布的5.0版本中,EMQX单节点支持500万MQTT设备连接,集群可扩展至1亿并发MQTT连接,可以支撑超大规模的物联网应用。

图片.png

EMQX可以连接任何设备。通过开放标准物联网协议MQTT、QUIC、LwM2M/CoAP,支持连接所有车联网、工业、能源电力等关键业务场景的异构终端设备。

图片.pngEMQX提供了安全的双向通信。通过TLS/SSL、QUIC和多样化的认证机制确保安全的双向MQTT安全通信。支持用户名/密码、JWT、PSK和X.509证书认证,确保数据安全。

图片.png除此之外,EMQX实时数据处理能力,通过一个强大的基于SQL的规则引擎,以数百万条/秒的速度实时过滤、转换与处理设备与云端之间双向移动的MQTT消息数据。

图片.png在运维管理以及可观测性方面,EMQX通过CLI、HTTP API和Dashboard,轻松管理EMQX集群。支持使用Datadog、Statsd、Prometheus和Granfana进行监控和报警。

 

三、EMQX与PolarDB-X集成

图片.png 

接下来,看一下EMQX如何与PolarDB-X集成,实现物联网数据PolarDB-X存储方案。这个方案广泛用于EMQX开源版本。由于数据存储业务众多,连接数规模与采集点数量庞大,所以需要超高并发写入和海量存储支持。


通过EMQX的数据集成能力,以及MQTT共享订阅功能,将内部的设备、事件、消息,发送到用户编写的程序中,实现PolarDB-X的插入或更新。

图片.png数据集成是EMQX在发布订阅模型的基础之上的数据处理与分发组件,通过简单的可视化的配置,即可将消息流以及设备事件与Kafka、RabbitMQ等消息中间件,以及各类SQL/NoSQL/时序数据库等数据系统集成。

图片.png 

通过上述规则EMQX可以处理各类数据,包括MQTT消息和设备生命中心事件。其中,MQTT消息包括设备端的上报,或者云端的下发。


设备生命周期事件是指,整个设备在运行过程中的事件。这些事件对物联网的应用建设有很大帮助。比如进行设备管理,安全审计啊,消息确认等等。消息丢弃、消息投递、消息确认是精细化的MQTT消息传输过程。

图片.png共享订阅是在多个订阅者之间实现负载均衡的订阅方式,相当于订阅端的负载均衡功能。当发布者的生产能力较强时,可能会出现订阅者的消费能力无法及时跟上的情况。


如果在EMQX集群中,某个节点挂了,同时订阅多个节点避免某个节点故障导致数据丢失。

图片.png 

用户可以通过使用$share/{group}/{topic}或$queue/{topic}格式的主题,发起共享订阅。


如上图所示,多个客户端发布的消息。经过EMQX之后,共享订阅会在多个订阅者之间均衡派发消息。

 

四、EMQX+PolarDB-X方案DEMO

图片.png

在本次演示中,使用PolarDB-X存储MQTT设备在线状态,在上下线时更新并记录更新时间。


使用PolarDB-X记录设备事件,记录设备上下线历史、订阅、取消订阅历史记录等行为轨迹。


使用消息存储功能,将存储设备上报的消息,来源设备、主题、消息内容进行存储,实现消息入库。

图片.png上图是worker的实例代码,负责接收MQTT消息,进行数据插入。在处理时,把它转换成JSON,根据JSON event判断插入历史表,或者进行其他操作。

图片.png

上图是设备在线状态表,包括一个ID、设备IP、在线状态,创建时间、更新时间。

图片.png

历史事件和消息表都有对应字段,对应的数据类型。消息表的Payload可以存储较大的消息文本。

图片.png

EMQX规则将所需事件数据通过republish动作,转发至worker处理。

图片.png

接下来,进入实际的操作演示。首先,选择本地部署PolarDB-X,按照文档中的快速入门指南,在本地部署。

图片.png

然后,创建表结构。上图展示了具体的SQL文件,方便大家进行创建。

图片.png

接下来,插入数据并更新语句。更新ip_address和状态。当唯一键重复时,将会执行更新操作。如果不重复,会写入数据。


client_events表包括客户端的事件。当设备断开连接,没有topic。当会话订阅时,有topic。

图片.png

接下来,查看表里面都有哪些数据。如上图所示,表里包括了id、clientid、event、topic、created_at、updated_at。

图片.png 接下来,插入messages表。将clientid,topic,payload插入。

图片.png接下来,在本地启动EMQX。启动成功之后,访问localhost18083,把语言改成简体中文。

图片.png在数据集成功能中,主要包括数据桥接以及规则,用规则获取数据。

图片.pngEMQX的事件通过主题进行获取。在客户端建立上线事件连接,用调试的方式,执行SQL。EMQX可以在客户端里,拿到相关信息,包括ID、关键事件、连接时间、连接属性等等

图片.png然后,断开连接。断开连接对应的是disconnected事件,跟连接的结构很像。但在event里,是断开连接事件。所以,用户可以通过event字段,区分是否连接。

图片.png在设备的事件历史记录方面,获取订阅跟取消订阅事件。


session_subscribed是订阅事件。当会话订阅执行之后,可以获取当前的上下文信息、订阅的topic等等。


session_unsubscribed是取消订阅事件,跟订阅大同小异。event_topic变成了取消订阅的主题。

图片.png在消息存储方面,用户需要从客户端发出的主题中,获取消息。比如从t-1主题发布消息时,需要从t-1主题获取消息。其中,最主要的是Payload信息。其他数据,可以根据需要进行存储。

图片.png当用户获取相关数据后,可以使用数据桥接进行转发,通过外置数据库或者MQTT进行数据发送。除此之外,用户也可以使用控制台输出,把结果打印到控制台。

图片.png接下来,进行测试。在问题分析中,找到WebSocket客户端建立连接。已发送是t-1,已接收是t-2。消息经过republic,进行转发。

图片.png在控制台里,除了消息发布,还有控制台打印。把动作和上下文信息打印出来,方便用户进行调试。

图片.png

在EMQX开源版里,由于没有直接编写数据库的能力。所以用户需要使用Worker建立一个mysql链接,连接到PolarDB,使用PolarDB的兼容模式。

图片.png然后,创建订阅者。把客户端连接到EMQX上。在主程序里,会创建十个客户端。每个客户端都共享订阅主题。当收到消息时,注册一个handleMessage程序就。它会把data转成对象。


转换之后,就可以获取相应的字段。当event已连接或断开连接时,需要写入或更新设备表。把数据插入到历史表里。


如果是消息发布事件,把消息插入message表里。如果是其他事件,把这个事件插入到客户端事件表里。每来一条消息,会轮流派发到客户端。不会出现一条消息同时给十个客户端处理。

图片.png

PolarDB-X超高并发、海量存储的特性可以应对物联网大规模设备接入所需的各类数据存储场景。


其分布式特性以及存储计算分离架构带来的水平扩展、分布式事务、混合负载等能力,可以与同样是分布式的EMQX结合使用,打造真正的可伸缩物联网应用,应对从数千到数千万的设备接入。


除了本次分享的开源版方案,EMQX Cloud和EMQX企业版中还提供了MySQL数据集成能力,可以直接通过PolarDB-X兼容语法完成数据集成,更简单高效的实现物联网数据集成。

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
1月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
1月前
|
人工智能 关系型数据库 分布式数据库
拥抱Data+AI|“全球第一”雅迪如何实现智能营销?DMS+PolarDB注入数据新活力
针对雅迪“云销通App”的需求与痛点,本文将介绍阿里云瑶池数据库DMS+PolarDB for AI提供的一站式Data+AI解决方案,助力销售人员高效用数,全面提升销售管理效率。
|
4月前
|
物联网 数据管理 Apache
拥抱IoT浪潮,Apache IoTDB如何成为你的智能数据守护者?解锁物联网新纪元的数据管理秘籍!
【8月更文挑战第22天】随着物联网技术的发展,数据量激增对数据库提出新挑战。Apache IoTDB凭借其面向时间序列数据的设计,在IoT领域脱颖而出。相较于传统数据库,IoTDB采用树形数据模型高效管理实时数据,具备轻量级结构与高并发能力,并集成Hadoop/Spark支持复杂分析。在智能城市等场景下,IoTDB能处理如交通流量等数据,为决策提供支持。IoTDB还提供InfluxDB协议适配器简化迁移过程,并支持细致的权限管理确保数据安全。综上所述,IoTDB在IoT数据管理中展现出巨大潜力与竞争力。
125 1
|
2月前
|
Rust 资源调度 安全
为什么使用 Rust over C++ 进行 IoT 解决方案开发
为什么使用 Rust over C++ 进行 IoT 解决方案开发
94 7
|
2月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云瑶池在2024云栖大会上重磅发布由Data+AI驱动的多模数据管理平台DMS:OneMeta+OneOps,通过统一、开放、多模的元数据服务实现跨环境、跨引擎、跨实例的统一治理,可支持高达40+种数据源,实现自建、他云数据源的无缝对接,助力业务决策效率提升10倍。
|
3月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云数据库重磅升级!元数据服务OneMeta + OneOps统一管理多模态数据
|
3月前
|
存储 物联网 关系型数据库
PolarDB在物联网(IoT)数据存储中的应用探索
【9月更文挑战第6天】随着物联网技术的发展,海量设备数据对实时存储和处理提出了更高要求。传统数据库在扩展性、性能及实时性方面面临挑战。阿里云推出的PolarDB具备高性能、高可靠及高扩展性特点,能有效应对这些挑战。它采用分布式存储架构,支持多副本写入优化、并行查询等技术,确保数据实时写入与查询;多副本存储架构和数据持久化存储机制保证了数据安全;支持动态调整数据库规模,适应设备和数据增长。通过API或SDK接入IoT设备,实现数据实时写入、分布式存储与高效查询,展现出在IoT数据存储领域的巨大潜力。
89 1
|
4月前
|
存储 SQL Cloud Native
揭秘!PolarDB-X存储引擎如何玩转“时间魔术”?Lizard多级闪回技术让你秒回数据“黄金时代”!
【8月更文挑战第25天】PolarDB-X是一款由阿里巴巴自主研发的云原生分布式数据库,以其高性能、高可用性和出色的可扩展性著称。其核心竞争力之一是Lizard存储引擎的多级闪回技术,能够提供高效的数据恢复与问题诊断能力。本文通过一个电商公司的案例展示了一级与二级闪回技术如何帮助快速恢复误删的大量订单数据,确保业务连续性不受影响。一级闪回通过维护最近时间段内历史数据版本链,支持任意时间点查询;而二级闪回则通过扩展数据保留时间并采用成本更低的存储方式,进一步增强了数据保护能力。多级闪回技术的应用显著提高了数据库的可靠性和灵活性,为企业数据安全保驾护航。
54 1
|
4月前
|
关系型数据库 分布式数据库 数据库
基于PolarDB的图分析:通过表格将数据快速导入到图
本文介绍了使用 PolarDB PostgreSQL兼容版的AGE插件时,在大数据量下,快速导入数据的方法。可以快速将图数据库中亿级以上的节点和边快速导入到数据库中,避免了插入边时进行查询带来的性能瓶颈。
|
4月前
|
存储 传感器 监控
理解并利用物联网(IoT)数据的技术探索
【8月更文挑战第11天】物联网数据是数字化转型的重要资源。通过深入理解物联网数据的特性和价值,并采取有效的收集、处理和分析策略,我们可以更好地利用这些数据为企业决策提供支持、优化运营效率、创造新的商业模式并推动数字化转型的深入发展。

热门文章

最新文章

相关产品

  • 云原生数据库 PolarDB