使用MQTT与函数计算做热力图的实践
简介: 在各类场景中,关于上报数据的处理无处不在,而以上提到的场景都可以通过本方案的MQTT+FC+API Gateway的方式参考优化来实现。
前言
最近几年,我们在一些商场、图书馆、机场或港口环境里,经常可以看到一些机器人在转来转去,它们被大家熟知的作用是对客户进行指引服务。不仅于此,事实上,一些先行的企业也会利用机器人来收集这些人流密集地的特征数据,通过上报这些特征数据,进行快速的清洗加工处理,从而提供有意义的应对梳导措施,或者指引信息(广告)投放决策等商业上的转化。
其中有一个主要场景是统计区域的热力图,并开放给特定的系统(也在考虑开发给终端用户)进行查询加工处理。
这些机器人会在不同的时段进行按需投放,且会在采集数据有较大变化或某固定周期内进行上报。数据采集变化大的时候,上报会趋于频繁,后面的数据清洗处理任务需求也会同步增加。
我们将在本篇文章里探讨下如何在技术选型上更适合地对这类场景进行上报清洗与涉取的处理。
场景特点与要求:
1. 数据通道的连接能力:数据通道随着业务的扩展,机器人的投放也会同步增加,对于数据通道有足够的扩展灵活性,可以按需进行扩展,同时连接的级别能够支持10W+级别的扩展。
2. 简洁数据清洗的能力:对于数据的处理,本质上就是对数据的归纳统计,逻辑实现上并不复杂。对于数据本身的峰谷变化,能有最简单有效的匹配扩缩处理能力即可,在清洗上不希望为此引入复杂的传统大数据级别的笨重方案。
3. 弹性数据访问的能力:这里提到的的热力图信息,以后会考虑开放给终端用户访问,访问量都是动态变化的,随着不同的时间、节日、突发事件等都会有不可预知的幅度变化,所以在此业务中要求有弹性的访问能力。业务方不希望通过限流方式来实现,因为会对业务量本身造成影响。
4. 性能优越的存储能力:此场景下,数据写入与读取并发量都高,客户希望使用NoSQL的方式进行存储。NoSQL 类型能最好支持排序的功能,本文介绍的方案中使用Redis,不再做更多的分析介绍。
备选的技术方案分析
数据通道的连接能力
自建Kafka
优点:
- Kafka作为通用的数据收集信息通道,使用面广泛,接入方式多样化。社区完善,学习成本低。
- Kafka本身搭建容易,与下游的大数据处理产品协调方案成熟。
缺点:
- 动态处理Kafka的扩容复杂。
- 需要搭建额外处理集群的稳定性配套方案。
- 外网网络流量管理需要配合额外的方案。
- 主流方案是作为连接应用的收集能力,对于终端的连接能力没有规模级别的案例验证。
消息队列MQTT方案
优点:
- 支持百万级别的连接,完成可以覆盖业务发展的诉求,为业务留足了扩展空间。
- MQTT的协议非常简洁,在端与服务间的传输中有优势。支持各种消息触达的QoS质量。
- 支持各种客户端接入实现语言。
- 可实时观测客户端的连接情况,方便发现异常情况。
缺点:
- 处理大数据的实践没有Kafka成熟,下游产品选型受一定的限制。
弹性数据清洗的能力
大数据方案(Storm、Spark、Flink等)
优点:
- 开源的通用方案,资料众多,方案成熟。
缺点:
- 搭建运维复杂,需要提供额外的监控与恢复手段。
- 需要学习接受各种组件方式(下图是以Storm为例)。
- 提前评估资源使用情况,无法按照实时数据量进行相应的扩缩使用。
函数计算方案
优点:
- 按需进行扩缩,百毫秒级的伸缩能力,适合数据量的脉冲峰谷变化。
- 不需要进行清洗环境的管理。
- 概念简单,学习成本低。
- 其它优点参考下图:
缺点:
- 函数计算是各个云厂商的产品。要求一定需要在云上运行。
弹性数据访问的能力
传统应用的方案
优点:
- 作为业务的一部分嵌在某个应用实现中,技术成熟,学习成本低。
缺点:
- 需要自实现根据业务请求量来进行弹缩处理,或者很多时候采用评估的方式进行资源冗余处理。
API Gateway+函数计算方案
优点:
- 根据客户的请求量实时进行弹缩处理。按需使用,不为高峰时段烦恼,不会闲置付费。
- 自动附带专业的访问监控大盘。
缺点:
- 需要少量的学习成本。
综述
在这个热力图信息收集清选与访问业务中,可以参考使用下图的解决方案完美实现。
重点接入步骤
MQTT到函数计算的介绍
请参考函数计算的微消息队列MQTT服务集成方案。
API网关通过函数计算提取数据的介绍
详情请参考API网关函数触发实例。
以Node.js为例:
module.exports.handler = function(event, context, callback) {
var event = JSON.parse(event);
var content = {
path: event.path,
method: event.method,
headers: event.headers,
queryParameters: event.queryParameters,
pathParameters: event.pathParameters,
body: event.body
// 您可以在这里编写您自己的逻辑。
// 从Redis提取数据的逻辑
}
var response = {
isBase64Encoded: false,
statusCode: '200',
headers: {
'x-custom-header': 'header value'
},
body: content
};
callback(null, response)
};
后注
在当前DT时代,各种脉冲数据上报的仪器非常多,例如新能源汽车的传感器,公交位置上报,智能物管的开锁,智慧停车场的车位管理,无人店铺的销售等等。在各类场景中,关于上报数据的处理无处不在,而以上提到的场景都可以通过本方案的MQTT+FC+API Gateway的方式参考优化来实现。
作者:折松,阿里云解决方案架构师
本文为阿里云原创内容,未经允许不得转载
使用MQTT与函数计算做热力图的实践的更多相关文章
- 使用函数计算三步实现深度学习 AI 推理在线服务
目前深度学习应用广发, 其中 AI 推理的在线服务是其中一个重要的可落地的应用场景.本文将为大家介绍使用函数计算部署深度学习 AI 推理的最佳实践, 其中包括使用 FUN 工具一键部署安装第三方依赖 ...
- 基于函数计算 + TensorFlow 的 Serverless AI 推理
前言概述 本文介绍了使用函数计算部署深度学习 AI 推理的最佳实践, 其中包括使用 FUN 工具一键部署安装第三方依赖.一键部署.本地调试以及压测评估, 全方位展现函数计算的开发敏捷特性.自动弹性伸缩 ...
- 开发函数计算的正确姿势 —— 使用 Fun Local 本地运行与调试
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...
- 从函数计算架构看 Serverless 的演进与思考
作者 | 杨皓然 阿里巴巴高级技术专家 导读:云计算之所以能够成为 DT 时代颠覆性力量,是因为其本质是打破传统架构模式.降低成本并简化体系结构,用全新的思维更好的满足了用户需求.而无服务器计算(S ...
- 一元建站-基于函数计算 + wordpress 构建 serverless 网站
前言 本文旨在通过 快速部署一个 wordpress 网站到阿里云函数计算平台 这个示例来展示 serverless web 新的开发模式, 包括 FUN 工具一键初始化 NAS, 同步网站到 NAS ...
- 函数计算: 让小程序开发进入 Serverless 时代
点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 吴天龙(木吴 ...
- 函数计算自动化运维实战 2 -- 事件触发 eip 自动转移
函数计算 阿里云函数计算是一个事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.函数计算会为您准备好计算资源,以弹性.可靠的方式运行您的代码,并提供日志查询,性能 ...
- 开发函数计算的正确姿势 —— 使用 ROS 进行资源编排
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...
- 荷畔微风 - 在函数计算FunctionCompute中使用WebAssembly
WebAssembly 是一种新的W3C规范,无需插件可以在所有现代浏览器中实现近乎原生代码的性能.同时由于 WebAssembly 运行在轻量级的沙箱虚拟机上,在安全.可移植性上比原生进程更加具备优 ...
- 阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破
1. 什么是 HTTPDNS ? 传统的 DNS(Domain Name System)使开发者常面临着域名劫持.调度不精准的问题. HTTPDNS 使用 HTTP 协议替换常用的 UDP 协议,完成 ...
随机推荐
- day01-数据库的安装和使用
Java数据库的安装和使用 1.数据库的作用 一个问题:淘宝网.京东.微信抖音,都有各自的功能,那么我们退出系统的时候,为什么信息还在? 解决之道-文件,数据库 为了解决上诉问题,使用更加利于管理数据 ...
- python基础笔记((1)
逻辑与或非用的是and or not. 除法即使整除结果也是浮点数 地板除//结果一定是整数. 内存中的字符串是Unicode编码,str.encode('utf-8 or ascii')将class ...
- 剖析云流送技术如何为3D应用带来用户使用便利
在过去的十年中,云游戏技术的发展为云计算行业带来了新的机遇.随着Google Stadia和GeForce Now之类的服务逐步向公众开放,云流送(cloud streaming)技术得到更大范围的应 ...
- MySQL(单表查询、多表查询、Navicat软件使用、查询练习、pymysql模块)
一 单表操作 表准备和注意事项 create table employee( id int not null unique auto_increment, name varchar(20) not n ...
- Csharp学习Linq
Linq的学习 这里继续使用之前文章创建的学生类,首先简单介绍一下linq的使用. Student.cs public class Student { public int Id { get; set ...
- 记录--7个Js async/await高级用法
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 7个Js async/await高级用法 JavaScript的异步编程已经从回调(Callback)演进到Promise,再到如今广泛使 ...
- C# Image 图片缩放 截取
从大图中截取一部分图片 /// <summary> /// 从大图中截取一部分图片 /// </summary> /// <param name="fromIm ...
- KingbaseES中查询对象大小的SQL及函数区别
--查看所有数据库大小 select sys_database.datname, sys_size_pretty(sys_database_size(sys_database.datname)) AS ...
- #线段树,欧拉函数#CF1114F Please, another Queries on Array?
题目 给一个长度为\(n\)的数组\(a\),\(q\)次询问 支持区间乘\(x\)以及求\(\varphi(\prod_{i=l}^ra_i)\) \(n\leq 4*10^5,q\leq 2*10 ...
- OpenGauss数据库对象属主变更后会自动调整对象权限吗?
OpenGauss 数据库对象属主变更后会自动调整对象权限吗? OpenGauss 数据库创建了数据库对象之后,可以使用 alter 命令修改对象的属主. 以表为例,修改属主的命令如下: ALTER ...