ThingsKit物联网平台安装部署场景及资源配置

概述

本文介绍了 ThingsKit 针对常见应用场景的部署方案。所有部署方案都有一定的优点和缺点。为您的部署选择正确的部署架构方案取决于您的预算成本、性能和高可用性要求。

💡 提示

本文介绍的部署场景成本计算是以阿里云资源价格作为计算基础,以下所有计算和定价均为近似值,仅供参考。如需获取最终价格,请联系您的云服务商。

评估前提

我们准备了一系列参数来快速评估典型的物联网解决方案性能要求:

  • 生产环境中创建的的租户、设备以及客户的总数。
  • 每台设备每天的最大和平均消息量。
  • 设备有效负载的最大和平均大小。
  • 每条消息中的平均数据点数量。
  • 用于设备连接的通信协议。
  • 数据存储周期。

一旦我们对上述参数有了粗略的了解,我们(以及您)将能够估计所需的基础设施以及部署方案。ThingsKit 的性能在很大程度上取决于设备生成的消息量以及这些消息的结构。以下是两个典型的例子:

示例 1:20,000 个跟踪器

20,000 台设备每分钟向云端发送一次消息。每条消息包含的参数如下:

{"latitude": 42.222222, "longitude": 73.333333, "speed": 55.5, "fuel": 92, "batteryLevel": 81}

在这种情况下,ThingsKit 持续维护20,000个连接,每秒处理 333 条消息。每条消息传递 5 个数据点,可能需要单独绘制/分析/获取这些数据点。这导致每秒向数据库发出 1,667 个写入请求,每天产生 143M 请求。根据所选的数据库类型,每天大约会产生 1-2GB (Cassandra) 或 7-10GB (PostgreSQL)。


示例2:100,000个智能电表

100,000个LoRaWAN设备每小时向云端发送一次消息。每个消息结构如下:

{"pulseCounter": 1234567, "leakage": false, "batteryLevel": 81}

ThingsKit 通过HTTP或MQTT从可用网络服务器之一接收上行链路消息。典型的消息速率为每秒100,000/3600= 28条消息,这是相当低的。每条消息包含3个数据点,可能需要单独绘制/分析/获取。然而,我们决定不存储“异常”属性,因为它是多余的,我们只会用它来生成警报。这导致每秒向数据库发出 55.5 个写入请求,每天产生 478 万个请求。根据所选的数据库类型,每天大约产生 100MB (Cassandra) 或 238MB (PostgreSQL)。

主要云服务资源规划

根据上述评估前提,您可以确定关键的ThingsKit服务器/集群资源消耗点:

  • 每秒传入消息的数量(主要影响RAM和CPU消耗)。
  • 并发活动设备会话的数量(主要影响RAM消耗)。
  • 规则引擎处理的消息数量(主要影响CPU消耗)。
  • 持久数据点的数量(直接影响IOPS和相应的数据库)。

ThingsKit支持水平扩展,因此您可以轻松应对RAM/CPU影响者。但是,您需要仔细规划持久数据点的数量(上面列表中的最后一项)。如果您打算使用 PostgreSQL,我们建议每秒少于20,000个数据点记录。如果您计划使用混合数据库方法(PostgreSQL 和 Cassandra),您可以将遥测数据写入扩展到 1M 数据点/秒(采用Cassandra存储),这个数据点限制是针对遥测数据,如果您还有很多的服务端或者客户端属性需要更新到平台,这些属性会被推送到PostgreSQL数据库,所以20,000个数据点限制仍然有效。


部署场景

场景A(部署场景)

最简单的部署场景适用于最多 300,000 台设备,基于实际生产用例,每秒有 10,000 条消息和 10,000 个数据点。此场景需要在同一服务器(本地或云端)中部署ThingsKit平台和PostgreSQL数据库。Nginx也安装在同一服务器上,并充当反向代理和可选的 TLS 终止代理。

部署架构

ThingsKit物联网平台安装部署场景及资源配置

优点

  • 容易安装。
  • 易于维护和更新软件。

缺点

  • 升级会导致停机,每次升级大约需要 5-60分钟。
  • 最低的高可用性,如果硬件或应用程序出现故障,所有设备和用户都会受到影响。
  • 没有数据持久性,所有内容都存储在一台服务器上。
  • 系统的性能受到单台服务器性能的限制。

性能

解决方案的整体性能取决于实例硬件,并严重依赖数据库的性能。我们建议在独立服务器部署场景中对遥测数据(实时数据)使用 PostgreSQL。通过模拟设备接入测试,平均每秒可处理约 5,000 个遥测数据点。

部署资源及费用示例

假设有10,000个传感器,每个传感器平均上报两个数据点,通过网关设备每小时向云端发送一次消息,可采用以下方案:

资源参数规格费用(元/每月)
阿里云ECSecs.c7.xlarge(4 vCPU+8 GiB)391.00
带宽5M125.00
系统盘40GB20.00
数据盘(部署存储)500GB250.00
每月合计:786.00

💡 提示

如果按年购买基础云资源可能会有折扣,具体请咨询您的云服务商。

意见和建议

这种部署场景非常简单,非常适合开发环境、原型设计和早期初创公司。在投入生产之前,我们建议设置数据备份脚本并定期将数据库快照上传到持久存储(例如:阿里云OSS对象存储)。实施服务器实例的定期快照也很有用,以便在可能出现中断的情况下最大限度地缩短恢复时间。

如果您想最大限度地减少数据库维护所花费的资源,我们建议使用云托管数据库,请参考以下场景B的部署方案。


场景B(外部数据库单机部署)

此部署方案与方案 A 非常相似,但需要将托管的数据库部署在单独的服务器上。ThingsKit客户成功利用阿里云云数据库RDS PostgreSQL 版来最大程度地减少数据库设置、备份和支持方面的工作。

部署架构

ThingsKit物联网平台安装部署场景及资源配置

优点

  • 设置非常简单。
  • 易于维护和更新软件实例。
  • 数据通过托管备份和故障转移单独存储。

缺点

  • 升级会导致停机,每次升级的停机时间约为5-60分钟。
  • 最低的高可用性,如果硬件或应用程序出现故障,所有设备和用户都会受到影响。
  • 系统的性能受到单台服务器性能的限制。

性能

解决方案的整体性能取决于实例硬件,并严重依赖数据库的性能。我们建议在独立服务器部署场景中对遥测数据(实时数据)使用 PostgreSQL。通过模拟设备接入测试,平均每秒可处理约5,000个遥测数据点。

部署资源及费用示例

假设有10,000个传感器,每个传感器平均上报两个数据点,通过网关设备每小时向云端发送一次消息,可采用以下方案:

资源参数规格费用(元/每月)
阿里云ECSecs.c7.xlarge(4 vCPU+8 GiB)391.00
带宽5M125.00
系统盘40GB20.00
数据盘(部署存储)500GB250.00
RDS PostgreSQLpg.x2m.medium.2c(2 vCPU+8 GB内存+20GB存储)391.00
每月合计:1,177.00

💡 提示

如果按年购买基础云资源可能会有折扣,具体请咨询您的云服务商。


场景C(微服务架构集群部署)

ThingsKit支持微服务架构 (MSA),可为数百万台设备执行可扩展部署。请参阅平台架构了解更多详细信息。通过MSA部署,系统管理员可以灵活调整传输、规则引擎和JavaScript执行器微服务的数量,以根据当前负载优化集群。

ThingsKit使用Kafka作为主要消息队列和流解决方案,使用Redis作为分布式缓存,使用Cassandra作为高度可用、可扩展且快速的 NoSQL 数据库。请注意,Cassandra 的使用是可选的,建议在高遥测数据速率(每秒超过 20,000 个数据点)的情况下使用,在其他情况下,基于PostgreSQL的部署就足够了。

优点

  • 简单的Kubernetes部署。
  • 无单点故障。
  • 高可用和系统。
  • 小版本升级期间不会出现停机。

缺点

  • 设备如果太少,使用此方案,基础云资源成本较高。

性能

解决方案的整体性能取决于集群硬件,并很大程度上依赖于所使用的数据库的性能。具有5个ThingsKit服务器和 5个Cassandra节点的虚拟机集群可以处理100万台设备。

部署资源及费用示例

示例1:100 万台智能电表部署成本

假设1,000,000 个LoRaWAN/NB-IoT智能电表设备每小时向云端发送一次消息。每条消息包含 3 个数据点,可能需要单独绘制/分析/获取。我们认为消息是通过 HTTP 或 UDP 集成发送到 ThingsKit,这是这种情况的典型情况。

1,000,000 台设备代表每秒加载 280 条消息(1,000,000 台设备/3600 秒),这会导致每秒向数据库(数据点)发出 280 x 3 = 840个写入请求,即每天7260万个请求。根据所选的数据库类型,上述情况导致每天消耗大约 1.2GB (Cassandra) 或 4GB (PostgreSQL) 磁盘空间。

部署架构

ThingsKit物联网平台安装部署场景及资源配置

集群所需资源和费用

以下为Kubernetes集群所需资源:

资源参数规格描述费用(元)
阿里云ECS * 2ecs.r7.xlarge(4 vCPU+32 GiB)2台阿里云ECS资源,用于托管两个ThingsKit节点1,336.00
阿里云ECS * 3ecs.u1-c1m2.large(2 vCPU+4 GiB)3台阿里云ECS资源,用于托管3个Zookeeper和~9个JS 执行器505.00
带宽 * 510M总共5台阿里云ECS资源,每台单独配置10M带宽2,625.00
系统盘 *540GB5个系统盘100.00
数据盘(部署存储)1024GB1TB部署存储2,048.00
RDS PostgreSQLpg.x2m.medium.2c(2 vCPU+8 GB内存+20GB存储)1台RDS PostgreSQL391.00
云数据库 Redis 版社区版+8分片+16GB集群版社区版1,500.00
云消息队列 Kafka 版alikafka.hw.3xlarge1TB存储规格alikafka.hw.3xlarge集群处理能力:读流量处理峰值 3*30 MB/s,写流量处理峰值 3*30 MB/s。 集群流量 = 业务流量 + 集群内副本复制流量,该规格实际业务读流量处理峰值为 30 MB/s,业务写流量处理峰值为 30 MB/s。2,388.50
每月合计:10893.50

示例2:100 万个智能追踪器部署成本

假设1,000,000个智能跟踪器设备每分钟向云端发送一次读数。每条消息包含 5 个可能需要单独绘制/分析/获取的数据点。

典型消息速率为 1,000,000 条/60 秒。= 每秒 16,667 条消息。这导致每秒 16667 x 5 = 83,335 个对数据库(数据点)的写入请求,或每天72亿次请求。Cassandra可以可靠地处理此负载,每天可达144GB。由于数据需要在 Cassandra中复制3次,因此每天需要 432GB 的磁盘空间。

部署架构

ThingsKit物联网平台安装部署场景及资源配置

集群所需资源和费用

以下为Kubernetes集群所需资源:

资源参数规格描述费用(元)
阿里云ECS * 8ecs.u1-c1m2.large(2 vCPU+4 GiB)8台阿里云ECS资源,用于托管8个ThingsKit MQTT 传输容器1,347.00
阿里云ECS * 15ecs.c7.xlarge(4 vCPU+8 GiB)15台阿里云ECS资源,用于托管15个ThingsKit节点5,870.00
阿里云ECS * 15ecs.c7.xlarge(4 vCPU+8 GiB)15台阿里云ECS资源,用于托管15个Cassandra数据库节点5,870.00
阿里云ECS * 3ecs.u1-c1m2.large(2 vCPU+4 GiB)3台阿里云ECS资源,用于托管3个Zookeeper和约30个JS 执行器505.00
带宽 * 4110M总共41台阿里云ECS资源,每台单独配置10M带宽21,525.00
系统盘 *4140GB41个系统盘820.00
数据盘(部署存储)100TB100TB102,400.00
RDS PostgreSQLpg.x2m.medium.2c(2 vCPU+8 GB内存+20GB存储)1台RDS PostgreSQL391.00
云数据库 Redis 版8分片+16GB集群版社区版1,500.00
云消息队列 Kafka 版alikafka.hw.3xlarge1TB存储规格alikafka.hw.3xlarge集群处理能力:读流量处理峰值 3*30 MB/s,写流量处理峰值 3*30 MB/s。 集群流量 = 业务流量 + 集群内副本复制流量,该规格实际业务读流量处理峰值为 30 MB/s,业务写流量处理峰值为 30 MB/s。2,388.50
每月合计:142616.50