免费下载!由 O’Reilly 出版的《NGINX 完全指南》中文版已正式上线 了解详情
写点什么

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

  • 2021-03-12
  • 本文字数:3590 字

    阅读完需:约 12 分钟

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

为了跟踪小区级的微环境质量,腾讯内部发起了一个实验性项目:细粒度的分布式大气监测,希望基于腾讯完善的产品与技术能力,与志愿者们共建一套用于监测生活环境大气的系统。


一、前言


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


二期版本首页效果

在建三期版本首页效果

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


二、架构组成


整个二期版本的架构组成如下图所示,其中浅蓝色标明的部分是相对一期的架构变更重点。

二期架构图


1. 部署维度


  • 终端:部署在监测点的设备。

  • 云端:部署在云上的平台。

2. 功能维度


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

具体功能与选型说明如下:


  • 监测节点:由软硬两部分组成。基于腾讯物联网终端操作系统 TencentOS tiny 开发固件,将兼容腾讯云的硬件设备与腾讯云 IoT explorer 进行了协议级的对接。

  • 本地网关:此部分以通信协议转换为主,不解析具体数据,仅需按前文指引配置即可。

  • 物联网接入层:基于腾讯云 IoT explorer 产品,提供了解密、接入、转发的相关功能。在获取数据后,进行了基于 http 协议的转推动作,传递给下游 API 网关。

  • 中间件层:基于 API 网关提供了衔接及负载均衡等能力,基于鉴权、流控等能力,衔接云函数,提供可靠的数据输入输出服务。

  • 逻辑层:基于云函数,实现了接收数据入库(数据固化)、定时统计汇总(数据分析)、输出应用数据(数据输出,支撑展示)的能力。

  • 存储层:基于云数据库 TencentDB for MySQL,进行监测数据、汇总数据、平台配置的存储。

  • 展示层:基于腾讯云图,提供了地图展示、数据展示、折线图展示等能力。并配置提供联动处理,提高了响应速度,减少了资源文件的重复传输。


三、模块实现


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


  • 数据结构:介绍各环节的核心数据结构与关联模式。

  • 模块说明:介绍各功能模块的实现与对应源码。


1. 数据结构

(1)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 }}
复制代码


(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:临时日志表。上报设备名如不在节点表内,则存入此表,主要用于调测。


2. 模块说明

(1)数据入库


  • 模块功能:接收 IoT explorer 推送数据,匹配并转换后,入数据库;

  • 使用产品:API 网关、无服务器云函数;

  • 关联源码:github-upload[2]

  • 部署方式:请参考相关文章 在线甲醛监测[3] “4.2.2 无服务器云函数/4.2.3 云 API 网关” 章节。


(2)终端在线更新


  • 模块功能:按 3 分钟触发,更新终端信息,用于快速查询与展示;

  • 使用产品:云函数;

  • 关联源码:github-client_active_new

  • 部署方式:请参考相关文章 在线甲醛监测  “4.2.2 无服务器云函数/4.2.3 云 API 网关” 章节,但改为“定时触发”模式。

(3)数据统计


  • 模块功能:按小时及天触发,统计监测数据,用于快速查询与展示;

  • 使用产品:云函数;

  • 关联源码:github-aggregate()

  • 部署方式:请参考相关文章 在线甲醛监测  “4.2.2 无服务器云函数/4.2.3 云 API 网关” 章节,但改为“定时触发”模式。


(4)数据接口-终端汇总信息表


  • 模块功能:通过 API 网关提供数据查询能力,响应云图调用,提供终端汇总信息表;

  • 使用产品:API 网关、云函数;

  • 关联源码:github-client_info

  • 部署方式:请参考相关文章 在线甲醛监测 “4.2.2 无服务器云函数/4.2.3 云 API 网关” 章节。


(5)数据接口-终端单点信息表


  • 模块功能:通过 API 网关提供数据查询能力,响应云图调用,提供终端单点信息表;

  • 使用产品:API 网关、云函数;

  • 关联源码:github-client_data

  • 部署方式:请参考相关文章 在线甲醛监测 “4.2.2 无服务器云函数/4.2.3 云 API 网关” 章节。


(6)数据展示


  • 模块功能:提供 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



头图:Unsplash

作者:高树磊

原文:https://mp.weixin.qq.com/s/AopuDdm44JVWrAcr6AIccA

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

来源:TencentServerless - 微信公众号 [ID:ServerlessGo]

转载:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2021-03-12 23:018919

评论

发布
暂无评论
发现更多内容

MySQL统计总行数:听说count(*)性能更好,是真的吗

程序员拾山

MySQL

正式起航!用友23大行业客户与解决方案事业部全面亮相

用友BIP

用友BIP

TiCDC 源码解读(4)-- TiCDC Scheduler 工作原理解析

TiDB 社区干货传送门

TiCDC 源码解读

【最佳实践】TiDB 同步&迁移实战 (从 MySQL/Oracle/PostgreSQL/MongoDB 到 TiDB )

TiDB 社区干货传送门

二十年,三条路:国产CPU的“饱和式救援”

脑极体

cpu

亚信科技AntDB数据库荣获2022年度技术卓越奖

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

Java高手速成 | 多态性实战

TiAmo

编程语言 多态 Java 开发

2022年的魔力象限领导者,为什么是华为数通?

脑极体

华为

《PyTorch 深度学习实战》学习笔记 Day05

IT蜗壳-Tango

学习笔记 PyTorch IT蜗壳教学

赛意信息张成康:在行业场景驱动下为企业创造数字化价值

科技热闻

视觉模型 ConvNeXt V2,结合纯卷积与MAE

Zilliz

计算机视觉

TiDB PPT玩家快速点评 V6.5 新特性

TiDB 社区干货传送门

版本测评

KaiwuDB 数据服务平台 1.0 产品详解

KaiwuDB

时序数据库 多模数据库 数据服务平台

从管事到管人

石云升

极客时间 1月月更 技术领导力实战笔记

C#/VB.NET 在 Word 表格中插入或提取图像

在下毛毛雨

C# .net 提取图像 word表格 添加图片

2022大数据产业年度“国产化优秀代表厂商”榜单发布,亚信科技AntDB数据库位列其中

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

AirServer2023下载安装教程投屏软件,支持安卓、苹果手机投屏至电脑

茶色酒

AirServer AirServer2023

easyrecovery2024非常好用的磁盘恢复工具

茶色酒

EasyRecovery EasyRecovery15 easyrecovery2023

TiDB CDC v6.5.0 新特性实践

TiDB 社区干货传送门

实践案例 新版本/特性发布 6.x 实践

英特尔2022技术创新和产品发布盘点:深耕硬核创新,助推数字未来

科技热闻

FL Studio2024中文完整版电脑编曲软件及配置要求

茶色酒

FL Studio FL Studio 21

WSL中使用vcpkg安装pcl库出现编译失败的原因

大伟

湖仓一体电商项目(十七):业务实现之编写写入DIM层业务代码

Lansonli

湖仓一体电商项目

tomcat8和tomcat7性能比较

五毛

tomcat 压测分析

有什么方法从 PostgreSQL 数据迁移到 TiDB ?

TiDB 社区干货传送门

迁移 实践案例 管理与运维

中原银行对金融行业实时数仓的现状与发展趋势思考

Apache Flink

大数据 flink 实时计算

MySQL:如果被更新字段的新值与旧值相等,SQL会被真正执行吗?

程序员拾山

MySQL

2022下半年盘点:20+主流数据库重大更新及技术要点汇总

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

AntDB数据库助力中国移动结算中心建设

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

“信”创未来 | AntDB数据库2022年度总结,请查收!

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

复习前端:浏览器缓存策略

devpoint

Service Worker 浏览器缓存 缓存技术

鹅厂分布式大气监测系统:以 Serverless 为核心的云端能力如何打造?_大数据_TencentServerless_InfoQ精选文章