解决方案:IoT 物联网场景中数据采集-存储-分析最佳实践
优采云 发布时间: 2022-11-26 12:55解决方案:IoT 物联网场景中数据采集-存储-分析最佳实践
近年来,物联网技术的快速发展已广泛应用于智慧出行、智慧工业、智能家居等场景,无论何种应用场景,都离不开数据的“采集-处理-存储-分析”过程。但是,不同的应用程序具有非常不同的数据特征和业务需求,因此实现上述流程所需的产品组件也是如此。一般来说,我们可以根据应用和数据特性将场景分为三类:时间序列数据、消息数据和元数据。
以智能汽车场景为例,车辆会定期更新当前的最新状态信息,如当前发动机转速、当前车速等,这些描述车辆最新状态信息的数据称为元数据。在智能汽车的行驶过程中,车辆的状态数据会随着时间的推移而变化,例如车辆在一段时间内的速度和胎压,这些描述车辆历史状态信息的数据称为时间序列数据。
还有一个数据场景是命令消息即控制车辆
的行为,如调节车辆空调温度的命令和车辆执行命令后的结果反馈,这些控制指令的上下称为消息数据。不同类型的数据应用程序有不同的场景,因此对存储系统的要求也不同。
本文分析了设备元数据方案的业务需求,以及如何选择合适的存储组件和实现解决方案。
物联网数据方案要求
首先,以工业设备元数据场景为例,分析有哪些具体的业务需求。
在工业生产过程中,设备通常以固定周期(或事件触发)上报最新的运行状态信息,即上述设备元数据,如设备ID、当前工作温度、湿度、压力值等。在业务中,设备基于设备元数据进行管理,例如查询设备的当前运行状态,在线搜索具有多个条件的设备,以及“圈出”符合条件的设备集合。通过分析设备元数据,实时监控设备的运行状态,及时响应异常情况,避免故障。
让我们简要总结一下业务需求:
a. 定期上报设备状态数据,并通过数据网关存储在云中。
二.存储端需要能够支持*敏*感*词*设备元数据的实时更新。
三.存储端需要支持基于任何设备索引作为条件的搜索设备。如果查询设备数量较少,我们称之为“设备检索”;如果您一次找到的设备数量非常大,我们称之为“设备标记”。
d.设备状态更新后,存储端需要支持异常状态的实时监控。
物联网数据技术难点
根据以上场景需求,我们可以总结一下存储端几个功能的需求:存储
规模:支持海量设备元数据存储,可能达到数千万甚至数亿。
实时更新:支持高并发、低延迟的数据更新。
任意字段组合
检索:可以根据一个或多个字段值组合条件检索设备元数据支持并发检索
:在设备标记量较大的场景下,需要并发检索来提高标记性能。数据更新的实时计算
:能够检测数据更新并对更新的数据执行实时计算。
物联网数据存储选择
元数据存储场景对数据库规模、性能、查询能力等方面都有很高的要求。一般来说,关系型数据库MySQL是存储选择的首选,因为MySQL是最通用和熟悉的数据库产品。但是,MySQL 在小规模数据存储(千万级)和低并发数据更新(QPS 在 10,000 以内)方面普遍表现良好,当规模变大时,MySQL 的性能会急剧下降,这显然不符合元数据存储的要求。此时,
你可能会想到使用开源数据库HBase,因为HBase的分布式架构可以支持*敏*感*词*的数据存储和写入,可以满足此时元数据存储的需求。但是,HBase 仅支持基于主键 (RowKey) 的查询,无法在属性列上构建索引查询,因此检索和标记设备的效率极低,在极端情况下,可能会以全表扫描和数据过滤的方式查询数据,无法满足上述要求。
最后,我们来看看表格存储 Tablestore,这是一款云原生无服务器结构化数据存储,原生具有*敏*感*词*数据存储和低延迟数据更新,并提供多种索引功能,可以支持任意字段组合检索,是物联网平台所依赖的核心数据存储系统,支持数亿台设备的元数据管理。下面总结了上述存储产品在实现元数据存储方案方面的功能:
表格存储技术介绍
表格存储 Tablestore是一款云上的结构化数据存储产品,具有极其丰富的产品功能和生态,提供物联网存储Iotstore、宽表引擎、多索引等能力,满足时序数据、消息数据、元数据场景的需求。本文不介绍时序和消息数据方案的解决方案。我们来看看表格存储提供了哪些能力来满足元数据存储场景的需求。表格存储采用多引擎存储架构,不同场景的实现原理不同,我们来看一个图:
宽表引擎是负责存储和更新设备元数据的分布式数据表。宽表引擎采用多个分区的分布式结构,每个分区对应一个worker。在元数据写入过程中,路由节点根据主键的范围将写入请求路由到不同的分区进行处理,当一个分区的负载达到瓶颈时,服务器会自动拆分为多个分区,这样宽表引擎的整体吞吐能力可以线性提升。如下图所示:
与宽表引擎相比,索引引擎在底层采用倒排索引、空间索引等存储结构,可支持任意数据组合检索和聚合。索引引擎提供两个查询接口:搜索和并行扫描。
Tablestore 提供了连接 Flink 实时计算的能力,可以作为 Flink 的数据源表,将实时变化的设备元数据推送到 Flink 进行计算,从而实现元数据检测的业务场景。同时支持将计算结果写入表格存储的数据表,记录异常数据结果。
共享元数据的要求后存储场景
和表格存储的技术原理,我们来看看如何为设备元数据场景构建物联网架构。物联网数据上报网关后,根据不同的应用类型,一般有三种数据流:应用服务器订阅消费、持久存储和转发到消息队列。设备元数据的主要要求是存储和计算,因此我们可以列出一个简单的数据流过程:网关>存储>流计算。下面将通过物联网平台+表格存储+Flink来介绍元数据管理平台。
物联网 + 表格存储 + Flink
下图显示了基于云构建的元数据管理平台的架构
上面的架构图收录
三个组件:物联网平台、表格存储和实时计算 Flink。架构中每个模块的角色和功能如下:
开发实践
假设某工业厂商拥有100万台智能设备,每台设备定期更新自己的温度、湿度、压力数据等状态数据,并准备使用上述方案架构构建元数据管理平台。
数据大小:1 亿行
数据结构:如以下 SQL 语句所示:
CREATE TABLE device_meta_data (
device_name varchar(100), -- 设备名
humidity decimal(5,2), -- 设备当前湿度
<p>
" />
pressure decimal(5,2), -- 设备当前压力值
temperature decimal(5,2), -- 设备当前温度
location varchar(20), -- 设备位置坐标
timestamp long -- 数据上报时间戳
);</p>
1. 创建表格存储实例
首先,您需要在表格存储中创建一个实例元数据-db(数据库),并创建两个device_meta_data名和device_errorResult_data名的数据表来存储元数据和异常结果数据,如下图所示。
然后,创建元数据表和异常数据表。
2. 创建物联网设备
在物联网平台控制台创建产品(product_metadata)、TSM(默认模块)和设备(test_deviceName)。产品相当于对同一类型设备的抽象,而物理模型是设备上报的数据结构的定义。
配置 TSL 模型
注册设备并获取设备证书。
在物联网平台创建解析器,将设备元数据更新主题写入表格存储,经自定义脚本处理后持久化存储。如下图所示:
要创建解析器,您需要分别配置数据源、解析脚本和数据用途。通过 TSL 上报的设备元数据将聚合到名为 /产品名称/设备名称/事物/事件/属性/帖子的主题中作为数据源,也可以自定义主题。数据的目的是配置需要写入设备元数据的表格存储实例名和表名。可以自定义解析脚本,例如,在这种情况下,将设备的经纬度信息组合成写入表格存储的坐标字符串,如下图所示:
通常,设备数据上报
是基于设备端SDK开发程序向物联网平台上报数据,但为了快速实现解决方案,本文使用物联网平台提供的设备模拟器上报数据。模拟设备报告了一段数据,如下图所示:
3、设备数据的实时采集与分析
设备元数据
由解析器处理并存储在表格存储中,我们已经完成了对设备元数据采集
和存储的所有操作。由于设备模拟器只能模拟生成单个设备元数据的过程,为了更接近真实的业务场景,我们直接在表格存储中生成了 1 亿条设备元数据,用于后续步骤。从上面我们可以知道,设备检索和标记需要依赖 Tablestore 的多元索引函数,所以首先我们需要创建一个多元索引device_meta_data_index:
表格存储提供了多种数据访问方式,如SQL、控制台、SDK。以SQL为例,首先确认设备元数据是否已通过SQL正确导入。
select count(*) from `device_meta_data`;
查询设备元数据以查找 device_name=“test_deviceName”。
select * from `device_meta_data` where device_name = 'test_deviceName';
4. 设备检索和圈子
设备检索和标签依赖于表格存储的多索引功能,分别使用搜索和并行扫描界面。首先是设备检索,
设备检索通常不会返回比较大的数据结果集,即使满足查询条件的数据量很大,也会通过分页返回。针对该场景,表格存储的多索引功能使用倒排索引、空间索引等数据结构来加快数据检索速度,如下例所示:
检索温度低于 20 摄氏度、压力值介于 0.5 kpa 和 1.0 kpa、设备名称以“e3”开头的设备。
select *
from device_meta_data
where temperature < 20
and pressure between 0.5 and 1.0
and device_name like 'e3%';
设备标记通常返回的数据量比较大,如果使用SQL,则只能以单并发方式查询返回,显然不高。针对此场景,表格存储启动了并行扫描接口来实现,并行扫描接口的优化如下图所示:
在执行设备元数据标记之前,首先调用 ComputeSplit 接口,根据多元索引中的数据量级计算最大可执行查询并发数。然后,以多并发的方式分别查询多个数据分区,每个并发只负责一部分数据的查询和返回,可以大大提高数据包围的速度。举个例子:
所有设备名称以“a”开头且设备温度低于 10 摄氏度的设备都需要圈出。
//获取并发数
int splitsSize = client.computeSplits(computeSplitsRequest).getSplitsSize();
//多线程执行
run(){
ParallelScanRequestparallelScanRequest = ParallelScanRequest.newBuilder().tableName(tableName)
.indexName(indexName)
.scanQuery(ScanQuery.newBuilder()
.query(QueryBuilders.bool()
.must(QueryBuilders.wildcard("device_name","a*"))//查询条件
.must(QueryBuilders.range("temperature").lessThan(10))
)
.maxParallel(splitsSize)
//返回当前并发命中的结果集
RowIterator iterator =client.createParallelScanIterator(parallelScanRequest);
}
从上面代码的运行结果可以看出,查询的数据结果会以多并发的方式返回,每个并发收录
查询命中的一部分数据。在*敏*感*词*数据捕获和数据导出场景中,parallelScan API 的平均单并发可以达到 10000/s 以上的查询返回速度,查询数据量越大,并发次数越多,大大提高了数据包围导出的速度。
5. 设备实时监控
设备的实时监控依赖于Tablestore的通道服务能力,通道服务可以直接连接实时计算Flink,实现元数据流计算,如下图所示
源表,
结果表和流计算作业是在实时计算中创建的。源表依赖于在表格存储中的设备元数据中创建的增量通道服务,通道服务将设备元数据的实时变化数据推送到 Flink 计算引擎进行流计算作业。本示例中,流计算作业将设备异常状态数据保存到表格存储的异常结果数据表中,然后通过异常数据结果表查询设备的异常记录信息。处理异常数据的另一个业务场景是将其推送到 Kafka 等消息队列进行处理,例如告警机制访问和短信通知。
为了更直观地看到流计算作业的效果,我们可以更新设备元数据表中的一段设备元数据:
update `device_meta_data` set `pressure` = 2.0 where `device_name` = "test_deviceName"
经过流计算引擎处理后,数据被确定为异常数据并自动写入异常结果数据表。
select * from `device_errorResult_data` where `device_name` = "test_deviceName"
总结
本文分享设备元数据的特征和架构实践。在设备元数据场景中,业务需求对存储组件的存储规模、查询模式、计算性能都有很高的要求,从存储、查询、计算几个维度对比了 MySQL、HBase、Tablestore 的三款产品,最终选择表存储 Tablestore 作为元数据场景的核心仓库, 并利用Tablestore的上下游生态,打造物联网平台+Tablestore+实时计算Flink组合为云架构,实现设备元数据存储。
最后,一张20元优惠券邀请您加入中国最大的物联网开发者社区,获取1000+行业资讯。
过往建议
☞ 中国首只云计算股关闭物联网云服务
☞2022 年物联网平台趋势:私有部署
☞ 国内单片机行业发展研究报告
☞2021年4G通信模组企业排名
☞ 中国四大物联网平台选择比较
☞ 云供应商的[物联网平台]不是很香吗?
多种方法:优采云
云采集优势以及使用方法.docx
文档介绍:优采云
云采集优势及使用方法(含定时云采集)
首先要说明的是,云采集
是优采云
终极版及以上版本的独有功能,免费版和专业版没有此功能。
云采集是指使用优采云
提供的服务器集群进行工作,集群7*24小时不间断工作。客户端完成任务设置并提交至云服务进行云端采集后,即可关闭软件,关闭电脑进行离线采集,真正做到无人值守。另外,云采集采用云服务器集群分布式部署方式,多个节点同时运行,可以提高采集效率,有效规避各种网站的IP封堵策略。
云采集的优点:可以关机运行,也可以设置定时云采集,加快采集速度,增加采集量。
云采集设置
示例网址:
" />
启动云采集有三种方式(立即启动,只运行一次)。
方法一:任务字段配置完成后,点击“全选”,点击“采集以下数据”,选择“保存并开始采集”,进入“运行任务”界面,选择“开始云采集”。在任务列表中,您将看到正在从云端采集
的任务。
如何使用云采集(包括时序云采集)——图1
方法二:在任务列表页面,每个任务名称右侧都有“开始云采集”选项。点击后任务会立即开始云采集。
如何使用云采集(包括时序云采集)——图2
方法三:在任务列表页面,每个任务名称右侧都有“更多操作”选项。点击后,在下拉选项中选择云采集和启动,任务会立即启动一次云采集。
如何使用云采集(包括时序云采集)——图3
" />
时序云采集设置
设置时序云采集有两种方式:
方法一:任务字段配置完成后,点击“全选”,“采集以下数据”,“保存并开始采集”,进入“运行任务”界面,点击“设置定时云采集”,“定时云采集” 采集
”会弹出Configuration页面(图4)。首先,如果需要保存时序设置,在“Saved Settings”输入框中输入名称,然后保存配置。保存成功后,下次其他任务需要相同时序配置时,可以选择该配置(图5)。其次,有4种定时设置,可以根据需要选择启动方式和启动时间(图5)。全部设置完成后,如果需要启动时序云采集,选择“
如何使用云采集(包括时序云采集)——图4
如何使用云采集(包括时序云采集)——图5
方法二:在任务列表页面,每个任务名称右侧都有“更多操作”选项。点击后,在下拉选项中选择云采集设置时间,也可以进行上述操作。
云采集