概述
本文介绍了 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 终止代理。
部署架构
优点
- 容易安装。
- 易于维护和更新软件。
缺点
- 升级会导致停机,每次升级大约需要 5-60分钟。
- 最低的高可用性,如果硬件或应用程序出现故障,所有设备和用户都会受到影响。
- 没有数据持久性,所有内容都存储在一台服务器上。
- 系统的性能受到单台服务器性能的限制。
性能
解决方案的整体性能取决于实例硬件,并严重依赖数据库的性能。我们建议在独立服务器部署场景中对遥测数据(实时数据)使用 PostgreSQL。通过模拟设备接入测试,平均每秒可处理约 5,000 个遥测数据点。
部署资源及费用示例
假设有10,000个传感器,每个传感器平均上报两个数据点,通过网关设备每小时向云端发送一次消息,可采用以下方案:
资源 | 参数规格 | 费用(元/每月) |
阿里云ECS | ecs.c7.xlarge(4 vCPU+8 GiB) | 391.00 |
带宽 | 5M | 125.00 |
系统盘 | 40GB | 20.00 |
数据盘(部署存储) | 500GB | 250.00 |
每月合计: | 786.00 |
💡 提示
如果按年购买基础云资源可能会有折扣,具体请咨询您的云服务商。
意见和建议
这种部署场景非常简单,非常适合开发环境、原型设计和早期初创公司。在投入生产之前,我们建议设置数据备份脚本并定期将数据库快照上传到持久存储(例如:阿里云OSS对象存储)。实施服务器实例的定期快照也很有用,以便在可能出现中断的情况下最大限度地缩短恢复时间。
如果您想最大限度地减少数据库维护所花费的资源,我们建议使用云托管数据库,请参考以下场景B的部署方案。
场景B(外部数据库单机部署)
此部署方案与方案 A 非常相似,但需要将托管的数据库部署在单独的服务器上。ThingsKit客户成功利用阿里云云数据库RDS PostgreSQL 版来最大程度地减少数据库设置、备份和支持方面的工作。
部署架构
优点
- 设置非常简单。
- 易于维护和更新软件实例。
- 数据通过托管备份和故障转移单独存储。
缺点
- 升级会导致停机,每次升级的停机时间约为5-60分钟。
- 最低的高可用性,如果硬件或应用程序出现故障,所有设备和用户都会受到影响。
- 系统的性能受到单台服务器性能的限制。
性能
解决方案的整体性能取决于实例硬件,并严重依赖数据库的性能。我们建议在独立服务器部署场景中对遥测数据(实时数据)使用 PostgreSQL。通过模拟设备接入测试,平均每秒可处理约5,000个遥测数据点。
部署资源及费用示例
假设有10,000个传感器,每个传感器平均上报两个数据点,通过网关设备每小时向云端发送一次消息,可采用以下方案:
资源 | 参数规格 | 费用(元/每月) |
阿里云ECS | ecs.c7.xlarge(4 vCPU+8 GiB) | 391.00 |
带宽 | 5M | 125.00 |
系统盘 | 40GB | 20.00 |
数据盘(部署存储) | 500GB | 250.00 |
RDS PostgreSQL | pg.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) 磁盘空间。
部署架构
集群所需资源和费用
以下为Kubernetes集群所需资源:
资源 | 参数规格 | 描述 | 费用(元) |
阿里云ECS * 2 | ecs.r7.xlarge(4 vCPU+32 GiB) | 2台阿里云ECS资源,用于托管两个ThingsKit节点 | 1,336.00 |
阿里云ECS * 3 | ecs.u1-c1m2.large(2 vCPU+4 GiB) | 3台阿里云ECS资源,用于托管3个Zookeeper和~9个JS 执行器 | 505.00 |
带宽 * 5 | 10M | 总共5台阿里云ECS资源,每台单独配置10M带宽 | 2,625.00 |
系统盘 *5 | 40GB | 5个系统盘 | 100.00 |
数据盘(部署存储) | 1024GB | 1TB部署存储 | 2,048.00 |
RDS PostgreSQL | pg.x2m.medium.2c(2 vCPU+8 GB内存+20GB存储) | 1台RDS PostgreSQL | 391.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 的磁盘空间。
部署架构
集群所需资源和费用
以下为Kubernetes集群所需资源:
资源 | 参数规格 | 描述 | 费用(元) |
阿里云ECS * 8 | ecs.u1-c1m2.large(2 vCPU+4 GiB) | 8台阿里云ECS资源,用于托管8个ThingsKit MQTT 传输容器 | 1,347.00 |
阿里云ECS * 15 | ecs.c7.xlarge(4 vCPU+8 GiB) | 15台阿里云ECS资源,用于托管15个ThingsKit节点 | 5,870.00 |
阿里云ECS * 15 | ecs.c7.xlarge(4 vCPU+8 GiB) | 15台阿里云ECS资源,用于托管15个Cassandra数据库节点 | 5,870.00 |
阿里云ECS * 3 | ecs.u1-c1m2.large(2 vCPU+4 GiB) | 3台阿里云ECS资源,用于托管3个Zookeeper和约30个JS 执行器 | 505.00 |
带宽 * 41 | 10M | 总共41台阿里云ECS资源,每台单独配置10M带宽 | 21,525.00 |
系统盘 *41 | 40GB | 41个系统盘 | 820.00 |
数据盘(部署存储) | 100TB | 100TB | 102,400.00 |
RDS PostgreSQL | pg.x2m.medium.2c(2 vCPU+8 GB内存+20GB存储) | 1台RDS PostgreSQL | 391.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 |