鹅厂分布式大气监测系统:以 Serverless 为核心的云端能力如何打造

本文主要是介绍鹅厂分布式大气监测系统:以 Serverless 为核心的云端能力如何打造,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前述

本系列前序文章,已经对硬件层进行了详细的说明,讲解了设备性能、开发、灌装等环节的过程。本篇将对数据上云后的相关流程,进行说明。

由于项目平台持续建设中,当前已开源信息为二期版本,所以本篇内容均基于此版本能力进行说明。此版本架构进一步优化了数据鉴权及数据库保护。

本文将分为两个部分:

  • 架构组成:技术角度,拆解设计逻辑
  • 模块实现:功能角度,讲解实现逻辑

【注1】二期版本首页效果

v2_yuntu_index.png

【注2】在建三期版本首页效果

v3_yuntu_index.png

【注3】在建三期版本中,加入了 日志服务 、对象存储、小程序功能。提供灵活的日志存储与高速检索能力、 低成本的数据库备份+恢复+迁移同步能力、移动端交互及其它能力。

架构组成

二期架构图

v2_架构图.png

注:浅蓝色标明的是相对一期的架构变更重点。

部署维度

  • 终端:部署在监测点的设备。相关设计在本系列前文中已说明。
  • 云端:部署在云上的平台。相关设计将在本文说明。

功能维度

以平台设计的基本组成部分,进行的逻辑拆分。并依架构层的设计需求,配套选型的具体产品。

具体功能与选型说明:

  • 监测节点:由软硬两部分组成。基于腾讯物联网终端操作系统 TencentOS tiny开发固件,将 兼容腾讯云的硬件设备 与 腾讯云IoT explorer进行了协议级的对接。
  • 本地网关:此部分以通信协议转换为主,不解析具体数据,仅需按前文指引配置即可。
  • 物联网接入层:基于腾讯云IoT explorer产品,提供了解密、接入、转发的相关功能。在获取数据后,进行了基于http协议的转推动作,传递给下游 API 网关。
  • 中间件层:基于API 网关提供了衔接及负载均衡等能力,基于鉴权、流控等能力,衔接云函数,提供可靠的数据输入输出服务。
  • 逻辑层:基于云函数,实现了接收数据入库(数据固化)、定时统计汇总(数据分析)、输出应用数据(数据输出,支撑展示)的能力。
  • 存储层:基于云数据库 TencentDB for MySQL,进行监测数据、汇总数据、平台配置的存储。
  • 展示层:基于腾讯云图,提供了地图展示、数据展示、折线图展示等能力。并配置提供联动处理,提高了响应速度,减少了资源文件的重复传输。

模块实现

整体系统,以数据为核心,进行了相关设计,所以本部分有两个组成部分:

  • 数据结构:讲解各环节的核心数据结构与关联模式。
  • 模块说明:讲解各功能模块的实现与对应源码。

数据结构

IoT explorer(物联网开发平台)推送数据结构

以API网关推送进来,由云函数在环境变量 event 中提取到的原始数据。

其中主要的部分:

  • 非'body' 部分,为api网关相关信息
  • 'body' = IoT explorer 原始数据
  • 'body' = 终端节点上报的原始数据,经base64编码
{"body": "{\"payload\":\"eyJtZXRob2QiOiJyZXBvcnQiLCJjbGllbnRUb2tlbiI6IjIwMjAtMDgtMThUMTE6MTc6NDkuNDAzWiIsInBhcmFtcyI6eyJQTTFfQ0YxIjo1LCJQTTJkNV9DRjEiOjYsIlBNMTBfQ0YxIjo3LCJQTTEiOjUsIlBNMmQ1Ijo2LCJQTTEwIjo3LCJwYXJ0aWNsZXNfMGQzIjo3OTIsInBhcnRpY2xlc18wZDUiOjI1NCwicGFydGljbGVzXzEiOjE1LCJwYXJ0aWNsZXNfMmQ1IjozLCJwYXJ0aWNsZXNfNSI6MywicGFydGljbGVzXzEwIjowLCJ2ZXJzaW9uIjoxNTEsIkVycm9yIjowfX0=\", \"seq\":18639, \"timestamp\":1597749469,\"topic\":\"$thing/up/property/?????/?????\", \"devicename\":\"?????\", \"productid\":\"?????\"}","headerParameters": {},"headers": {"accept-encoding": "gzip","content-length": "511","content-type": "application/json","endpoint-timeout": "15","host": "service-???-???.gz.apigw.tencentcs.com","user-agent": "Go-http-client/1.1","x-anonymous-consumer": "true","x-api-requestid": "???03a993936ae191f44651???","x-b3-traceid": "???03a993936ae191f44651???","x-qualifier": "$LATEST"},"httpMethod": "POST","path": "/??????","pathParameters": {},"queryString": {},"queryStringParameters": {},"requestContext": {"httpMethod": "POST","identity": {},"path": "/??????","serviceId": "service-?????","sourceIp": "?.?.?.?","stage": "release"}
}

'body' 解base64编码后:

{"clientToken": "2020-08-18T11:17:49.403Z","method": "report","params": {"Error": 0,"PM1": 5,"PM10": 7,"PM10_CF1": 7,"PM1_CF1": 5,"PM2d5": 6,"PM2d5_CF1": 6,"particles_0d3": 792,"particles_0d5": 254,"particles_1": 15,"particles_10": 0,"particles_2d5": 3,"particles_5": 3,"version": 151}
}
数据库表单结构

数据库详细格式,请参考 github-sql

各表用途:

  • config:系统配置表
  • space:地点表。记录节点部署地点。
  • client:节点表。记录节点信息及最新关键信息,关联space表。
  • base_data:日志表。记录每次上报的信息,关联space、client表。
  • aggregate_data:汇总信息表。记录按小时、天等时段汇总的数据信息。
  • temp_base_data:临时日志表。上报设备名如不在节点表内,则存入此表,主要用于调测。
API接口数据结构

模块说明

数据入库
  • 模块功能:接收IoT explorer推送数据,匹配并转换后,入数据库
  • 使用产品:API 网关、无服务器云函数
  • 关联源码:github-upload
  • 部署方式:请参考相关文章 在线甲醛监测 “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网关提供的服务链接。

二期成本分析

v2_成本分析.png

上图表数为每节点每15秒上报一次的计算结果。

硬件部分由于厂商与采购量的差异,价格不同。此处以云服务成本计算,如果10000节点规模,每节点每分钟上报一次,单节点云服务年成本:

  • 二期架构 3.335元 (数据库/年+云图/年)/10000+(API网关+云函数)/4=(468+48)/10000+(9+2.1)/4

  • 三期架构 1.09元 (消息队列/年+数据库/年*2+云图/年)/10000+(云函数+日志服务+对象存储)/4=(3228+468*2+48)/10000+(2.1+2.24+0.02)/4

二期无对象存储及日志服务模块,但在当前在建三期中已使用数月,故有实际数据可列入统计。

后续计划

完成三期建设,计划内容涉及:

  • 交互优化(done): 启用space表,展示地点。
  • 交互建设(doing): 增加小程序能力,提供移动端查询能力,及告警推送能力。
  • 容灾优化1(done): 增加对象存储,提供低成本数据备份、恢复、异步迁移同步能力。
  • 容灾优化2(todo): 增加消息队列 CKafka,应对网络异常、数据库异常情况下的数据堆积与丢失风险。
  • 容灾优化3(doing): 增加日志服务,用于数据对账,应对多环节数据处理中,可能出现的数据丢失或错乱情况。

三期架构图预告

v3_架构图.png

注:浅蓝色说明的是相对二期的架构变更重点。

三期版本部分完成效果

WEB端展示

v3_yuntu_index.png

v3_yuntu_site.png

小程序端Demo

v3_yuntu_mapp.png

One More Thing

立即体验腾讯云 Serverless Demo,领取 Serverless 新用户礼包 👉 serverless/start

欢迎访问:Serverless 中文网!

这篇关于鹅厂分布式大气监测系统:以 Serverless 为核心的云端能力如何打造的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/442102

相关文章

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

详解MySQL中DISTINCT去重的核心注意事项

《详解MySQL中DISTINCT去重的核心注意事项》为了实现查询不重复的数据,MySQL提供了DISTINCT关键字,它的主要作用就是对数据表中一个或多个字段重复的数据进行过滤,只返回其中的一条数据... 目录DISTINCT 六大注意事项1. 作用范围:所有 SELECT 字段2. NULL 值的特殊处

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定