微前端架构如何改变企业的开发模式与效率提升
621
2022-10-18
[云框架]SMACK大数据架构-用户指南
[云框架]SMACK大数据架构
SMACK并非单一技术,而是由Spark、Mesos、Akka、Cassandra、Kafka组成的大数据架构,适用于广泛的数据处理场景,可完成低延迟扩展及数据复制、统一管理异构负载集群,并通过单一平台满足不同架构设计和不同应用的需求。(A Brief History of the SMACK Stack)主要特点如下:
架构灵活多变 | 每个组件都可以集群化部署;组件之间可以自由组合;可随意对架构进行无中断升级 |
支持数据管道 | 数据以数据流的形式进行流转;上一个组件的输出等于下一个组件的输入 |
多种模式数据处理 | 支持秒级流式处理;支持批处理 |
多种方式数据接入 | 支持文件、消息、http请求等方式的数据采集 |
系统可交互 | 可以与系统进行实时交互,提供REST API |
部署简单 | 以二进制方式部署;以容器化方式部署 |
在面对数据源数量急剧增加、数据样本获取难度升高、数据分析时效性差、数据分析投资回报率低等一系列挑战时,SMACK可以解决Hadoop等熟知技术无法解决的诸多问题,特别是物联网化、API化趋势下big data向fast data转变所带来的新需求,以及大数据处理对于Data Pipeline的依赖。
我们可以把SMACK看作是一种框架组合思想,其中技术可以增加或被更适合的技术替代,以便我们更好的完成大数据处理。本篇云框架即在引擎层增加了Flink用于处理实时数据,使用Kubernetes替换Mesos作为容器层,以某网站数据为例,提供SMACK大数据框架的最佳实践,包括SMACK、数据接入、数据展示在内的完整框架,适合以下应用场景:
实时计算时间窗口分析应用日志分析项目风控管理智能预测实时推荐
在学习和使用SMACK业务和框架之前,建议先行了解Fast Data、Data Pipeline、Lambda Architecture等相关背景说明,这三点可以说是SMACK的灵魂,也是选择使用SMACK的重要原因。
内容概览
快速部署一键部署本地部署 框架说明-业务框架说明-组件SMACK数据接入数据展示 更新计划社群贡献
快速部署
一键部署
一键部署至好雨云帮
本地部署
最小环境要求:4 CPUs & 8GB Memory
准备Docker环境,并为Docker分配至少4 CPUs
& 8GB Memory
克隆完整代码
git clone https://github.com/cloudframeworks-smack/user-guide-smack.git
使用docker-compose运行如下命令(docker-compose.yml)
docker-compose -f docker-compose.yml up -d
访问路径
访问 | 路径 | 方法 | 参数 |
---|---|---|---|
最近10条日志 | http://DOCKER_HOST:9091/msg/data/nginx_log/test/test/1/10 | GET | |
最新状态统计信息 | http://DOCKER_HOST:9091/msg/data/status_real_statics/test/test/1/10 | GET | |
最新请求统计信息 | http://DOCKER_HOST:9091/msg/data/request_real_statics/test/test/1/10 | GET | |
历史统计信息 | http://DOCKER_HOST:9090/msg/push/statics | POST | 见下方 |
POST请求参数
namespace:test serviceName:test start_time:2017-06-01 01:00:18 end_time:2017-07-22 01:25:10 cmd:uv|pv|avgtime time_type:day|hour|minute
框架说明-业务
某网站需对其nginx日志进行实时数据和历史数据进行分析统计,实时数据包括——
过去15s中的请求数及每个请求的平均响应时间过去15s中各网站访问状态(3xx、4xx、5xx)出现频率过去某时间段中网站访问PV(天/小时/分钟统计)
历史数据包括——
过去某时间段中网站访问UV(以IP地址进行唯一性判断,天/小时/分钟统计)过去某时间段中请求总数、总时间、最大响应时间、最小响应时间(天/小时/分钟统计)
业务架构如下图所示:
框架说明-组件
SMACK
本项目中SMACK用到了Spark、Flink、Kubernetes、Akka、Cassandra、Kafka,这一组合在技术成熟度、易用性、组合自由性、自动化程度上极具优势。对于数据的实时处理能力是该组合取代Hadoop的重要原因,在Spark基础上增加Flink而不是完全取代Spark的原因则是,Flink处理数据可达秒级(Spark为分钟级),但Spark在数据批处理成熟度上目前整体要强于Flink。
组件 | 功能/任务 | 组件 | 功能/任务 |
---|---|---|---|
File System | nginx日志路径 | Cassandra | 数据持久化 |
Akka-Http | 数据增强、数据再处理、restful api接口 | Spark | 历史数据批处理 |
Kafka | 消息队列 | InfluxDb | 实时数据统计后汇总的地方 |
Flink | 消息流式处理 | Grafana | 整合InfluxDb进行数据展示 |
SMACK整体结构如下图所示:
File System向用户提供底层数据访问机制,即nigix日志存放目录Akka-http从File system加载日志,进行数据增强、数据再处理,并向外部访问提供REST API接口数据通过Akka消息队列处理后,由Kafka执行消息传输Flink利用窗口CP机制对数据进行流式处理及实时状态统计经过Flink处理的非统计信息将被存储至Cassandra经过Flink处理的统计信息将被存储至InfluxDB(用来储存实时数据的数据库)Spark从Cassandra获取数据,进行历史数据的批量分析数据通过Grafana(或其他可视化工具)进行展示
查看SMACK源码
SMACK涉及技术要点概览
批处理引擎-Spark
实时处理引擎-Flink
容器-Kubernetes
模型-Akka
存储-Cassandra
消息队列-Kafka
数据接入
准备访问日志并命名为log.log
此处注意,使用本项目需对日志格式进行调整,典型日志结构如下所示:
172.10.36.32 - - [08/Jun/2017:16:36:46 +0800] "GET /winprize/index?id=aafe-uuawef--afewa HTTP/1.1" 200 2215 "-" "-" "172.11.161.17, 172.10.226.13, 10.208.26.230" 938 0.004 172.11.6.9:10055 172.10.36.62 - - [08/Jun/2017:16:37:43 +0800] "GET /index HTTP/1.1" 200 56 "-" "-" "172.11.137.181, 172.10.226.14, 10.208.26.226" 947 0.001 172.11.30.144:10055 172.10.37.46 - - [08/Jun/2017:16:37:43 +0800] "GET /prize/index HTTP/1.1" 200 56 "-" "-" "172.11.97.82, 172.10.226.11, 10.208.26.234" 952 0.001 172.11.6.9:10055 172.10.36.46 - - [08/Jun/2017:16:37:43 +0800] "GET /prize/rank?r=latest HTTP/1.1" 200 54 "-" "-" "172.11.152.137, 172.10.230.13, 10.208.26.241" 1208 0.001 172.11.9.81:10055 172.10.37.46 - - [08/Jun/2017:16:36:44 +0800] "GET /prize/rank?r=latest HTTP/1.1" 200 2221 "-" "-" "172.11.97.56, 172.10.226.11, 10.208.26.228" 955 0.003 172.11.14.209:10055 172.10.36.67 - - [08/Jun/2017:16:36:44 +0800] "GET /index HTTP/1.1" 500 2299 "-" "-" "172.11.152.140, 172.10.230.191, 10.208.26.243" 1024 0.003 172.11.2.194:10055 172.10.36.32 - - [08/Jun/2017:16:36:46 +0800] "GET /winprize/index?id=aafe-uuawef--afewaaa HTTP/1.1" 404 56 "-" "-" "172.11.161.17, 172.10.230.12, 10.208.26.241" 997 0.001 172.11.23.140:10055 172.10.36.32 - - [08/Jun/2017:16:37:43 +0800] "GET /prize/index HTTP/1.1" 200 56 "-" "-" "172.10.36.34, 172.10.226.13, 10.208.26.235" 946 0.002 172.11.2.194:10055 172.10.36.32 - - [08/Jun/2017:16:36:47 +0800] "GET /prize/index HTTP/1.1" 200 56 "-" "-" "172.11.97.88, 172.10.226.13, 10.208.26.229" 1294 0.002 172.11.23.140:10055
字段 | 表示 | 字段 | 表示 |
---|---|---|---|
remoteAddr | -----IP地址 | httpReferer | -----refer |
remoteUser | -----用户 | httpUserAgent | -----ua |
timeLocal | -----服务时间 | httpXForwardedFor | -----refer |
request | -----请求地址 | requestLength | -----请求长度 |
status | -----请求状态 | upstreamResponseTime | ------响应时间 |
bodySize | ----内容大小 | upstreamAddr | -----响应地址 |
查看实例日志
确保数据格式正确,可通过正则表达式验证
reg=`(\d+.\d+.\d+.\d+)\s-\s(.*)\s\[(.+)\]\s\"(.*)\"\s(\d{3,})\s(\d+)\s\"(.*)\"\s\"(.*)\"\s\"(.*?)\"\s(.*)\s(.*)\s(.*)$`
修改docker-compose.yml文件,找到akka-instream
并添加
volumes: - 你本地日志所在目录:/opt/akka/data/
数据展示
本项目未封装数据展示组件,可使用Grafana或接入其他可视化工具。
使用Grafana步骤如下:
-Grafana镜像 docker pull grafana/grafana -并解压Grafana初始化数据(实例日志)到/tmp目录(该目录可根据业务实际情况进行自定义,注意相应修改下一步骤中的挂载目录/tmp/grafana:/var/lib/grafana) 执行命令 docker run -d -v /tmp/grafana:/var/lib/grafana --publish 3000:3000 grafana/grafana 登陆访问数据展示界面 http://DOCKER_HOST:3000/login ---(默认账号密码:admin/admin) 或直接访问数据展示界面 http://DOCKER_HOST:3000/dashboard/db/data_statics?refresh=5s&orgId=1
更新计划
CODE 完善数据展示界面CODE 完善集群部署支持
社群贡献
QQ群: 614186010参与贡献联系我们
云框架系列主题,遵循APACHE LICENSE 2.0协议发布。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~