在万物互联的时代,大到企业数字化转型、数字城市建设,小到与生活息息相关的家居生活、智能驾驶、运动健康等,都离不开智能物理设备的广泛连接和互通。AIoT(人工智能物联网)是人工智能与 IoT 技术的融合,通过物联网设备产生和收集来自不同维度的海量数据,存储于云端、边缘端和设备端,再通过数据分析引擎及机器学习、神经网络等高级技术,实现万物数据化和万物智联化。
作为一个全面的物联网 SaaS 平台,ThingLinks 致力于将物理设备无缝连接到云端,支持海量设备的接入和管理,简化设备数据采集和远程控制的过程。而在这背后,TDengine 作为时序数据库(Time Series Database)的选择,为 ThingLinks 提供了强大的数据存储与处理能力,进一步提升了平台的性能和效率。
场景与痛点
数据是数字化时代企业的核心资产。ThingLinks 平台维护着大量的智能设备,这些设备联网后会根据设备设定的速率持续产生时序数据。例如,有些设备的采样间隔是 5 秒。为了应对庞大的数据存储和计算挑战,ThingLinks 结合自身数据特点与业务需求,对多种工业时序数据库进行了技术选型。以下是我们在数据存储方面的一些做法:数据存储具有较高的数据压缩比;节约存储资源;降低 T 级成本写入和查询性能优异;数据库底层逻辑的优化可以减少 CPU 开销支持数据预聚合;拥有丰富的计算算子强有力的稳定架构。
ThingLinks 云物联网 SaaS 平台提供了一个全面的解决方案,用于将物理设备无缝连接到云端,支持海量设备的接入和管理。此平台使设备数据采集上云变得简单高效,并允许用户通过云端下发命令实现对设备的远程控制。ThingLinks 平台的核心特性包括:
- 强大的物联网平台 — 作为业务应用和设备之间的桥梁,ThingLinks 平台屏蔽了设备接口的复杂性,实现了快速的设备接入。它还提供了强大的开放能力,支持用户根据各自行业需求构建定制化的物联网解决方案。
- 灵活的设备接入方式 — 设备可以通过固网、2G/3G/4G/5G、NB-IoT、Wifi 等多种网络接入 ThingLinks 平台。使用 LWM2M/CoAP、MQTT、HTTPS 等协议,设备能够有效地上报业务数据,同时接收来自平台的控制命令。
- 高效的业务应用集成 — 业务应用可通过调用 ThingLinks 平台提供的 API 实现设备数据的采集、命令下发和设备管理等功能。这使得整个物联网解决方案更加高效和可靠。
ThingLinks 物联网平台充分考虑到设备接入的多样性和复杂性,提供了灵活多变的接入选项和高效的设备管理能力。以下是平台支持的关键特性:
- 多样化接入方式 — 支持终端设备直接接入,以及通过工业网关或家庭网关接入,满足不同场景的接入需求。
- 多网络与多协议支持 — 适应多种网络环境(如固网、无线网络等)和多种通信协议(包括专业的工业协议和通用的网络协议),确保设备能够顺利接入。
- 系列化 Agent 接入 — 提供一系列的 Agent 接入方案,解决了设备接入的复杂性和碎片化问题,使得各类设备能够无缝集成到平台中。
- 高效的设备管理 — 提供丰富完备的设备管理功能,简化海量设备的管理工作,提升管理效率和安全性。
技术选型
在 ThingLinks 2020 年开源初期,我们对几种业界主流的时序数据库做了分析和测试,最终选择了 TDengine 作为平台的首选时序数据库。相比其他方案,TDengine 在性能、成本、运维难度等方面表现出色,支持横向扩展且高可用。
架构设计
产品主要依托 TDengine 为数据核心,承载实时和历史数据写入、存储和查询的工作,是坚实的数据底座,保证了上层应用生态的繁荣发展。
数据模型
在数据模型方面,TDengine 数据模型需根据 ThingLinks 的产品模型进行设计,以实现最佳性能和功能。ThingLinks 的产品模型定义包括产品信息和服务(由属性和命令组成)两部分,旨在描述产品的基本信息和业务能力。基于这些模型,ThingLinks 可以确保所有设备按照统一的结构工作。
为了更好地利用 TDengine 的性能和功能,我们基于 ThingLinks 的产品模型设计了超级表的 Schema。这一设计使得设备的数据存储和处理更加高效和可靠。
超级表设计概念
每个设备对应一张子表,每类设备(产品服务)对应一个超级表基于产品类型和物模型属性创建超级表,数据聚合以子表为维度,按照物模型及数据特性选择不同的聚合算子进行聚合。 具体的超级表设计示例如下:
CREATE STABLE `common_4001308136820736_default_attributes_controls` (
`ts` TIMESTAMP ENCODE 'delta-i' COMPRESS 'lz4' LEVEL 'medium',
`event_time` TIMESTAMP ENCODE 'delta-i' COMPRESS 'lz4' LEVEL 'medium',
`battery` INT ENCODE 'simple8b' COMPRESS 'lz4' LEVEL 'medium',
`device_temperature` INT ENCODE 'simple8b' COMPRESS 'lz4' LEVEL 'medium',
`linkquality` INT ENCODE 'simple8b' COMPRESS 'lz4' LEVEL 'medium',
`power_outage_count` INT ENCODE 'simple8b' COMPRESS 'lz4' LEVEL 'medium',
`voltage` INT ENCODE 'simple8b' COMPRESS 'lz4' LEVEL 'medium',
`vibration` BOOL ENCODE 'bit-packing' COMPRESS 'lz4' LEVEL 'medium',
`strength` INT ENCODE 'simple8b' COMPRESS 'lz4' LEVEL 'medium',
`angle_x` DOUBLE ENCODE 'delta-d' COMPRESS 'lz4' LEVEL 'medium',
`angle_y` DOUBLE ENCODE 'delta-d' COMPRESS 'lz4' LEVEL 'medium',
`angle_z` DOUBLE ENCODE 'delta-d' COMPRESS 'lz4' LEVEL 'medium',
`x_axis` DOUBLE ENCODE 'delta-d' COMPRESS 'lz4' LEVEL 'medium',
`y_axis` DOUBLE ENCODE 'delta-d' COMPRESS 'lz4' LEVEL 'medium',
`z_axis` DOUBLE ENCODE 'delta-d' COMPRESS 'lz4' LEVEL 'medium'
) TAGS (`device_identification` VARCHAR ( 64 )) SMA (`ts`,`event_time`)
平台侧创建产品服务
定义该服务下具有的服务属性
操作产品赋能即可对 TDengine 数据模型做同步更新,对属性变更,SQL 执行结果可视化展示。
在实际应用中,可以有多个服务,每个服务都有不同的属性和命令,例如水表应用场景等:
- 基础(waterMeterBasic):定义水表上报的水流量、水温、水压等参数
- 告警(waterMeterAlarm):定义水表需要上报的各种告警场景的数据
- 电池(battery):定义水表的电压、电流强度等数据
- 传输规则(deliverySchedule):定义水表的一些传输规则
- 连接(connectivity):定义水表连接参数
通过 ThingLinks 可以快速生成 TDengine 超级表,设备上报数据自动生成子表,实现高效数据管理。
多租户数据隔离
在多租户环境下,ThingLinks 采用每个租户一个时序库的设计,确保数据的隔离性和安全性。每个租户的数据独立存储在其专属的 TDengine 数据库中,通过独立的数据源实现大租户的数据隔离,而小租户则通过列级别的权限管理进行数据隔离。
这种设计不仅提高了数据管理的灵活性,还确保了各租户的数据隐私和安全。大租户可以在其独立的数据库中进行复杂的数据操作和分析,而小租户则享有细粒度的权限管理,确保数据的安全访问。
落地实施
在实际落地实施过程中,ThingLinks 平台结合业务需求与数据特点,充分利用 TDengine 的高性能和高可用性,实现了以下方案:
- 设备数据采集:设备通过 MQTT、CoAP、HTTPS 等协议将数据上报到 ThingLinks 平台。
- 数据解析与匹配:ThingLinks 平台接收到设备上报的数据后,进行数据解析并与相应的产品模型进行匹配,确保数据结构的一致性。
- 数据存储:解析和匹配后的数据首先存储在 TDengine 中,保证数据的实时性和完整性。
总结
TDengine 赋能 ThingLinks,提供了强大的数据存储和处理能力,使得 ThingLinks 能够更加高效、可靠地服务于物联网应用。无论是设备接入的灵活性,还是业务应用的高效集成,ThingLinks 都表现出了卓越的性能和适应性。通过这种协同工作,ThingLinks 为用户提供了一个全面、高效的云物联网 SaaS 平台解决方案,推动了各行业的数字化转型。