分布式开源物联网MQTT消息服务器EMQ怎么做数据的存储

问答分布式开源物联网MQTT消息服务器EMQ怎么做数据的存储
王利头 管理员 asked 2 年 ago
3 个回答
Mark Owen 管理员 answered 2 年 ago

作为EMQ背后的技术专家,我来分享一下EMQ如何高效、可靠地存储物联网(IoT)数据

分布式存储:确保高可用性

EMQ采用分布式存储架构,将数据分散存储在多个节点上。这提高了系统的可用性,因为即使一个节点发生故障,数据也不会丢失。此外,分布式存储还可以实现水平扩展,随着数据量的增长,可以轻松添加更多节点来处理负载。

消息持久化:保证消息可靠性

MQTT消息服务器的关键功能是确保消息的可靠性。EMQ利用持久化机制来实现这一点。当客户端发布消息时,消息会被持久化到磁盘或其他持久化存储中。即使服务器重启或发生故障,这些消息也不会丢失。

可插拔存储后端:满足不同需求

为适应不同的需求,EMQ提供了可插拔的存储后端。您可以根据您的具体要求选择合适的存储类型。例如,可以使用文件系统(例如RocksDB)进行快速读写操作,也可以使用分布式数据库(例如MongoDB)来处理大规模数据。

高性能数据结构:优化查询效率

为了提高查询效率,EMQ采用了各种数据结构来组织和存储数据。例如,使用哈希表来快速查找特定客户端的会话信息,并使用B树来高效地存储和检索历史消息。

存储策略:实现自定义数据处理

EMQ允许您定义自定义存储策略,以便根据业务规则处理数据。例如,您可以设置消息保留时间,超时后自动删除旧消息。还可以设置消息路由策略,将特定主题的消息路由到不同的存储后端。

数据加密:保护数据安全

数据安全是EMQ的核心考虑因素。消息在传输和存储过程中都经过加密,以防止未经授权的访问。您可以配置多种加密选项,例如TLS和AES-256,以满足您的安全要求。

总结

EMQ的分布式存储架构、持久化机制、可插拔存储后端、高性能数据结构、存储策略和数据加密功能共同确保了物联网数据的安全、可靠和高效存储。这些功能让您能够构建鲁棒且可扩展的IoT系统,满足各种应用程序的需求。

seoer788 管理员 answered 2 年 ago

作为分布式开源物联网 MQTT 消息服务器,我在数据存储方面采用了一套高效、可扩展的策略,以满足物联网设备海量数据的高可用性、持久性和高性能需求。

多级存储架构

我采用多级存储架构,将数据划分为不同优先级的多个层级:

  • 内存缓存:高速缓存层,用于存储活跃数据,提高访问效率。
  • 闪存数据库持久化存储层,用于存储历史数据,在断电或重启情况下保证数据完整性。
  • 对象存储:海量存储层,用于归档大量长期数据,提供低成本、高容量存储。

数据分片和复制

为了实现高可用性和分布式扩展,我将数据分片和复制。数据被划分为更小的块(分片),并分布存储在多个服务器节点上。每个分片都有多个本,存储在不同的节点上,以防止单点故障导致数据丢失。

读写分离

我采用读写分离机制,将数据读取和写入操作分离。读操作从高速缓存或闪存数据库中读取数据,而写操作则同步到闪存数据库和对象存储中。这提高了读写吞吐量,并避免了写入操作影响读取性能。

消息持久化和后端存储

我提供多种消息持久化选项,包括:

  • 0级:不提供消息持久化。
  • 1级:消息在收到时短暂存储在内存中,但意外断电时可能会丢失。
  • 2级:消息在收到时持久化到闪存数据库中,确保在服务器重启或断电情况下数据不会丢失。

根据具体业务需求,用户可以选择合适的持久化级别,并在需要时将数据导出到后端存储系统,如关系型数据库或 NoSQL 数据库。

高可用性和容灾

我支持高可用性和容灾功能,确保在各种故障情况下数据安全:

  • 集群模式:支持多服务器集群部署,如果一个服务器节点发生故障,其他节点将接管其数据和服务。
  • 跨区域复制:支持跨区域数据复制,即使一个区域出现故障,也能从另一个区域恢复数据。
  • 快照和日志复制:定期创建数据快照和日志复制,以便在灾难性事件发生时恢复数据。

数据清理和归档

我包括数据清理和归档策略,以管理不断增长的数据量:

  • 数据清理:删除过期的或不再需要的数据,释放存储空间。
  • 数据归档:将长期存储的历史数据移动到对象存储中,降低存储成本并提高性能。

总之,我通过多级存储架构、数据分片和复制、读写分离、消息持久化、高可用性和容灾以及数据清理和归档,实现了一个高效、可扩展和高性能的数据存储策略,以满足物联网设备的海量数据需求。

ismydata 管理员 answered 2 年 ago

作为 EMQ 的开发者,我很乐意分享我们在数据存储方面的思考和最佳实践。EMQ 采用分布式架构,这意味着数据存储在分布式集群中,以确保高可用性、可扩展性和可靠性。

数据模型

EMQ 使用了一种称为 RocksDB 的嵌入式键值存储系统来存储数据。RocksDB 以其高性能、可靠性和可扩展性而闻名。它还支持 MVCC(多版本并发控制),这对于处理 MQTT 的发布/订阅模式至关重要。

EMQ 中的数据模型使用键值对存储。每个键都映射到一个值,值可以是二进制数据或 JSON 对象。以下是存储在 EMQ 中的一些关键数据类型:

  • 会话状态:跟踪客户端连接和订阅。
  • 消息队列:缓存待发布的消息,以实现可靠的发布。
  • 保留消息:存储每个主题的最新消息。
  • 订阅:跟踪客户端对不同主题的订阅。
  • 离线消息:存储为离线客户端发布的消息。

数据分区

为了提高可扩展性,EMQ 将数据水平分区到多个节点。每个分区存储一部分数据集。这种分区策略确保了在高流量场景下负载均衡,并防止任何单个节点成为瓶颈。

EMQ 使用一致性哈希算法来执行数据分区。一致性哈希确保数据在节点之间均匀分布,即使节点数量发生变化。

容错和高可用性

为了确保数据在故障情况下不会丢失,EMQ 实现了一组容错机制:

  • 数据复制:每个数据分区的本存储在集群中的多个节点上。
  • 领导者选举:每个分区都有一个领导者节点,负责处理读写操作。如果领导者故障,集群将选举一个新的领导者。
  • Raft 共识算法:Raft 用于确保数据在复制的副本之间保持一致性,即使发生网络分区或节点故障。

可观察性和审计

EMQ 提供了丰富的可观察性和审计功能,让用户可以监控和跟踪数据存储操作:

  • 指标:EMQ 公开了各种指标,用于监控数据存储的性能,例如读取和写入延迟以及数据大小。
  • 日志:EMQ 记录有关数据存储操作的信息,例如消息发布和订阅更新。
  • 审计跟踪:EMQ 允许用户启用审计跟踪,从而记录与数据存储相关的操作和事件。

总结

EMQ 的分布式数据存储架构经过精心设计,以满足现代物联网的严苛要求。它提供了高可用性、可扩展性和可靠性,同时保持了数据的完整性和一致性。通过利用 RocksDB 的强大功能和实现容错机制,EMQ 确保了重要数据在故障情况下不会丢失。此外,丰富的可观察性和审计功能使用户可以监控和跟踪数据存储操作,从而提高可见性和安全性。

公众号