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

一、前言

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

serverless 如何实现的(以Serverless为核心的云端能力如何打造)(1)

二期版本首页效果

serverless 如何实现的(以Serverless为核心的云端能力如何打造)(2)

在建三期版本首页效果

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

二、架构组成

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

serverless 如何实现的(以Serverless为核心的云端能力如何打造)(3)

二期架构图

1. 部署维度2. 功能维度

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

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

三、模块实现

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

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

以 API 网关推送进来,由云函数在环境变量 event 中提取到的原始数据。其中主要的部分如下:

{ "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

各表用途:

2. 模块说明(1)数据入库(2)终端在线更新(3)数据统计(4)数据接口-终端汇总信息表(5)数据接口-终端单点信息表(6)数据展示四、成本分析

serverless 如何实现的(以Serverless为核心的云端能力如何打造)(4)

二期成本展示

上图表数为每节点每 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 元

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

五、后续计划

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

三期架构预告如下所示,浅蓝色标明的是相对二期的架构变更重点。

serverless 如何实现的(以Serverless为核心的云端能力如何打造)(5)

三期架构

三期版本部分完成效果展示如下:

serverless 如何实现的(以Serverless为核心的云端能力如何打造)(6)

WEB 端展示

serverless 如何实现的(以Serverless为核心的云端能力如何打造)(7)

serverless 如何实现的(以Serverless为核心的云端能力如何打造)(8)

小程序端 Demo

,