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

64次阅读
没有评论

共计 4174 个字符,预计需要花费 11 分钟才能阅读完成。

本篇文章为大家展示了以 Serverless 为核心的云端能力如何打造分布式大气监测系统,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

前述

下面将对数据上云后的相关流程,进行说明。

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

分为两个部分:

架构组成:技术角度,拆解设计逻辑

模块实现:功能角度,讲解实现逻辑

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

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

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

架构组成二期架构图

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

部署维度

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

云端:部署在云上的平台。相关设计将在本文说明。

功能维度

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

具体功能与选型说明:

监测节点:由软硬两部分组成。基于腾讯物联网终端操作系统 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 网关提供的服务链接。

二期成本分析

上图表数为每节点每 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): 增加日志服务,用于数据对账,应对多环节数据处理中,可能出现的数据丢失或错乱情况。

三期架构图预告

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

三期版本部分完成效果 WEB 端展示

上述内容就是以 Serverless 为核心的云端能力如何打造分布式大气监测系统,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计4174字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)