一、前言
本系列的前序文章[1],已经对硬件层进行了详细的说明,讲解了设备性能、开发、灌装等环节的过程。本文将对数据上云后的相关流程,进行说明。
由于项目平台持续建设中,当前已开源信息为二期版本,所以本篇内容均基于此版本能力进行说明。此版本架构进一步优化了数据鉴权及数据库保护。
二期版本首页效果
在建三期版本首页效果
而在建的三期版本中,加入了日志服务 、对象存储、小程序等功能。提供了灵活的日志存储与高速检索能力、 低成本的数据库备份+恢复+迁移同步能力、移动端交互及其它能力。
二、架构组成
整个二期版本的架构组成如下图所示,其中浅蓝色标明的部分是相对一期的架构变更重点。二期架构图1. 部署维度终端:部署在监测点的设备。
云端:部署在云上的平台。
以平台设计的基本组成部分,来进行逻辑拆分,并依架构层的设计需求,配套选型的具体产品。
具体功能与选型说明如下:
监测节点:由软硬两部分组成。基于腾讯物联网终端操作系统 TencentOS tiny开发固件,将兼容腾讯云的硬件设备与腾讯云 IoT explorer 进行了协议级的对接。
本地网关:此部分以通信协议转换为主,不解析具体数据,仅需按前文指引配置即可。
物联网接入层:基于腾讯云 IoT explorer 产品,提供了解密、接入、转发的相关功能。在获取数据后,进行了基于 http 协议的转推动作,传递给下游 API 网关。
中间件层:基于 API 网关提供了衔接及负载均衡等能力,基于鉴权、流控等能力,衔接云函数,提供可靠的数据输入输出服务。
逻辑层:基于云函数,实现了接收数据入库(数据固化)、定时统计汇总(数据分析)、输出应用数据(数据输出,支撑展示)的能力。
存储层:基于云数据库 TencentDB for MySQL,进行监测数据、汇总数据、平台配置的存储。
展示层:基于腾讯云图,提供了地图展示、数据展示、折线图展示等能力。并配置提供联动处理,提高了响应速度,减少了资源文件的重复传输。
三、模块实现
整体系统,以数据为核心,进行了相关设计,所以本部分分为两个组成部分:
数据结构:介绍各环节的核心数据结构与关联模式。
模块说明:介绍各功能模块的实现与对应源码。
(2)数据库表单结构
数据库详细格式,请参考github-sql:
https://github.com/eckygao/ampservice_demo/blob/master/amservice.sql
各表用途:
config:系统配置表;
space:地点表。记录节点部署地点;
client:节点表。记录节点信息及最新关键信息,关联space表;
base_data:日志表。记录每次上报的信息,关联space、client表;
aggregate_data:汇总信息表。记录按小时、天等时段汇总的数据信息;
temp_base_data:临时日志表。上报设备名如不在节点表内,则存入此表,主要用于调测。
模块功能:接收IoT explorer推送数据,匹配并转换后,入数据库;
使用产品:API 网关、无服务器云函数;
关联源码:github-upload[2];
部署方式:请参考相关文章 在线甲醛监测[3] “4.2.2 无服务器云函数/4.2.3 云API网关” 章节。
模块功能:按3分钟触发,更新终端信息,用于快速查询与展示;
使用产品:云函数;
关联源码:github-client_active_new;
部署方式:请参考相关文章 在线甲醛监测 “4.2.2 无服务器云函数/4.2.3 云API网关” 章节,但改为“定时触发”模式。
模块功能:按小时及天触发,统计监测数据,用于快速查询与展示;
使用产品:云函数;
关联源码:github-aggregate();
部署方式:请参考相关文章 在线甲醛监测 “4.2.2 无服务器云函数/4.2.3 云API网关” 章节,但改为“定时触发”模式。
模块功能:通过API网关提供数据查询能力,响应云图调用,提供终端汇总信息表;
使用产品:API 网关、云函数;
关联源码:github-client_info;
部署方式:请参考相关文章 在线甲醛监测 “4.2.2 无服务器云函数/4.2.3 云API网关” 章节。
模块功能:通过API网关提供数据查询能力,响应云图调用,提供终端单点信息表;
使用产品:API 网关、云函数;
关联源码:github-client_data;
部署方式:请参考相关文章 在线甲醛监测 “4.2.2 无服务器云函数/4.2.3 云API网关” 章节。
模块功能:提供WEB端展示能力,含地图绘点、列表展示、折线展示等;
使用产品:腾讯云图;
关联源码:无,当前为手工配置;
部署方式:请参考相关文章 在线甲醛监测 “4.2.4 腾讯云图” 章节,但数据源选择时,改为使用“API”。其中“首页”地图使用“数据接口-终端汇总信息表”接口、“单点数据页”使用“数据接口-终端单点信息表”接口。具体调用的接口URL,请对应API网关提供的服务链接。
四、成本分析
二期成本展示
上图表数为每节点每15秒上报一次的计算结果。
硬件部分由于厂商与采购量的差异,价格不同。此处以云服务成本计算,如果10000节点规模,每节点每分钟上报一次,单节点云服务年成本如下:
1. 二期架构单节点成本
(数据库/年+云图/年)/10000+(API网关+云函数)/4=(468+48)/10000+(9+2.1)/4=3.335元。
2. 三期架构单节点成本
(消息队列/年+数据库/年\*2+云图/年)/10000+(云函数+日志服务+对象存储)/4=(3228+468*2+48)/10000+(2.1+2.24+0.02)/4=1.09元。
其中,二期无对象存储及日志服务模块,但当前的在建三期中已使用数月,故有实际数据可列入统计。
五、后续计划
预计完成三期建设,计划内容涉及:
交互优化(done): 启用space表,展示地点。
交互建设(doing): 增加小程序能力,提供移动端查询能力,及告警推送能力。
容灾优化1(done): 增加对象存储,提供低成本数据备份、恢复、异步迁移同步能力。
容灾优化2(todo): 增加消息队列 CKafka,应对网络异常、数据库异常情况下的数据堆积与丢失风险。
容灾优化3(doing): 增加日志服务,用于数据对账,应对多环节数据处理中,可能出现的数据丢失或错乱情况。
三期架构
三期版本部分完成效果展示如下:WEB端展示小程序端Demo参考资料:
[1] 手搓一个分布式大气监测系统专栏:
https://cloud.tencent.com/developer/inventory/381
[2] 模块设计源码展示:
https://github.com/eckygao/ampservice_demo/tree/master/scf
[3] 腾讯云实践案例:基于树莓派实现甲醛在线监测
https://cloud.tencent.com/developer/article/1474978?from=10680
[4] 腾讯云-物联网开发平台:
https://cloud.tencent.com/product/iotexplorer
[5] TencentOS tiny:
https://github.com/Tencent/TencentOS-tiny
[6] 腾讯云-API网关:
https://cloud.tencent.com/product/apigateway
[7] 腾讯云-云函数:
https://cloud.tencent.com/product/scf
[8] 腾讯云-云数据库:
https://cloud.tencent.com/product/cdb
[9] 腾讯云-腾讯云图:
https://cloud.tencent.com/product/tcv