1、架构设计 & 业务关系
- 业务关注点:在于DA层
- 技术难点:在于PaaS层
1.1、PaaS层 :基础设施层
- 数据采集:flume、sqoop、datax、flinkcdc、canel
- 数据计算:MR、Spark、flink
- 数据存储:HDFS、Hbase、TIDB、Mysql…
1.2、DaaS层:数仓层
主要包括DW、DM层
1.3、DA层:BI可视化 & 数据应用
主要是BI可视化、AI应用、用户画像、推荐系统方面的应用
2、架构演进
- 架构演进主要分为三阶段:根据上述业务关注点、技术难易程度,以及以下的适用场景决定架构选型
2.1、第一阶段
- 适用场景:公司从0-1,数据量GB级
- 技术架构选型:shell主导一切
- PaaS层:shell主导一切
- DaaS层:无,即没有数据仓库、数据集市
- DA层:无可视化,邮件发送报表
2.2、第二阶段
- 适用场景:公司从1-10,数据量TB级别
- 技术架构选型:共建Hadoop生态分层
- PaaS层:共用集团PaaS层或者云平台
- DaaS层:自建数据仓库、数据集市
- DA层:BI可视化 - 仅限于PC端
2.3、第三阶段
- 适用场景:公司从10-100,数据量PB级别
- 技术架构选型:自建Hadoop生态分层
- PaaS层:各个BU自建自己的Hadoop生态分层
- DaaS层:自建全域数据仓库、通用数据集市
- DA层:共建BI可视化 - 包括PC端、APP端…
2.4、第二阶段 VS 第三阶段
①PaaS层 - 共建 VS 自建
- 共建:部门使用集团的集群:所有的都是集团,包括机器、网络、机房等;
- 自建:部门使用自己的集群:机器是自己的,网络 & 机房还是共建的;
②DaaS层 - 自建 VS 自建全域
- 自建:业务不可在其之上定制私有业务集市。
- 自建全域:公司通用数据放在数据仓库,数据集市,业务同学可以再其之上建设自己的私有业务数据集市。
③DA层:可视化BI平台 VS 多端可视化业务共建BI平台
- 可视化BI:即简单的PC端
- 多端可视化共建:多端指PC端、APP端等,业务共建指业务可以通过拖拉拽方式建设自己想要的报表。
3、中台分层架构设计
- 设计哲学:耦合系统=业务领域(DA层)垂直拆分 + 请求生命周期(DaaS)水平拆分。
- 核心逻辑:
- ①业务数据化:数据来源于业务,用来建设数据仓库
- ②数据服务化:如Hive Service将hive表作为一个服务的数据支撑
- ③服务业务化:如Hive Service将hive表作为一个服务的数据支撑,之后可支撑多个业务系统
3.1、PaaS层 (Platform-as-a-service)
- 数据采集层:Flume、Sqoop、DataX、Kafka
- 数据存储层:HDFS、Hive、Hbase、Mysql、TiDB、Redis
- 数据计算层:MapReduce、Spark、Storm、Flink、Kylin、Druid
3.2、(2)DaaS层(Data-as-a-Service)
- 源数据层:前段埋点、后端日志、业务数据库、爬虫数据
- 数据仓库层:用户宽表、商品宽表、交易宽表、收入宽表、行为宽表
- 数据集市层:留存模型主题表、事件模型主题表、生命周期管理、实时自主框架
3.3、SaaS层(Software-as-a-Service)
- 数据访问:Hive Service 、Hbase Service等服务
3.4、DA层(数据应用层)
- BI报表:渠道分析、商品分析、交易分析、用户分析、行为分析
- 数据产品:只能挖掘、自助报表、事件漏斗、数据地图
- 应用治理:指标字典、血缘关系、
- 业务系统:搜索推荐、运营系统、财务系统
4、数据处理流程设计
(1)数据抽取:日志文件采集和传输、数据导入
- 日志文件采集:flume
- 业务数据采集:Sqoop、DataX
(2)数据存储:文件存储、KeyValue型数据存储、基于行的存储、基于列的存储
-
文件存储:HDFS
-
KV存储:Redis
-
行的存储:Hive
-
列的存储:Hbase
(3)数据处理:对原始数据进行清洗、转换,并存为结构化数据
(4)数据仓库构建:分层构建,分为DS/DW/DM/DA层
(5)数据分析挖掘:统计分析,数据挖掘
(6)数据可视化:报表可视化
5、任务开发流程设计
(1)实时流
- 数据存储:Hbase、Clickhouse
- 数据计算:Fink、SparkStream
(2)离线流
- 数据存储:Hive
- 数据计算:MR/Spark SQL
6、同步架构 VS 异步架构
- 问题:从架构模式来分析,中台分层架构是同步架构 还是异步架构?为什么?什么样的场景需要同步架构?什么场景需要异步架构?
6.1、同步架构
- 同步架构:是指从请求的发起一直到最终的处理完成期间,请求的调用方一直在同步阻塞等待调用的处理完成。
①同步 - 单线程:任务挨个执行。每个任务需要等待前一个任务执行完毕。
②同步 - 多线程: 每个任务在不同线程中执行,但需要等待前置任务的完成
6.2、异步架构
- 异步架构:是指在请求发起的处理过程中,客户端的代码已经返回了,它可以继续进行自己的后续操作,而不需要等待调用处理完成,这就叫做异步调用。
①异步 - 单线程:任务执行不需要等待其他任务的完成。但在一个时间点只能有一个任务执行。
②异步 - 多线程:任务执行不需要等待其他任务的完成。但在同一个时间点可以有多个任务执行。