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

22次阅读

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

前述

本系列前序文章,曾经对硬件层进行了具体的阐明,解说了设施性能、开发、灌装等环节的过程。本篇将对数据上云后的相干流程,进行阐明。

因为我的项目平台继续建设中,以后已开源信息为二期版本,所以本篇内容均基于此版本能力进行阐明。此版本架构进一步优化了数据鉴权及数据库爱护。

本文将分为两个局部:

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

【注 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+4682+48)/10000+(2.1+2.24+0.02)/4

二期无对象存储及日志服务模块,但在以后在建三期中已应用数月,故有理论数据可列入统计。

后续打算

实现三期建设,打算内容波及:

  • 交互优化 (done): 启用 space 表,展现地点。
  • 交互建设 (doing): 减少小程序能力,提供挪动端查问能力,及告警推送能力。
  • 容灾优化 1(done): 减少对象存储,提供低成本数据备份、复原、异步迁徙同步能力。
  • 容灾优化 2(todo): 减少音讯队列 CKafka,应答网络异样、数据库异常情况下的数据沉积与失落危险。
  • 容灾优化 3(doing): 减少日志服务,用于数据对账,应答多环节数据处理中,可能呈现的数据失落或错乱状况。

三期架构图预报

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

三期版本局部实现成果

WEB 端展现

小程序端 Demo

One More Thing

立刻体验腾讯云 Serverless Demo,支付 Serverless 新用户礼包 ???? serverless/start

欢送拜访:Serverless 中文网!

正文完
 0