使用 InfluxDB 作为持久化方案提供工具
概述
如果您的系统需要密集处理时间序列数据,并且您的实现在很大程度上依赖于值流或流进行数据的持久化/检索,那么,建议您在 ThingWorx 中使用 InfluxDB 作为
持久化方案提供工具。InfluxDB 是专为时间序列数据编写的高性能数据存储写入。它允许对同一数据进行高吞吐量的提取、压缩和实时查询。InfluxDB 可用作任何涉及大量时间戳数据的用例的数据存储,包括 DevOps 监控、日志数据、应用程序指标、IoT 传感器数据和实时分析。它还提供其他功能,包括数据保留策略 (RP) 等。InfluxDB Enterprise 针对时间序列数据需求提供了高可用性和高可扩展性的群集解决方案。
InfluxDB 数据持久存储提供工具可作为用于属性提供工具的 PostgreSQL、MSSQL 或 Azure SQL 的默认安装的一部分:
• InfluxPersistenceProviderPackage
• Influx2PersistenceProviderPackage
ThingWorx 支持 OSS、Enterprise 和 Cloud 版本。
• 将通过 InfluxPersistenceProviderPackage 支持 InfluxDB OSS 1.x 和 InfluxDB Enterprise 1.x。仅 INfluxDB 1.x 支持 InfluxDB Enterprise
• 将通过 Influx2PersistenceProviderPackage 支持 InfluxDB OSS 2.x。
• 仅通过 Influx2PersistenceProviderPackage 支持 InfluxDB Cloud
有关特定受支持的版本,请参阅
Release Advisor。
|
从 ThingWorx 9.3.1 开始添加了对 Influx 2.0 的支持
|
|
InfluxDB 数据提供工具目前仅支持值流和流。不支持数据表、wiki 和博客。
|
|
ThingWorx 9.3.8 及以后的版本通过 InfluxPersistenceProviderPackage 支持数据导出,现在通过 Influx2PersistenceProviderPackage 支持数据导出。
|
|
客户如需升级到 ThingWorx 9.3.9 及更高版本,以及 ThingWorx 9.4.0 及更高版本,并使用 InfluxDB OSS 2.0 来利用 Influx2PersistenceProviderPackage,首先需要升级到 ThingWorx 9.3.8,才能移至 InfluxDB OSS v2.6,因为必须先导出,然后再升级至 InfluxDB v2.6。对于 InfluxDB Cloud,无需导出之前的升级版本,因此,在升级 ThingWorx 9.3.9 及更高版本和 ThingWorx 9.4.0 及更高版本之前,无需移至 ThingWorx 9.3.8。
|
InfluxDB Enterprise 和 ThingWorx 启动环境
| 上图包括 InfluxDB Enterprise。对于 InfluxDB 开源,架构图相同,不同之处在于它只适用于一个节点。对于 InfluxDB Cloud,数据库托管在 ThingWorx 环境之外,并由 InfluxData 公司管理。 |
涉及 InfluxDB Enterprise 的配置时,将在本文档中使用以下术语:
• 负载平衡器 - InfluxDB Enterprise 不能用作负载平衡器。管理员需要对其进行配置。
• 群集 - InfluxDB Enterprise 群集由两种类型的节点组成,即元节点和数据节点。
• 数据节点 - 所有原始时间序列数据都存在于该类型的节点中。为获得高可用性,您至少需要两个复制因子。
• 元节点 - 这些节点具有简单的作业,即保持状态一致。它们仅包含有关状态的基本信息,例如保留策略、用户和数据库。在高可用性环境中,至少需要三个元节点。
选取正确的 Influx 数据库选项
以下是当前可用于 PTC 本地安装客户的两个 InfluxDB 选项的高级概览。在选取 Influx 产品时,应仔细考虑数据库软件选项和基本支持选项。有关选取正确数据库选项的问题,请联系 Influx 支持:
https://www.influxdata.com/contact-sales。PTC 客户需要将自己标识为 PTC ThingWorx 用户。
• InfluxDB open source OSS (单个节点)
◦ 仅单节点,不可扩展。
◦ 免费
◦ 由于 Influx 技术支持的限制 (无法在紧急情况下提供实时 Influx 支持),不建议将其用于生产实例。
◦ 对于该数据库的维护和监控,PTC 客户只能自行负责。
◦ PTC 将尽可能提供最佳的 Influx 建议,但是,某些情况可能需要转交 Influx 技术资源进行处理。
• InfluxDB Enterprise
如果您要寻找比当前其他数据库容量更高、速度更快的数据存储,那么 InfluxDB Enterprise 可以为您带来以下好处:
◦ 提高数据提取率。
◦ 运行时数据可以具有多个数据信息库。例如,您可以在 PostgreSQL 中保留关系数据,同时将 InfluxDB 用于高容量流和值流数据。定义流或值流时,ThingWorx 使用默认运行时数据存储提供工具,但您可以将其配置为使用任何已定义的持久化方案提供工具。您仍可以从其他数据提供工具导出数据并导入 InfluxDB。ThingWorx 处理数据抽象。
◦ 云友好体系结构 (横向扩展,仅 InfluxDB Enterprise)。
◦ 提供高可用性。
◦ 在 Influx 支持网站可按照 Influx 联系方式获得 Influx 技术支持,访问此网站请单击
InfluxData。
◦ PTC 客户可以根据需要创建支持工作单,推动 PTC/Influx 协作为您解决问题。
◦ 对于该数据库的维护和监控,PTC 客户只能自行负责。
• InfluxDB Cloud (托管在 ThingWorx 环境之外,由 InfluxData 公司管理)
InfluxDB Cloud 具有以下优势:
◦ InfluxDB Cloud 作为云原生、多租户、规模灵活以及无服务器的平台构建。
◦ 在 AWS、Google 和 Azure 上跨多个区域提供可用性、持久性和可扩展性。
◦ 它通过安装及配置所有最新的安全功能和修补程序进行安全性和功能强化。
◦ InfluxDB Cloud 可自动重新平衡群集、处理分片并利用内置同步复制因子。
安装和配置 InfluxDB
| Influx 数据库的所有安装者都有责任阅读并理解为 InfluxDB 提供的所有安全相关文档。PTC 强烈建议使用安全配置安装和配置 InfluxDB,其中包括使用用户名和加强密码。 |
| 如果 InfluxDB 和 ThingWorx 位于具有不同时区的计算机上,则获取数据时可能会出现问题。要避免这些问题,建议使用以下部署选项之一: • 在同一主机/计算机上部署 InfluxDB 和 ThingWorx。 • 如果 InfluxDB 与 ThingWorx 部署在不同的主机/计算机上,则 InfluxDB 服务器时区应该与已进行时钟同步的 -Duser.timezone Tomcat 参数保持一致,以避免与查询结果相关的问题。 |
1. 下载并安装 Influx DB
◦ 有关下载和安装 Influx DB 2.0 的指南:
▪ InfluxDB Enterprise (高可用性):不可用于 Influx 2.0
◦ 有关下载和安装 Influx DB 1.x 的指南:
| Windows 中不支持 InfluxDB。以下步骤将使用 UNIX OS。 |
下载链接:
数据节点下载链接:
元节点下载链接:
2. 对于 Influx1
在 InfluxDB 内创建数据库。获取并运行
thingworxInfluxDBSetup.sh 脚本,以在 InfluxDB 中创建数据库。InfluxDB 命令行界面必须位于脚本运行所在位置。有关详细信息,请参阅
Launch Influx。
| 可在 PTC 支持门户网站上软件下载包的 install 文件夹中获取 thingworxInfluxDBSetup.sh 脚本。 |
以下示例命令使用默认保留策略创建数据库:
CREATE DATABASE thingworx with DURATION 365d REPLICATION 1 SHARD DURATION 30d NAME autogen
| InfluxDB 数据提供工具目前仅支持名称为 autogen 的保留策略。在创建用于数据提供工具的数据库时,您可以指定策略名称和其他策略,如复制因子等。 |
从 InfluxDB 命令行界面创建 InfluxDB 用户。使用以下示例命令创建用户:
CREATE USER twadmin WITH PASSWORD 'password' WITH ALL PRIVILEGES
4. 在 ThingWorx Composer 中,新建持久化方案提供工具。
5. 在“持久化方案提供工具包”字段中,选择
◦ 对于低于 Influx 2.0 的版本,请选择 InfluxPersistenceProviderPackage
◦ 对于 Influx 2.0 版本,请选择 Influx2PersistenceProviderPackage
6. 单击“保存”。
7. 单击“配置”选项卡,然后根据需要配置“连接信息”并“保存”。参考下表中的配置选项。
如果您使用持久化方案提供工具实例 (通过 InfluxDB 持久化方案提供工具包创建) 作为默认的
持久化方案提供工具,则可编辑下列流和值流队列配置设置。这些编辑随后可应用至所有流和值流。对于特定流或值流,不能更改这些设置。
| 当切换某个值流的持久化方案提供工具 (例如,从 ThingworxPersistenceProvider 切换到 InfluxPersistenceProviderPackage) 时,任何实现值流的事物都必须调用 RestartThing 服务以检索写入到新的持久化方案提供工具的条目。如果没有重新启动事物,条目可以写入到数据库,但是,只有重新启动了事物后,才会检索到这些条目。 |
Influx 2.0 连接信息
名称 | 说明 | 默认值 |
---|
连接 URL | 数据库的 URL,您应该从该数据库中获取连接。 | http://localhost:8086 |
令牌 | 用于代替密码访问系统的安全令牌。(类似于 appkey)。 | |
“组织名称” | 组织名称 | |
“段名称” | 数据存储段名称 (存储所有数据的架构)。 | |
自动创建存储段 | 如果设置为 true,则创建于 bucketName 内指定的存储段 (若其尚不存在)。否则,若存储段不存在,则会发生错误。 | False |
保留期 (天数) | 保留数据的天数。数据将在此时段后删除。默认值 0 表示永久保留数据。 | 0 |
“批处理大小” | 此为 influx 客户端使用的批处理大小。它将始终以批处理形式发送数据点,以提高性能。其补充了流批处理大小。当批处理大小的点数已准备就绪可供发送时,会将数据发送到 influx。 | 1000 |
刷新间隔 | 指示 influx 客户端在未达到其批处理大小时的数据刷新频率。以毫秒为单位指定值。 | 每秒 1 或 1000 次 |
从持久化方案提供工具获取数据大小 | 要批量提取的行数,而非缓存客户端的所有行。 | 5000 |
连接超时时间 | 尝试连接到 influx 所花费的时间。以秒为单位指定值。 | 10 |
读超时时间 | 为请求从 influx 读取数据所花费的时间。以秒为单位指定值。 | 10 |
写超时时间 | 尝试将数据写入 influx 所花费的时间。以秒为单位指定值。 | 对于 InFluxDB Cloud,PTC 建议将“写超时时间”设置为 20 秒。 |
| 10 |
“日志级别” | influx 客户端和日志的日志级别将发送到控制台输出。这些值可以为 NONE、BASIC、HEADERS 或 BODY,每个级别都提供了更为详细的信息。 | “无”(NONE) |
Influx 1.8 连接信息
名称 | 说明 | 默认值 |
---|
连接 URL | 数据库的 URL,您应该从该数据库中获取连接。 | http://localhost:8086 |
数据库架构 | 要连接的架构。 | thingworx |
用户名 | 用于获取数据库连接的用户名。 | twadmin |
密码 | 用于获取数据库连接的密码。 | 不适用 |
从持久化方案提供工具获取数据大小 | 从持久化方案提供工具获取数据大小。 | 5000 |
连接超时时间 | 连接超时时间,以秒为单位。 | 10 |
读超时时间 | 读超时时间,以秒为单位。 | 10 |
写超时时间 | 写超时时间,以秒为单位。 | 10 |
Influx 1.8 和 2.0 的流处理设置
名称 | 说明 | 基本类型 | 默认值 |
---|
队列大小上限 | 队列中流条目的最大数量。达到指定的值后,后续条目将被拒绝。 | 数字 | 250000 |
清空流缓冲区之前的最长等待时间 (毫秒) | 清空流缓冲区之前系统将等待的毫秒数。 | 数字 | 2000 |
处理线程数目 | 专用于流的处理线程数量。 | 线程数目越少,InfluxPersistenceProviderPackage 提供工具的性能越好。InfluxDB 经过高度优化,可处理来自少量信道的数据。 对于 Influx2PersistenceProviderPackage,则并非如此。PTC 建议增加线程数目以获得更好的吞吐量。对于 InfluxDB 云,PTC 建议将“处理线程数目”提高到 10、将“队列大小上限”提高到 1000000、将“处理块中值流写入的最大次数”提高到 25000,以达到 80,000 wps 吞吐量。 |
| 数字 | 5 |
清空流缓冲区之前项的最大数量 | 清空流缓冲区之前可累积的项的最大数量。 | 数字 | 1000 |
处理块中值流写入的最大次数 | 可在单个块中处理的最大流写入次数。 | 数字 | 2500 |
缓冲区状况扫描频率 (毫秒)。 | 检查指定速率值 (以毫秒为单位) 的缓冲区状态 | 数字 | 5 |
Influx 1.8 和 2.0 的值流处理设置
名称 | 说明 | 基本类型 | 默认值 |
---|
队列大小上限 | 队列中值流条目的最大数量。达到指定的值后,以下条目将被拒绝。 | 数字 | 500000 |
清空值流缓冲区之前的最长等待时间 (毫秒) | 清空值流缓冲区之前系统等待的毫秒数。 | 数字 | 10000 |
处理线程数目 | 分配给值流的处理线程数量。 | 线程数目越少,InfluxPersistenceProviderPackage 提供工具的性能越好。InfluxDB 经过高度优化,可处理来自少量信道的数据。 对于 Influx2PersistenceProviderPackage,则并非如此。PTC 建议增加线程数目以获得更好的吞吐量。对于 InfluxDB 云,PTC 建议将“处理线程数目”提高到 10、将“队列大小上限”提高到 1000000、将“处理块中值流写入的最大次数”提高到 25000,以达到 80,000 wps 吞吐量。 |
| 数字 | 5 |
清空值流缓冲区之前项的最大数量 | 清空值流缓冲区之前可累积的项的最大数量。 | 数字 | 1000 |
处理块中值流写入的最大次数 | 可在单个块中处理的项的最大数目。 | 数字 | 2500 |
缓冲区状况扫描频率 (毫秒) | 检查指定速率值 (以毫秒为单位) 的缓冲区状态 | 数字 | 5 |
8. 单击
“常规信息”选项卡并选择
“活动”复选框。
![](../../../../../ThingWorx/images/influxdb_04.png)
9. 单击“保存”。
最佳实践
系列限制
系列为登录 InfluxDB 的所有事物的属性总数。在处理指向少量事物和事物属性 (例如,10K 或 100K) 的高数据容量时,InfluxDB 性能良好。在 InfluxDB 中,默认情况下,系列总数限制为 100 万。您可以提高此限制,但一旦超出此限制,InfluxDB 性能会随着系列数的增加而逐渐降低。
若存在大量事物和属性,则您可选择具有高数据容量的事物和属性并将其指向 InfluxDB,以减轻 PostgreSQL 或 MSSQL 的压力。
或者,如果您想要将系列划分为多个服务器,可以将 InfluxDB 数据提供工具的多个实例指向不同的 InfluxDB 服务器实例。
写入限制
内存 60gb、单 VM,32 核的情况下,每秒写入 100K。如果超出此限制,会导致 ThingWorx 出现问题,将耗尽资源以致无法处理任何请求或作业,例如,写入数据库。此时,ThingWorx 将变为停止状态,而 InfluxDB 仍在写入到数据库。PostgreSQL 不会发生此问题,因为 PostgreSQL 成为了瓶颈,ThingWorx 永远不会达到耗尽资源以致无法处理内部任务的点。
SSL/安全连接
InfluxDB 支持 SSL 和 HTTPS 连接。如果不支持 ThingWorx 和 InfluxDB 之间的网络,则您可启用 SSL 和 HTTPS 连接来提高安全性。如果签名专用密钥保持安全状态,则自签名证书已足够。
已知的 InfluxDB 对属性基本类型的限制
清除属性
PurgeAllPropertyHistory、PurgeSelectedPropertyHistory 和 PurgePropertyHistory 服务可用于从 InfluxDB 中清除属性。使用 startDate 和 endDate 参数指定某一范围。
| 使用 Influx2PersistenceProviderPackage 提供者时不支持清除。PurgePropertyHistory、PurgeAllPropertyHistory、PurgeSelectedPropertyHistory 服务不起作用。 |