系统架构设计高级技能 · 大数据架构设计理论与实践
系列文章目录
系统架构设计高级技能 · 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】
系统架构设计高级技能 · 系统质量属性与架构评估(二)【系统架构设计师】
系统架构设计高级技能 · 软件可靠性分析与设计(三)【系统架构设计师】
现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。
Now everything is for the future of dream weaving wings, let the dream fly in reality.
系统架构设计高级技能 · 大数据架构设计理论与实践
- 系列文章目录
- 一、传统数据处理系统的问题
- 1.1 传统数据库的数据过载问题
- 1.2 大数据的特点
- 1.3 大数据的利用过程
- 二、大数据处理系统架构分析
- 2.1 大数据处理系统面临的挑战
- 2.2 大数据处理系统的特征
- 三、典型的大数据架构
- 2.1 Lambda架构
- 2.2 Kappa架构
- 2.3 Lambda架构与Kappa架构对比
- 四、大数据架构的实践
- 4.1 大规模视频网络
- 4.2 广告平台
- 4.3 电商智能决策大数据系统

一、传统数据处理系统的问题
1.1 传统数据库的数据过载问题
传统应用的数据系统架构设计时,应用直接访问数据库系统。当用户访问量增加时,数据库无法支撑日益增长的用户请求的负载,从而导致数据库服务器无法及时响应用户请求,出现超时的错误。
关于这个问题的常用解决方法如下:
(1)增加异步处理队列
(2)建立数据库水平分区
(3)建立数据库分片或重新分片
(4)引入读写分离技术
(5)引入分库分表技术
1.2 大数据的特点
大数据具有体量大、失效性强的特点,并非构造单调,二是类型多样;处理大数据时,传统数据处理系统因数据过载,来源复杂,类型多样等诸多原因性能低下,需要采用以新式计算架构和智能算法为代表的新技术;大数据的应用重在发掘数据间的相关性,而非传统逻辑上的因果关系;因此,大数据的目的和价值就在于发现新的知识,洞悉并进行科学决策。
现代大数据处理技术,主要分为以下几种:
(1)基于分布式文件系统Hadoop。
(2)使用Map/Reduce或Spark数据处理技术。
(3)使用Kafaka数据传输消息队列及Avro二进制格式。
1.3 大数据的利用过程
大数据的利用过程分为:采集、清洗、统计和挖掘 4个过程。
二、大数据处理系统架构分析
2.1 大数据处理系统面临的挑战
大数据处理系统面临的挑战主要有:
(1)如何利用信息技术等手段处理非结构化和半结构化数据。
(2)如何探索大数据的复杂性、不确定性特征描述的刻画方法及大数据的系统建模。
(3)数据异构性与决策异构性的关系对大数据知识发现与管理决策的影响。
2.2 大数据处理系统的特征
大数据处理系统应具有的属性和特征包括:
鲁棒性和容错性、低延迟性、横向扩展(通过增强机器性能扩展)、通用、可扩展、即席查询(用户按照自己的要求进行查询)、最少维护和可调试。
三、典型的大数据架构
2.1 Lambda架构
Lambda架构是一种用于同时处理离线和实时数据的、可容错性、可扩展性的分布式系统。
如图,Lambda架构:

Lambda架构分为以下3层:
(1)批处理层 (Batch Layer):存储数据集, 该层核心功能是存储主数据集,Batch Layer在数据集上预先计算查询函数,并构建查询所对应的View。Batch Layer可以很好地处理离线数据,但有很多场景数据是不断实时生成且需要实时查询处理,对于这种情况, Speed Layer更为适合。
(2)加速层 (Speed Layer):Batch Layer处理的是全体数据集,该层核心功能是处理增量实时数据,而 Speed Layer处理的是最近的增量数据流。 Speed Layer 为了效率,在接收到新的数据后会不断更新Real-time View, 而Batch Layer 是根据全体离线数据集直接得到Batch View。
(3)服务层 (Serving Layer):该层核心功能是响应用户请求,Serving Layer用于合并Batch View和 Real-time View中的结果数据集到最终数据集。
Lambda架构优缺点:
优点
(1)容错性好。 Lambda 架构为大数据系统提供了更友好的容错能力,一旦发生错误,我们
可以修复算法或从头开始重新计算视图。
(2)查询灵活度高。批处理层允许针对任何数据进行临时查询。
(3)易伸缩。所有的批处理层、加速层和服务层都很容易扩展。因为它们都是完全分布式
的系统,我们可以通过增加新机器来轻松地扩大规模。
(4)易扩展。添加视图是容易的,只是给主数据集添加几个新的函数。
缺点
(1)全场景覆盖带来的编码开销。
(2)针对具体场景重新离线训练一遍益
2.2 Kappa架构
Kappa架构是在Lamada架构的基础上进行了优化、删除了Batch Layer的架构,将数据通道以消息队列进行替代。

从使用场景上来看, Kappa架构与Lambda相比,主要有两点区别:
(1)Kappa不是 Lambda的替代架构,而是其简化版本, Kappa放弃了对批处理的支持,更擅长业务本身为增量数据写入场景的分析需求,例如各种时序数据场景,天然存在时间窗口的概念,流式计算直接满足其实时计算和历史补偿任务需求;
(2)Lambda直接支持批处理,因此更适合对历史数据分析查询的场景,比如数据分析师需要按任意条件组合对历史数据进行探索性的分析,并且有一定的实时性需求,期望尽快得到分析结果,批处理可以更直接高效地满足这些需求。
Kappa架构的优点在于将实时和离线代码统一起来,方便维护而且统一了数据口径的问题,避免了 Lambda架构中与离线数据合并的问题,查询历史数据的时候只需要重放存储的历史数据即可。
而Kappa的缺点也很明显:
(1)消息中间件缓存的数据量和回溯数据有性能瓶颈。通常算法需要过去180天的数据,如果都存在消息中间件,无疑有非常大的压力。同时,一次性回溯订正180天级别的数据,对实时计算的资源消耗也非常大。
(2)在实时数据处理时,遇到大量不同的实时流进行关联时,非常依赖实时计算系统的能力,很可能因为数据流先后顺序问题,导致数据丢失。
(3)Kappa 在抛弃了离线数据处理模块的时候,同时抛弃了离线计算更加稳定可靠的特点。Lambda虽然保证了离线计算的稳定性,但双系统的维护成本高且两套代码带来后期运维困难。对于以上Kappa框架存在的几个问题,目前也存在一些解决方案,对于消息队列缓存数据性能的问题, Kappa+框架提出使用 HDFS来存储中间数据。针对 Kappa框架展示层能力不足的问题,也有人提出了混合分析系统的解决方案。
2.3 Lambda架构与Kappa架构对比
Lambda架构和Kappa 架构对比
| 对比内容 | Lambda架构 | Kappa架构 |
|---|---|---|
| 复杂度与开发、维护成本 | 需要维护两套系统(引擎),复杂度 高,开发、维护成本高 | 只需要维护一套系统(引擎),复杂度低,开发、维护成本低 |
| 计算开销 | 需要一直运行批处理和实时计算,计算开销大 | 必要时进行全量计算,计算开销相对较小 |
| 实时性 | 满足实时性 | 满足实时性 |
| 历史数据处理能力 | 批式全量处理,吞吐量大,历史据处理能力强 | 流式全量处理,吞吐量相对较低,历史数据处理能力相对较弱 |
Lambda架构与Kappa架构的设计选择
根据两种架构对比分析,将业务需求、技术要求、系统复杂度、开发维护成本和历史数据处理能力作为选择考虑因素。而计算开销虽然存在一定差别,但是相差不是很大,所以不作为考虑因素。
(1)业务需求与技术要求
用户需要根据自己的业务需求来选择架构,如果业务对于 Hadoop、Spark、Strom 等关键技术有强制性依赖,选择 Lambda架构可能较为合适;如果处理数据偏好于流式计算,又依赖Flink计算引擎,那么选择Kappa架构可能更为合适。
(2)复杂度
如果项目中需要频繁地对算法模型参数进行修改, Lambda架构需要反复修改两套代码,则显然不如 Kappa架构简单方便。同时,如果算法模型支持同时执行批处理和流式计算,或者希望用一份代码进行数据处理,那么可以选择Kappa 架构。在某些复杂的案例中,其实时处理和离线处理的结果不能统一,比如某些机器学习的预测模型,需要先通过离线批处理得到训练模型,再交由实时流式处理进行验证测试,那么这种情况下,批处理层和流处理层不能进行合并,因此应该选择Lambda架构。
(3)开发维护成本
Lambda架构需要有一定程度的开发维护成本,包括两套系统的开发、部署、测试、维护,适合有足够经济、技术和人力资源的开发者。而Kappa 架构只需要维护一套系统,适合不希望在开发维护上投入过多成本的开发者。
(4)历史数据处理能力
有些情况下,项目会频繁接触海量数据集进行分析,比如过往十年内的地区降水数据等,这种数据适合批处理系统进行分析,应该选择Lambda架构。如果始终使用小规模数据集,流处理系统完全可以使用,则应该选择Kappa架构。
四、大数据架构的实践
4.1 大规模视频网络
如图,某网奥运中的Lambda架构:

4.2 广告平台
如图,某网广告平台中的Lambda架构:

如图,某证券大数据系统架构:

4.3 电商智能决策大数据系统
如图,某电商智能决策大数据系统架构:

相关文章:
系统架构设计高级技能 · 大数据架构设计理论与实践
系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估(二)【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…...
ubuntu上使用osg3.2+osgearth2.9
一、介绍 在ubuntu上使用osgearth加载三维数字地球,首先要有osg和osgearth的库,这些可以直接使用apt-get下载安装,但是版本有些老,如果需要新版本的就需要自己编译。 #查看现有版本 sudo apt-cache madison openscenegraph #安装…...
C语言巧妙打印64位整数
使用C语言打印64位整数时,如果用的是32位编译器,那么打印如下, int64_t data 0x1234567890123456; printf("0x%llx\n", data);如果是64位编译器,那么打印代码如下, int64_t data 0x1234567890123456; pr…...
c语言每日一练(11)
前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…...
SLAM十四讲学习笔记 第二期:部分课后实践代码
持续更新.... 前期准备第二讲实验一:简单输出 第五讲任务一:imageBasics(Ubuntu配置opencv)任务二:双目匹配点云(Ubuntu配置pangolin)检验部分我认为可以加深对CMake的理解 任务三:r…...
Android kotlin 跳转手机热点开关页面和判断热点是否打开
Android kotlin 跳转手机热点开关页面和判断热点是否打开 判断热点是否打开跳转手机热点开关页面顺带介绍一些其他常用的设置页面跳转 其他热点的一些相关知识Local-only hotspot 参考 判断热点是否打开 网上方法比较多,我这边使用了通过WifiManager 拿反射的getWi…...
Redis 执行 RDB 快照期间,主进程可以正常处理命令吗?
执行了 save 命令,会在主进程生成 RDB 文件,由于和执行操作命令在同一个线程,所以如果写入 RDB 文件的时间太长,会阻塞主进程。 执行 bgsave 过程中,由于是交给子进程来构建 RDB 文件,主进程还是可以继续工…...
Python加入Excel--生产力大提高|微软的全方面办公
Python作为一种功能强大的编程语言,已经逐渐成为了数据分析、机器学习、Web开发等领域的主流语言之一。而将Python集成到Excel中,则可以为Excel用户提供更加强大的数据处理和分析能力,同时也可以为Python开发者提供更加便捷的数据处理和可视化…...
Excel 分组排名
分组排名 公式:SUMPRODUCT((A:AA2)*(C:C>C2)) 1 降序:> 改为 < ⚠️注意1:此处空值参与排名;不参与排名则公式改为:IF(C2“”,“”,SUMPRODUCT((A:AA2)*(C:C>C2)) 1) ⚠️注意2:相同值的项…...
Redis初始以及安装
"梦却了无影踪,梦仍不曾改动" 初始Redis (1) Redis是什么? 要认识、学习一个软件,最重要的途径无一是去该软件的官方文档里瞅瞅、转悠转悠。 从官方文档的介绍中得知,Redis是一种工作于内存,…...
react导出、导入文件
导出文件: if (res) {let binaryData [];binaryData.push(res);let blobUrl ;blobUrl res;// let blobUrl window.URL.createObjectURL(new Blob(binaryData, { type: application / zip }));console.log(blobUrl);const eleLink document.createElement(a);el…...
(一)Redis——String
以下是在Ubuntu上安装Redis的步骤: 打开终端并输入以下命令以更新软件包列表:sudo apt update输入以下命令以安装Redis:sudo apt install redis-server SET key value GET key key & value 区分大小写 127.0.0.1:6379> set name no…...
Spring Boot多环境指定yml或者properties
Spring Boot多环境指定yml或者properties 文章目录 Spring Boot多环境指定yml或者properties加载顺序配置指定某个yml 加载顺序 ● application-local.properties ● application.properties ● application-local.yml ● application.yml application.propertes server.port…...
MinDoc:针对IT团队的文档、笔记系统
作为一名IT从业者,无论是在公司团队中,还是在平时自己写一些笔记、博客等文档,我都习惯使用markdown来进行书写。在使用过许多支持markdown语法的系统或软件(如Typora、未知、我来、思源、觅道等)后,我总觉…...
【分享】华为设备登录安全配置案例
微思网络www.xmws.cn,2002年成立,专业IT认证培训21年,面向全国招生! 微 信 号 咨 询: xmws-IT 华为HCIA试听课程:超级实用,华为VRP系统文件详解【视频教学】华为VRP系统文件详解 华为HCIA试听课…...
Starrocks与MySQL函数的区别
Starrocks与MySQL函数的区别 Starrocks是一款分布式OLAP数据库,而MySQL则是一种关系型数据库。由于其不同的架构和用途,它们在支持的函数方面存在一些差异。下面将详细介绍Starrocks和MySQL之间常见函数的区别。 1. 聚合函数(Aggregate Fun…...
【HTML】学习笔记(自用持续更新)
HTML基本框架 只定义信息,通过标签组成整个页面框架,再通过CSS渲染使得前端页面做的好看 <!DOCTYPE HTML> \\html类型 <html><body><h1>这是一个标题</h1><p>这是一段文字</p></body> </html> …...
代码随想录训练营第四十二天|0-1背包理论基础(一)、0-1背包理论基础(二)、416分割等和子集
0-1背包理论基础(一) 文章讲解/视频链接:代码随想录 小节:本节课讲得是0-1背包的二维数组解法,dp[i][j]的含义是从物品0-i中不重复的拿出可以装进容量为j的背包的最大价值的物品,状态转移公式为,dp[i][j] max(dp[i - …...
linux 免交互
Linux 免交互 1、免交互概念2、基本免交互的例子2.1命令行免交互统计2.2使用脚本免交互统计2.3使用免交互命令打印2.4免交互修改密码2.5重定向查看2.6重定向到指定文件2.7重定向直接指定文件2.8使用脚本完成重定向输入2.9免交互脚本完成赋值变量2.10关闭变量替换功能࿰…...
自然语言处理从入门到应用——LangChain:索引(Indexes)-[文档加载器(Document Loaders)]
分类目录:《自然语言处理从入门到应用》总目录 合并语言模型和我们自己的文本数据是区分它们的一种强大方式,这样做的第一步是将数据加载到“文档”中,文档加载器的作用就是使这个过程变得简单。 LangChain提供了三种文档加载器:…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
