概述
随着发布 事物板 4.0,引入了主要的仪表板增强功能,以提高性能和可扩展性 实体数据查询——新的 实体数据查询服务(EDQS)。这项创新服务重新定义了实体数据的检索方式,使仪表板速度显着加快,同时减少了 SQL 数据库的负载。
EDQS 是一个 可选组件 ThingsBoard 平台的一部分,推荐用于环境管理 数十万台设备,其中高读取性能至关重要。
传统查询处理的挑战
在 ThingsBoard 的早期版本中,实体数据查询是直接针对 SQL 数据库,这导致了两个重大挑战:
- 这 SQL 的复杂性 查询使它们难以优化和扩展,从而使整个数据管理过程变得复杂。
- A 读操作负载重。 仪表板会生成大量请求,导致延迟增加和性能瓶颈,特别是在大规模部署中。
EDQS 方法:将数据存储在内存中并在 Kafka 中进行备份
EDQS 采用完全不同的方法,从查询执行路径中完全消除 SQL。相反,它利用 内存缓存 存储实体数据并在运行时处理查询。
架构图
数据同步
仪表板中可能使用的所有实体数据都使用基于 Kafka 的消息传递在 SQL 数据库和 EDQS 之间进行同步。核心服务负责将实体数据更新发布到 edqs.事件 卡夫卡主题。 EDQ 服务反过来使用该主题并使用最新数据填充内存缓存。
该架构的一个关键特征是其内置 备份与恢复 机制。最新版本的实体数据通过发布到 edqs.状态 卡夫卡主题。启动时,EDQS 通过读取来恢复其内存状态 edqs.状态 Kafka 主题,消除了初始数据库查询的需要并实现快速准备。此设计显着加快了 EDQS 启动时间并支持高效的部署策略。
实体数据查询处理
源自仪表板的实体数据查询请求发布到 edqs.请求 Kafka 主题并由 EDQ 服务之一使用。与依赖将查询转换为 SQL 的传统方法不同,EDQS 完全绕过数据库,直接从内存缓存中检索数据,提供近乎即时的结果。 EDQS 使用最佳数据结构,可显着提高大规模环境中的搜索速度 - 通常使用 10,000 或更多设备。
该架构有效地转变了 将 EDQS 写入运行时数据库,针对超快读取性能进行了优化。
EDQS 缩放
为了确保最佳性能和可靠性,EDQS 通过以下两种分区策略之一支持水平扩展: 基于租户的或者没有任何.
基于租户的策略
在 基于租户的 分区策略,Core服务发布的消息会根据分区策略路由到Kafka分区 租户ID。每个 EDQS 实例使用 Kafka 分区的特定子集,该子集对应于特定的租户组。
为了获得高可用性,建议部署 至少四个 EDQS 实例,组织成 两个实例集,每个包含 两个节点。在一个集合内,两个节点使用相同的 Kafka 分区,确保冗余和容错。此配置提供:
- 负载均衡 跨实例集。
- 高可用性 通过节点冗余。
- 无缝滚动重启 无需中断服务。
这没有任何 该策略适用于单租户部署。在此模式下,所有 EDQS 实例都从所有 Kafka 分区进行消费。为了获得高可用性,至少 两个 EDQS 实例 应该部署。
随着租户数量和设备数据量的增长,可以将额外的 EDQS 实例添加到集群中以保持性能和响应能力。
EDQS 的主要优点
🚀 极快的查询性能
由于所有查询都是针对内存数据集执行的,因此与传统的基于 SQL 的查询相比,复杂查询的响应时间显着缩短。性能改进的范围包括 2 倍至 100 倍 更快,具体取决于查询类型和数据集大小。
🏋️ 零 SQL 数据库读取负载
通过消除数据库读取,EDQS 消除了 SQL 数据库上与查询相关的压力,从而提高了整体系统稳定性和性能。
使用 EDQS 之前的注意事项
虽然 EDQS 提供了显着的性能改进,但有一些重要的考虑因素:
- 内存分配: 由于所有实体数据都存储在 RAM 中,因此运行 EDQS 的机器的内存大小应与 SQL 数据库大小相关。大小应至少为总大小 设备, 资产, ts_kv_最新, 和属性_kv SQL 数据库中的表。
SELECT pg_size_pretty(SUM(pg_relation_size(quote_ident(table_name)))) AS min_size
FROM information_schema.tables
WHERE table_name IN ('device', 'asset', 'ts_kv_latest', 'attribute_kv');
- 实体数量:建议将 EDQS 用于具有 10,000 个或更多实体的部署,其中规模开始对传统查询机制提出挑战。
- 读取次数:如果您的 ThingsBoard 仪表板由数千名用户同时访问(例如,在大型公共门户或企业级监控设置中),EDQS 是理想的解决方案。它针对高查询吞吐量进行了优化,并最大限度地减少了重读取负载下的延迟。
结论
介绍 ThingsBoard 4.0 中的 EDQS 标志着查询性能优化向前迈出了一大步。通过消除 SQL 数据库读取并利用 基于 RAM 的查询执行,ThingsBoard 仪表板现在即使在重负载下也可以提供实时性能。
对于希望扩展 ThingsBoard 部署同时维护 快如闪电的仪表板查询,EDQS 是必备的补充。