【工业与大数据】大数据基础

大数据这个词已经火热了很多年,似乎处处都存在着大数据的噱头,让我们回归本质,探讨一下大数据是什么?
本文介绍了大数据技术细节以及相关背景的的一些概念。本文并未对大数据的相关知识进行总结,所以本文仅作为参考,无需详细阅读。
背景 为什么需要大数据?
- 我们比以往产生更多且更多样性的数据
- 我们比以往更快的产生数据
- 这些数据具有其价值性
针对以上三个基本原因,我们必须通过处理这些数据来提取其中的价值。
然而处理这些大量的数据面临两个问题:
- 大规模数据的存储
- 大规模数据的分析
这里我们举一个例子:早期的网络环境就如同一条小河,依河而居的人们世代通过抓鱼维生。这个时期鱼的数量有限、种类单一。人们只需要把鱼抓起来放到冰箱,想吃的时候直接拿出来烤就可以了。
随着人类抓鱼的速度越来越快,抓鱼水平越来越高。人们抓到的鱼数量越来越大,种类越来越丰富。人们逐渐遇到了两个代表性的问题:
- 冰箱放不下(存储不足)
- 烹饪不过来(处理效率不足)
如何解决这样的问题呢?
- 冰箱放不下:
解决冰箱放不下无非两个思路。①换一个大一点的冰箱(纵向扩展)②多买几个冰箱(横向扩展)
显然纵向扩展是难以实现的,存10000...条鱼需要多大的冰箱?
横向扩展相对容易实现,鱼多的时候多买一些冰箱,搞一个冷库(集群)然后大家一起去存放鱼(分布式存储)
然而随着冰箱越来越多(集群规模扩大),人们又单独做了一个账本(元数据),里面存储了每条鱼存放在冰箱什么位置的信息。
- 烹饪不过来:
鱼越来越多,即使所有的鱼都能保存到冰箱中,但是只有一个厨师的话效率实在太低。
不如多找几个厨师,大家一起烤(分布式计算)
所以说,大数据技术本质上用于解决 海量数据提取、存储、处理的一套技术,分布式是其主要实现思路。
重要结论
学术界普遍认为大数据仍处于发展与创新的初始阶段。大量数据的存储并不是大数据技术的主要问题甚至不是重要问题,非结构化的数据的快速处理与分析利用才是大数据要解决的最主要问题。
大数据是相对的,大数据的概念也是不断变化的。(三十年前100M也是大数据)大数据是指用现有技术手段和软件难以快速处理的数据。今天的大数据主要强调数据的非结构性与实时处理的要求。
人是大数据中重要的环节,数据可视化是实现人的作用的主要工具 大数据强调人通过数据可视化对大数据运算结果的再次分析与知识提炼,以便进行进一步的数据挖掘。
** 大数据的四个特点:**
- Volume 数据量大
- Velocity 速度快
- Variety 种类多样
- Value 价值密度低
一、云计算
大数据对于系统架构的需求
为了对应大数据的几个基本特点:Volume(数据量大) Velocity(产生速度快) Variety(种类多) Value(价值密度低)。因为以上几个特点,大数据对于数据架构的需求如下:
- 显示的需求
- 海量计算和存储 ➡️ 数据量大
- 快速计算 ➡️ 产生速度快
- 隐式的需求
- 数据的快速传输 ➡️ 产生速度快
- 灵活性 ➡️ 种类多
- 低成本 ➡️ 价值密度低
大数据的核心设计理念
-
并行化
- 并行请求
- 并行进程
- 并行指令
- 并行数据
- 硬件描述
-
规模经济 例子:WSC(仓库规模的计算机) 用网络链接起来的计算和存储设备。实用相对同质的硬件和系统软件平台、共享相同的系统管理、运行相对小数目的超大型程序、通用的资源管理架构增强了灵活性。
- 主要部件
- 供电、制冷、建筑、网络、安全
- 存储、计算
- 优势
- 规模经济
- 提高使用率
- 挑战
- 能耗PUE = Total Energy/Computer Energy
- 运维
- 主要部件
-
虚拟化(抽象) 解决多租户、多应用使用的问题
计算机科学中的所有问题,都可以通过增加一个层次的间接(indirectiron)来解决,当然除了间接层次过多的问题 —— David Wheeler
虚拟化的结果 —— 每个用户认为自己有一套自己的架构,而实际所有人共享相同的硬件资源。

二、虚拟化技术
为什么要虚拟化?
传统的虚拟化的目的主要是为了分区与抽象
- 分区 Partitioning
- 分享:打破一个大资源
- 服务器
- 抽象 Abstraction
- 用一个指令集仿真另一个指令集(简而言之就是一种操作系统使用另外一种系统)
在云计算时代,虚拟化是为了资源池,安全,便于管理
- 资源池
- 聚合:将多个资源结合起来
- 合一:利于存储
- 动态:快速分配(虚拟机)
- 隔离:保护消费者隔离其他租客
- 例如虚拟专用网(VPN)
- 便于管理
- 测试
- 机动性
数据中心虚拟化的三个重要内容
- 计算虚拟化
- 主操作系统:运行在真实机器上
- 客户操作系统:运行在主操作系统之上
- Hypervisor:支持运行在多个虚拟机上的软件
- 类型1:运行在真实机器上,例如 Xen、VMWARE、ESXi
- 类型2:运行在主操作系统,例如 MS Virtual PC
- 类型0:1和2兼有,例如 Linux KVM
- 存储虚拟化
- 网络虚拟化
服务器虚拟化考虑的三个问题
- 指令集的翻译 二进制翻译
- 如何快速执行
- 如何执行需要更高权限的指令
- I/O设备的仿真
- 如何让虚拟机操作系统访问不支持的硬件
- 如何保护I/O性能
- 保护处理器的数据结构 影子处理器
虚拟化的核心问题:内存的保护管理
计算机的内存映射是由MMU进行管理,当计算机虚拟化后运行在计算机上的多个系统对于MMU的控制方式是内存保护管理的重要问题。目前的解决方式:
- 半虚拟化:修改虚拟机操作系统,能不做操作就不要作
- 影子页表:
- 拒绝客户操作系统对实际页表条目的任何访问
- 捕获访问请求,在软件中仿真
- 硬件支持的虚拟化:
- 二级地址转表(SLAT)
- AMD AMD-V RVI
- Intel VT-x EPT
- 二级地址转表(SLAT)
MMU是Memory Management Unit的缩写,中文名是内存管理单元,有时称作分页内存管理单元(英语:paged memory management unit,缩写为PMMU)。它是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制。
网络虚拟化
网络虚拟化的用途

网络虚拟化的举例 : VLAN
最简单的目标:提供单一的二层网络
- 端口分数不同的VLAN
- 多个VLAN共享一个端口
- Trunk模式
- VLAN标签(12bits):特殊的包头
- 最多支持4096 VLAN
- VLAN的优劣与解决方案
- 优势:标准,支持广泛,硬件成本低
- 劣势:只能支持4096个VLAN
- 新的标准:VxLAN
- 通过三层隧道实现
- 广播 -> 组播
- Virtual Tunnel End Ppoints(VTEPs)负责打包和接包
现代网络虚拟化技术:软件定义网络
- 传统网络
- 控制面与数据面集成在同一个设备中
- 不同网络设备之间通过协议决定如何转发
- 软件定义网络
- 控制面集中管理,放在服务器中
- 举例:OpenFlow协议,每一层交换机通过Controller确定数据流向
- 举例:Portland —— 大规模的虚拟二层网络的实现
- 大型2层网络的挑战
- 地址解析(ARP):广播
- 路由:广播
- 转发:交换机要记住大量状态
- 根源:MAC地址不连续
- Portland实现
- 与位置相关的虚拟地址
- 通过SDN的地址解析
- 网络截获所有ARP广播
- 把无序的MAC地址改成与物理位置相关的地址
- 转发数据包
- 发给服务器之前,改回原来的MAC地址
- 大型2层网络的挑战
存储虚拟化
- 存储的意义
- 独立于数据位置
- 扩展性强,容量大
- 易于管理(磁盘可集中存储)
- 提升磁盘使用率
- 独立与物理存储技术
- 易于升级
- 可用性的优化(多路径访问、冗余)
- 易于维护(在线的后台备份、恢复)
- 独立于数据位置
- 存储虚拟化的三类接口
- 块接口
- 本例块存储
- 远程块存储接口
- 文件接口
- 文件系统
- 网络文件系统(NFS,CIFS,HDFS)
- VFS
- 对象存储接口
- 亚马逊S3(基于http协议的REST接口)
- OpenStack Swift
- 块接口
- 存储虚拟化的实现方式
- SAN 存储区域网络
- Storage Area Network
- 存储服务器通过专用网络链接,例如光纤通道(FC)
- NAS 网络附接存储
- Network attached storage(NAS)
- 存储服务器通过通用网络来访问,例如以太网
- SAN 存储区域网络
总结
- 优势
- 统一、抽象的接口隐藏了复杂的物理硬件
- 灵活,可以软件定义
- 易于管理,更容易保证安全
- 问题
- 虚拟化有一定的资源开销
- 通常没有实现性能的隔离
- 过多层的抽象:如何调试 ?
- 发展趋势:软件定义数据中心?
- 网络功能虚拟化
- 防火墙、入侵检测系统虚拟化
- 资源的管理和调度
- 其他资源的虚拟化:空调?供电?建筑?
- 目标:性能+灵活性+管理
- 网络功能虚拟化
三、典型的云计算系统
一个虚拟机的生命周期

- 用户通过界面或命令行向API发送 ‘create instance’
- API节点记录虚拟机信息,发送调度请求给调度器
- 调度器找到可用的计算节点,向计算节点发送‘vm provision’请求
- 计算节点通过虚拟机hypervisor启动虚拟机
- Hypervisor去镜像存储服务获取虚拟机磁盘镜像
- 计算节点向网络节点发信息,请求给新创虚拟机分配网络资源
- 网络节点通过配置虚拟交换机配置网桥、VLAN等,实现虚拟网络,并在数据库中记录网络信息
- 计算节点向虚拟存储服务要求新建虚拟磁盘卷,并通过iSCS协议挂载
- 用户通过界面查询虚拟机创建的结果
以上操作是异步
什么是一个好的云计算系统
- 让用户彻底忘记底层的硬件(通过好的虚拟化和抽象,让用户忘记复杂的硬件与运算逻辑)