如何在1个小时之内轻松构建一个Serverless 实时数据分析平台

2019 年 11 月 19 日

如何在1个小时之内轻松构建一个Serverless 实时数据分析平台

数据分析平台,特别是实时数据分析,正在被越来越广泛的应用于各个行业。 举例来说,游戏公司在发布新游戏之后,需要实时定位用户的留存、增长等情况;快销公司需要精确地记录每一笔订单的情详情,并结合社交媒体,实时分析促销活动引起的用户购买行为与销量等等。基于这些需求, AWS 提供了一整套成熟的解决方案与服务,并且得到了广泛的应用。



图 1 AWS 大数据参考架构示例


上图中,Amazon Kinesis 是实时的流式分析服务,而 Amazon S3 是 AWS 的海量数据存储服务。利用 Kinesis 与 S3,我们可以十分方便的构建一个实时流式信息数据的采集与存储。 值得注意的是,作为 Serverless 计算服务的代表 , 用户只需要编写实现对应的 ETL 逻辑,Amazon Lambda 就可以非常方便地对 Kinesis 流式数据进行抽取与分析而不需要部署任何服务器。另外,用户也可以使用 Kinesis Firehose(Kinsis 服务之一)实现原始数据的直接注入与收集。


随着 Amazon Athena 在 AWS re:Invent 2016 的重磅发布,AWS 的大数据平台又增添了重要的一员!Amazon Athena 是一种交互式查询服务,用户可以使用标准 SQL 分析 Amazon S3 中的数据。因为 Athena 底层是基于 Serverless(无服务器)架构,用户不需要运维底层的服务器,并且查询处理能力会随着用户的数据将进行自适应与扩展,实现秒级别的数据查询与处理。


闲话少说,我们将利用 AWS 提供的三个重要服务——Amazon Kinesis Firehose,、Lambda 和 Athena 在 1 个小时之内实现一套实时分析的 Serverless 数据分析平台!


准备好了吗?Let’s rock


1.数据源。作为测试,我们将对 AWS VPC Flow Logs 进行分析。您可以使用 Kinesis Agent/Flume/Fluentd 或者 Amazon Kinesis SDK 对前端的实时日志进行分析。Amazon VPC Flow Logs 将实时记录 VPC 监控的网络端口的流量与通信日志,并将日志发布于 AWS CloudWatch Logs。详细的配置请参见 https://aws.amazon.com/cn/blogs/aws/vpc-flow-logs-log-and-view-network-traffic-flows/


2.数据 ETL。VPC Flow Logs 进入 CloudWatch Logs 之后,可以利用 Lambda 对实时日志进行订阅处理。订阅之后,Lambda 会在 CloudWatch Logs 更新之后,自动调用执行,进行数据 ETL。


首先,在控制台创建一个 Lambda 函数(利用 Python 实现).为了确保 Lambda 有对应的执行权限,需要赋予 Lambda 函数相应的 Permission Role.在这个示例中,我们只需要服务 Lambda 对应的 CloudWatch Logs 以及 Kinesis Firehose 的权限即可。


其次,Lambda 代码会对进入的 CloudWatch 日志的第一个 Base64 编码的转码并进行 gzip 解压(因为 Cloudwatch Logs 会对送往 Lambda 首先进行 Base64 编码并进行 gzip 压缩)。之后,Lambda 会对具体的日志进行汇聚,以 batch 的方式发送给 Kinesis Firehose。具体的代码如下:



代码中,利用环境变量 DELIVER_STREAM_NAME 传递 Kinesis Firehose Stream,详见步骤 3)。


最后,利用 AWS CloudWatch logs 的订阅功能,就可以实时地把日志发布到 Lambda 函数中了。


aws logs put-subscription-filter \


--log-group-name myLogGroup \


--filter-name demo \


--filter-pattern "" \


--destination-arn arn:aws:lambda:us-east-1:123456789123:function:helloworld\


具体的配置过程可以参考 http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/logs/Subscriptions.html


3.创建 Kinesis Fireshose 实现到 S3 的数据自动存储与汇聚。Kinesis Firehose 提供了自动对数据进行汇聚,目前支持 S3 和 Redshift, ElastiSearh。这里,我们利用控制台,十分简单地创建了如下一个 Firehose Stream:



图 2 Kinesis Firehose 配置过程


4.利用 Amazon Athena 进行数据查询。因为 Athena 底层是基于 Hive Catalog 对 S3 数据进行管理,上层基于 Presto 的方式进行 SQL 查询。因此我们首先需要使用 Hive 对 S3 的 VPC Flow Logs 进行外表 DDL 操作。具体代码如下:



我们在创建表的过程中,创建了 Year,Month, Day 与 Hour 的分区,是因为我们在实现 Firehose 的时候自动进行了时间和日期的前缀设置。同时,利用分区也可以大大提高 hive 的数据查询性能。


到这里,整个 Serverless 处理能力自适应的架构已经构建完成,来测试一下 Athena 的查询结果吧。 Athena 提供了 Web Console 让 BI 用户可以直接对 S3 数据湖进行查询,同时,用户也可以利用 JDBC 直接与第三方的 BI 工具集成实现自动化查询。查询结果也可以利用 CSV 的文件下载的方式直接分享给其他用户。



图 3 利用 Web Console 对 Athena 进行数据分析


作者介绍:



肖凌


AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内和全球的应用和推广,在大规模并发后台架构、跨境电商应用、社交媒体分享 、Hadoop 大数据架构以及数据仓库等方面有着广泛的设计和实践经验。在加入 AWS 之前曾长期从事移动端嵌入式系统开发,IBM 服务器开发工程师。并负责 IBM 亚太地区企业级高端存储产品支持团队,对基于企业存储应用的高可用存储架构和方案有深入的研究。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/serverless-anylatics-platform-one-hour/


2019 年 11 月 19 日 08:00168

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

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

「架构师训练营第 1 期」第一周作业

张国荣

极客大学架构师训练营

架构师训练营 - week1 - 食堂就餐系统设计

month

极客大学架构师训练营

第一周学习总结

mm马

极客大学架构师训练营

week1总结

willson

架构一期-甘霖-Week1-食堂卡系统设计

小粽

第一周学习笔记及uml设计

橘子皮嚼着不脆

第一周总结

积极&丧

第一周作业

kevin

极客大学架构师训练营

第一周课后练习 - 作业 1

致星海

第1周内容总结

paul

架构师训练营第1期-Week1 架构方法学习总结

鲁小鲁

软件工程 极客大学架构师训练营 UML 架构方法

架构训练营1期-第1周练习

balsamspear

极客大学架构师训练营 第一周命题作业

架构师训练营第1期-Week1-食堂就餐卡系统设计

鲁小鲁

极客大学架构师训练营 食堂就餐卡系统设计

week12--课后作业

Geek_165f3d

架构师训练营第一周学习笔记

一马行千里

学习 极客大学架构师训练营

食堂就餐卡系统设计

积极&丧

架构师训练营第1周课后练习

叶纪想

极客大学架构师训练营

架构师训练营第一章作业二 - 学习总结

zenfery

极客大学架构师训练营

架构师一期二班-吴水金-第一课总结

吴水金

学习

关于软件建模语言UML总结

solike

极客大学架构师训练营

架构师训练营第 1 期-week1-食堂就餐卡系统设计

习习

第一周课后练习 - 作业2

致星海

第一周作业

极客大学架构师训练营

架构师训练营第一周心得

CmHuang

架构师训练营作业:第一周

m

作业-食堂就餐卡系统设计

solike

极客大学架构师训练营

为什么开发工程师要架构图

Bear在挨踢

极客大学架构师训练营

Python 之父为什么嫌弃 lambda 匿名函数?

Python猫

Python 学习 编程

架构师训练营第一期作业

sean

架构师第一期作业2

sean

第一周学习总结

kevin

如何在1个小时之内轻松构建一个Serverless 实时数据分析平台-InfoQ