简介: 在各类场景中,关于上报数据的处理无处不在,而以上提到的场景都可以通过本方案的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与函数计算做热力图的实践的更多相关文章

  1. 使用函数计算三步实现深度学习 AI 推理在线服务

    目前深度学习应用广发, 其中 AI 推理的在线服务是其中一个重要的可落地的应用场景.本文将为大家介绍使用函数计算部署深度学习 AI 推理的最佳实践,  其中包括使用 FUN 工具一键部署安装第三方依赖 ...

  2. 基于函数计算 + TensorFlow 的 Serverless AI 推理

    前言概述 本文介绍了使用函数计算部署深度学习 AI 推理的最佳实践, 其中包括使用 FUN 工具一键部署安装第三方依赖.一键部署.本地调试以及压测评估, 全方位展现函数计算的开发敏捷特性.自动弹性伸缩 ...

  3. 开发函数计算的正确姿势 —— 使用 Fun Local 本地运行与调试

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...

  4. 从函数计算架构看 Serverless 的演进与思考

    作者 | 杨皓然  阿里巴巴高级技术专家 导读:云计算之所以能够成为 DT 时代颠覆性力量,是因为其本质是打破传统架构模式.降低成本并简化体系结构,用全新的思维更好的满足了用户需求.而无服务器计算(S ...

  5. 一元建站-基于函数计算 + wordpress 构建 serverless 网站

    前言 本文旨在通过 快速部署一个 wordpress 网站到阿里云函数计算平台 这个示例来展示 serverless web 新的开发模式, 包括 FUN 工具一键初始化 NAS, 同步网站到 NAS ...

  6. 函数计算: 让小程序开发进入 Serverless 时代

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 吴天龙(木吴 ...

  7. 函数计算自动化运维实战 2 -- 事件触发 eip 自动转移

    函数计算 阿里云函数计算是一个事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.函数计算会为您准备好计算资源,以弹性.可靠的方式运行您的代码,并提供日志查询,性能 ...

  8. 开发函数计算的正确姿势 —— 使用 ROS 进行资源编排

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...

  9. 荷畔微风 - 在函数计算FunctionCompute中使用WebAssembly

    WebAssembly 是一种新的W3C规范,无需插件可以在所有现代浏览器中实现近乎原生代码的性能.同时由于 WebAssembly 运行在轻量级的沙箱虚拟机上,在安全.可移植性上比原生进程更加具备优 ...

  10. 阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破

    1. 什么是 HTTPDNS ? 传统的 DNS(Domain Name System)使开发者常面临着域名劫持.调度不精准的问题. HTTPDNS 使用 HTTP 协议替换常用的 UDP 协议,完成 ...

随机推荐

  1. clickhouse 安装和远程登录开启

    一.Clickhouse的安装 1.添加yum源 yum-config-manager --add-repo http://repo.red-soft.biz/repos/clickhouse/rep ...

  2. Android 开发Day10

    这是main里面的所有代码,按版本修改过 AndroidManifest.xml <?xml version="1.0" encoding="utf-8" ...

  3. 使用Java给图片添加水印

    什么是水印呢?比如使用手机拍摄一张照片的时候,照片右下角的位置显示得有日期和时间信息,那就表示一个水印. 项目开发中给图片添加水印的操作很常见,比如给图片添加日期和时间,给图片添加公司的logo之类的 ...

  4. uni-app 应对微信小程序最新隐私协议接口要求的处理方法

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一,问题起因 最新在开发小程序的时候,调用微信小程序来获取用户信息的时候经常报错一个问题 fail api scope is not de ...

  5. JavaScript知识总结 终结篇--面向对象,垃圾回收与内存泄漏

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.面向对象 一般使用字面量的形式直接创建对象,但是这种创建方式对于创建大量相似对象的时候,会产生大量的重复代码.但 js和一般的面向对象 ...

  6. MVC架构设计浅析(WEB网页开发)

    MVC架构设计浅析 杨传伟 (石家庄铁道大学信息科学与技术学院,河北省,石家庄市,050043) 摘 要:本文以图书管理系统为案例(当前主流框架SpringMVC的原理来分析MVC的设计理念等),深入 ...

  7. #轮廓线dp,模型转换#洛谷 3226 [HNOI2012]集合选数

    题目 问有多少个集合 \(S\) 是 \([1,n]\) 的子集, 并且 \(\forall a,b\in S,a|b\),满足 \(\frac{b}{a}\neq \{2,3\}\) 分析 可以发现 ...

  8. #矩阵树定理,高斯消元#洛谷 4111 [HEOI2015]小 Z 的房间

    题目 分析 题目要求生成树个数,求出基尔霍夫矩阵后高斯消元, 但是这里模数不是质数,所以要辗转相除法 代码 #include <cstdio> #include <cctype> ...

  9. 学习如何使用 Python 连接 MongoDB: PyMongo 安装和基础操作教程

    Python 可以用于数据库应用程序.最流行的 NoSQL 数据库之一是 MongoDB MongoDB MongoDB 将数据存储在类似 JSON 的文档中,使数据库非常灵活和可扩展. 您可以在 M ...

  10. 《Spring 测试指南》:JPA、MockMvc 和 @SpringBootTest 详解

    测试 Spring 提供了一组测试工具,可以轻松地测试 Spring 应用程序的各个组件,包括控制器.服务.存储库和其他组件.它具有丰富的测试注释.实用程序类和其他功能,以帮助进行单元测试.集成测试等 ...