网格计算与云计算
网格计算
- 强调聚合分布的资源
- 强调虚拟组织,立足特定任务
- 利用中间件来屏蔽异构系统
- 面向科研,商业模式不清晰
云计算
- 强调使用专有的资源
- 不强调虚拟组织,重视通用性
- 不强调异构性
- 针对企业应用,商业模式清晰
云计算定义
云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端设备和其他设备。
云计算影响
- 80年代大型计算机到客户端-服务器的大转变后的又一种巨变
- 用户不用了解“云”中细节,不必具备专业知识,也无需直接进行控制。
- 云计算描述了一种基于互联网的新的IT服务增加、使用和交付模式,通常设计通过互联网来提供动态易扩展且经常是虚拟化的资源。
交付模型(服务类型)
SaaS (Software as a Service)
PaaS (Platform as a Service)
IaaS (Infrastructure as a Service)

交付模型的变种:**(各种名词)-as-a-Service
部署模型
公有云:由第三方云提供者拥有的可公共访问的云环境
社区云:类似于公有云,但访问被限定为特定的云用户社区
私有云:由一家组织单独拥有,利用云计算技术来访问组织内部的IT资源
混合云:由两种或者更多不同云部署模型组成的云环境
云计算优势
- 经济性
- 可扩展性和伸缩性
- 易用性、可用性和可靠性
- 虚拟化:模拟出符合用户需求的任何计算环境
- 高可靠:多副本容错、计算节点同构可互换等措施
- 管理简单:无需专职IT维护人员
- 安全:专业的团队+严格的管理
云计算缺点
- 同时性的相对性
- 容灾
- 异构带来的困难
- 动态环境下的不确定性
- 各种进一步需求。。
云计算风险
- 增加了安全漏洞
- 降低了运营管理控制
- 云提供者之间有限的可移植性
- 多地区法规和法律问题
Google云平台
文件存储:GFS
并行数据处理:MapReduce
结构化数据表:BigTable
分布式锁:Chubby(Paxos一致性协议)

Amazon AWS

开源云平台(工具)
Zookeeper:提供通用的分布式协调服务(多server集群,一个leader,多个follower,全局数据一致,每个server副本)
Spark:基于MapReduce算法实现的分布式计算,特点是中间结果可以保存在内存中,不再需要读写HDFS
云计算的数据存储
存储数据类型:文件、数据表
磁盘存储如何处理大小不一的文件
解决思路:分块
分块大小
根据应用来确定
分块的管理
主从模式
优点:方便添加服务器和负载平衡,不存在一致性问题
缺点:单点故障,性能瓶颈
GFS
思路:文件划分为固定大小的块(chunk)存储;通过冗余来提高可靠性;通过“单个” master 来协调数据访问、元数据存储;无缓存
HDFS
思路:NameNode(1个)+DataNode(多个)
无中心模式
优点:不存在单独故障和性能瓶颈
缺点:负载均衡,一致性问题
Dynamo
思路:虚拟节点、Hash值确定存放位置
分块出错
单个分块出错
校验码(HDFS)
每个块进一步分成若干个小块,每个小块有一个校验码
Merkle哈希树技术
叶节点是存储数据的哈希值,父节点是所有子节点的哈希值
服务器出错
主从模式
主节点出错:无响应,通过日志容错
块服务器出错:管理软件检测或心跳机制、回复服务器上每个块
无中心模式
闲聊机制(每个服务器定期随机向另一个服务器发送消息)
恢复服务器上的每个块
HDFS可靠性保障
HDFS性能提升
- 副本选择:使用离程序最近的副本进行读操作
- 负载均衡:当剩余磁盘空间很少时自动迁移数据到其它节点
- 客户端缓存:临时文件超过64MB才正式写入数据
- 流水线复制:客户端 $\rightarrow$ 第一个DataNode $\rightarrow$ 第二个DataNode $\rightarrow$ 第三个DataNode
数据一致性
- 强一致性模型:任何时刻,所有数据副本一直
- 最终一致性模型:最终一致,牺牲一致性提高可靠性和可用性
关系数据库面临的问题
- 无法支持海量数据的快速访问
- 缺少海量数据访问的灵活性
- 对非结构化数据处理能力弱
- 存储和维护成本会随着数据量不断增加
解决思路
- 如何适应不同数据类型:不考虑存储数据的具体类型
- 如何解决可扩展性:以非结构化数据存储机制为基础
- 如何实现数据的分块:将表分割成子表或转换成其他已于分割的形式
几种数据模型
BigTable
行:行关键字、字典序排序
列:按列族存储,每个族的数据同一类型
时间戳:不同时期的数据
物理划分:表 $\rightarrow$ 子表 $\rightarrow$ SSTable文件
SimpleDB
数据以UTF-8编码存储,查询时按字典序
基本结构:树状结构
域、条目、属性、值
最终一致性
Microsoft Table
账户 => Table => 实体 => 属性
HBase
区域
划分
- 水平方式划分,每个区域包含表中的一部分行
- 每个区域包含一个随机id,区域内按行键排序
- 表大小超过阈值后,自动分割成两个大小相同的区域
管理
- 区域服务器(Region Server)
- 处理用户读写请求
- 向主服务器报告状态,并取得需要服务的区域
- 负责维护区域的分割
- 主服务器(Master Server)
- 指派区域服务器装载指定的区域
- 恢复失效的区域服务器
区域服务器
存储
- 每个列族对应一个Hstore
- 一个Hstore包含多个Map File(类似B树)
写操作
- 数据先缓存,达到一定数量后再批量写入
- 写数据前“预写”日志,写入完成后在日志中标记
- 一个区域服务器上的所有区域采用同一个日志
读操作
- 先在缓存中查找,如果命中请求则直接服务
- 如果存在多个版本,则返回最新的
合并
- 当达到周期或Map File数量超过阈值时,会进行合并
- 合并可与无关的读写请求并发进行
- 若读写与合并操相关,挂起直到完成
分割
- 当区域超过阈值后,会按照行进行对半分割
- 由主服务器确定接管的区域服务器
- 被分割区域通过垃圾回收机制回收
- 区域服务器在元信息表中生成子表元信息
元数据表
元数据表
- 区域的源数据表存储在另一个区域中
- 以区域的唯一标识符作为行关键字
- 包括区域中数据起止行、区域状态、区域服务器地址
- 可包含多个区域
- 所有元数据区域的元数据存储在根表里
根表(ROOT Table)
- 只包含一个区域
- 主服务器启动时扫描
- 扫描根表获得所有元数据区域的位置
- 扫描元数据区域得到区域的位置,并分配区域服务器
失效恢复
- 如果无心跳,主服务器判定区域服务器失效
- 主服务器将失效区域服务器所提供服务的区域重新分配给其他区域服务器
- 与BigTable的区别
- BigTable中子表服务器断开连接仍可以继续服务
- 缺少Chubby
云存储服务
向用户提供以互联网为基础的在线存储服务,用户无需考虑细节
特征
分布式网络、易于扩展、易于管理
推动因素
- 数据量的快速持续增长
- 数据同步和异地访问
- 数据备份(防止数据丢失)
影响因素
- 网络带宽:需要实现大容量数据传输来提供便利的云存储
- 应用存储:通过在存储设备中集成应用软件功能来提高性能和效率
- 集群技术、分布式文件系统和网络计算计算:需要实现各个存储设备之间的协同工作
- 网络存储安全技术:保证数据传输安全及数据不会丢失
- 存储管理技术:多地域、多厂商、多硬件设备之间的传输 管理
存在问题
- 安全感缺失:可控性不强、法律保护不够
- 公有云与私有云斗争
- 公有云:数据托管
- 承担存储容量租金和带宽使用费,不需要硬件或技术知识
- 私有云:所有数据完全由内部IT员工控制
大数据编程模型
-
MapReduce: Google提出,用于大规模数据的处理
-
Dryad: Microsoft提出,用于大规模流式计算
-
Pregel: Google提出,用于大规模图计算
MapReduce
基本思想
分而治之

计算流程
- 遍历大规模的记录
- 从每个记录中抽取中间结果
- 对产生的中间结果重新排序
- 对排序后的中间结果集成
- 生成最终结果

数据分片
- 输入分片:MapReduce的输入数据会划分成等长的小数据块
本地计算
- Master根据数据所在位置分配任务
- Map处理数据的大小
- 不大于数据块的大小(64MB)
- 如果分片跨越2个数据块,则可能引起数据传输
中间结果存储
Map任务的结果写入本地硬盘,而非HDFS
Map输出的中间结果在程序运行结束后会删除
存放在HDFS中会浪费资源
容错机制
- Master检测出错的Worker
- 重新执行完成或进行中的map任务
- 重新执行进行中的reduce任务
- Master检测到引起map出错的特定key
多个Reducer处理
partition分区

性能优化
- 最慢的map任务会拖慢整个进程
- reduce任务要等所有map任务结束后才开始
- Master重复分派较慢的map任务,并以最先完成的为结果
- Combine和map在同一个节点上运行
MapReduce的优点
- 采用无共享大规模集群系统,具有良好的性价比和可伸缩性
- 模型简单,易于理解,易于使用,支持大多数大数据处理问题
- 只提供了一个过程性的编程接口,可以通过使用合适的查询优化和索引技术,提i相当好的数据处理性能
Hadoop MapReduce
基本要求:待处理的数据集可以分解为可并行处理的小数据集
操作阶段:Map阶段、Reduce阶段

实现机制
- 由JobTracker和TaskTracker调度:JobTracker负责调度和管理TaskTracker
- 计算和存储共享节点
- 处理的小数据集不大于HDFS中的数据块(每台计算机可以运行多个任务)
- 链接(Combine)和分区(Partition)
- 合并key相同的中间结果,可以直接使用Reduce函数
- 将连接的结果按照key的范围划分
- 任务管道:Reduce的结果不一定需要合并,而是作为新的输入
缺陷
- JobTracker时Map-Reduce的集中处理点,存在单点故障
- 当job非常多时,JobTracker内存开销很大,增加故障风险
- 端以task数目作为资源表示过于简单,没有考虑cpu/内存的占用情况(2个需要大内存的task调度到一起容易内存泄漏)
- 代码难以阅读
- HMapReduce框架在进行变化时,都会强制让分布式集群系统的每一个用户端同时更新。
基于YARN的Hadoop MapReduce
思想
将JobTracker两个主要的功能,资源管理和任务调度/监控,分离成单独的组件。
ResourceManager
全局管理所有应用程序计算资源的分配,调度、启动和监控每一个ApplicationMaster
ApplicationMaster
每个Job有一个负责该Job生命周期内的所有工作
NodeManager
负责Container状态的维护,并向ResourceManager保持心跳
排序
按照key的顺序排序,但难点在于如何写分割器
哈希分割器
将mapper的输出通过hash函数映射到reducer
reducer对输出的数据进一步排序
基于索引树的分割
取样
对每个split取样并排序,取出间隔平均的n-1个样
构建索引树
根据n-1个样,构建类似于B树的索引树
分配
前缀相同的key,被分配到同一个叶子节点
每个叶子节点上可能有多个reducer
单源的最短路径
图:G = (V,E)
两种表示方式:邻接矩阵、邻接列表
问题:寻找从一个源点到一个或多个汇点的最短路径
迪杰斯特拉Dijkstra 算法
迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。迪杰斯特拉算法采用的是贪心策略,将Graph中的节点集分为最短路径计算完成的节点集S和未计算完成的节点集T,每次将从T中挑选V0->Vt最小的节点Vt加入S,并更新V0经由Vt到T中剩余节点的更短距离,直到T中的节点全部加入S中,它贪心就贪心在每次都选择一个距离源点最近的节点加入最短路径节点集合。迪杰斯特拉算法只支持非负权图,它计算的是单源最短路径,即单个源点到剩余节点的最短路径,时间复杂度为O(n²)。
https://www.cnblogs.com/Glacier-elk/p/9438077.html
这篇博客讲得可以理解
网页的倒排索引
倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。

虚拟化
什么是虚拟化
虚拟化是表示计算机资源的抽象方法。通过虚拟化,可以简化基础设施、系统和软件等计算机资源的表示、访问和管理,并为这些资源提供标准的接口来接受输入和输出。
特点
- 虚拟化的对象是各种资源
- 经过虚拟化后所获得的逻辑资源对用户隐藏了不必要的细节
- 用户可以在虚拟环境中实现其在真实环境中的全部或部分功能
云计算为什么需要虚拟化
硬件无关性
- 非虚拟化环境下,操作系统是按照特定的硬件模型配置的,当硬件环境发生变化时,操作系统需要重新配置
- 虚拟服务器能够自动解决软硬件不兼容问题,很容易迁移到另一台虚拟服务器
服务器整合
- 虚拟化技术允许不同的虚拟服务器共享同一个物理服务器,可以提高硬件利用率、负载均衡和对可用IT资源的优化
资源复制
- 易于创建标准化虚拟机映像(包含虚拟硬件、操作系统、应用软件等),支持瞬时部署;增强迁移和部署虚拟机新实例的灵活性;有益于支持回滚功能和业务连续性
虚拟化分类
基础设施虚拟化
网络虚拟化
- 将网络的硬件和软件资源整合,向用户提供虚拟网络连接的虚拟化技术
- 分类:局域网虚拟化、广域网虚拟化(例如VPN)
存储虚拟化
- 为物理的存储设备提供了一个抽象的逻辑视图,用户可以通过这个试图中的同一逻辑接口来访问被整合的存储资源
- 分类:基于存储设备的存储虚拟化(例如RAID),基于网络的存储虚拟化(例如SAN)
软件虚拟化
应用虚拟化
- 将应用程序与操作系统解耦合,为应用程序提供一个虚拟的运行环境
- 这个环境中提供了应用程序的可执行文件和所需要的运行时的环境
高级语言虚拟化
- 解决可执行程序在不同体系结构计算机之间的迁移的问题
- 高级语言编写的程序被编译为标准的中间指令,这些指令在解释执行或动态翻译环境中被执行
系统虚拟化
系统虚拟化通过使用虚拟机管理程序(Virtual Machine Monitor,简称VMM)在一台物理机上虚拟和运行一台或多台虚拟机(VM),而且这些虚拟机可以像真实机器一样运行各种软件,并且在资源占用方面虚拟机之间是相互隔离的,以保证运行的安全和稳定。
系统机管理程序
- Hypervisor(Type 1)
- 直接运行在硬件上,以类似操作系统的形式安装在硬件上,提供接近物理机的性能,并在I/O上作了优化,主要用于服务器
- 例如:VMware ESX,Xen等
- 托管类型(Type 2)
- 安装在传统的操作系统上,性能不如Hypervisor,但安装和使用方便,功能丰富
- 例如:VMware Workstation,Virtual Box等
分类:硬件仿真

分类:全虚拟化
- 托管模式和Hypervisor
- 管理节点在客户操作系统和硬件之间捕捉和处理对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行
- 速度视实现而定
- 最成熟、最常见的

分类:半虚拟化
- Hypervisor
- 管理节点来实现对底层硬件的共享访问,客户操作系统继承了与半虚拟化有关的代码
- 速度快

分类:硬件辅助虚拟化
- 对部分全虚拟化和半虚拟化用到的软件技术进行硬件化来提高性能
- 通常用于全虚拟化和半虚拟化产品,而不是单独使用
- 速度更接近物理机

分类:操作系统级虚拟化
- 对操作系统少许修改,进行简单的隔离
- 成本低,性能不错,资源隔离表现较差

分类对比

虚拟化存在的问题
性能开销
- 对于高工作负载而又少使用资源共享和复制的复杂系统,虚拟化不是理想选择
- 半虚拟化可以改进开销,但会增加使用复杂度
特殊硬件兼容性
对于特殊硬件,可能没有相应的虚拟化软件;对于最新的硬件,虚拟化软件也可能不兼容
可移植性
- 不兼容性问题会带来可移植性问题
- 开放虚拟化格式(OVF)等项目致力于解决这类问题
安全和隐私
观点
乐观:云计算将会增强计算机安全
通过部署集中的云计算中心,可以组织安全专家以及专业化安全服务队伍实现整个系统的安全管理,避免了现在由个人维护安全 ,由于不专业导致安全漏洞频出而被客利用的情况
悲观:云计算是安全的恶梦,安全是云计算的阿喀琉斯之踝
集中管理的云计算中心将成为黑客攻击的重点目标,由于系统的巨大规模以及前所未有的放性与复杂性,其安全性面临着比以往更为严峻的考验
企业数据中心的不足
- 成本高:通常在运行初期就需要引入昂贵的第三方安全解决方案,运行时也需要专门的运维团队
- 复杂度高:指定复杂的规则和流程,系统存在严重的异构型
- 内部盗窃:核心数据容易被内部盗窃
云平台面临的挑战
信任边界的变化
现有系统:所有资源都是处于企业部门的监控中 云平台:资源都是部署和运行在远离企业管理的数据中心
更多的利益相关方
现有系统:企业 IT 部门 云平台:云供应商
数据存放地点
现有系统:企业可控制 云平台:企业无法控制(当地法律法规可能不符合企业期望
互联网的接入
现有系统:通常位于企业内部网络 云平台:通过互联网来提供服务
虚拟化技术
现有系统:不使用虚拟化或小型机虚拟化 云平台: X86 虚拟 化
云平台的优势
- 安全管理:云平台的同构性和专业性,能使得安全管理方面有的放矢
- 高可用性:可用性( 3 个 9 )逐步接近昂贵的企业高可用性解决方案 5 个 9
- 数据安全:快照、备份、容灾等措施
- 专业人才:以更低的成本吸引更多的优秀 专业人员
云平台更多的措施
- 提供更好的安全保障
- 更好的保障机制
- 更严格的隔离、用户管理,更低成本且更高级别的服务
- 防护策略的改变
- 安全模式从“拒敌于国门之外”变为“全民皆兵”
- 利用云计算的优势协同防护
- 规范和立法
- 防止非法访问用户
- 发送和存储尽量少的个人信息到云中,并加密处理
- 最大限度地实现用户对个人信息的控制
- 对多用户数据进行隔离
- 防止公司“作恶”
- 防止合法的泄漏
- 充分考虑不同国家和地区在相关法律、法规间的差异
- 允许用户对数据存放进行个性化 设置
云管理
云管理系统
基于云的 IT 资源需要被建立、配置、维护和监控
- 远程管理系统
- 资源管理系统
- SLA管理系统(SLA=service-level-agreement,服务水平协议)
- 计费管理系统
远程管理系统
远程管理系统向外部云资源管理提供工具和用户界面来配置和管理基于云的IT资源
资源管理系统
资源管理系统用于协调 IT 资源,以便响应云用户和云提供者执行的管理操作
核心是虚拟基础设施管理器,用于协调服务器硬件,从最合适的底层物理服务器创建虚拟服务器实例
SLA管理系统
SLA 管理系统是一系列商品化的可用云管理产品,包括: SLA 数据的管理、收集、存储、报告以及运行时通知
收集 SLA 数据需要依靠一个或多个 SLA 监控器,根据数据进行实时反馈,确保系统履行 SLA 中公布的标准
计费管理系统
计费管理系统用于收集和处理使用数据,涉及云提供者的结算和云用户的计费
云管理机制
虚拟机监控器
虚拟机监控器用于在物理服务器上生成虚拟服务器实例
负载均衡器
负载均衡器采用了水平扩展的思想,将负载在两个或多个 IT 资源上做负载均衡,提升性能和容量
负载平衡策略
自动伸缩监听器
自动伸缩监听器是一个服务代理,用于监控和追踪云服务用户和云服务之间的通信,从而动态伸缩
自动伸缩监听器通常部署在靠近云端防火墙,自动追踪负载状态信息
类型
根据云用户事先定义的参数,自动伸缩 IT 资源
当负载超过当前阈值或低于已分配资源时,自动通知云用户
故障转移器
故障转移器用于在当前活跃的 IT 资源变得不可用时,自动切换到冗余的或待机 IT 资源实例上
类型
- 主动-主动:IT 资源的冗余实现会主动同步服务工作负载,在活跃的实例之间需要进行负载均衡
- 主动-被动:待机或非活跃的实例会被激活,从不可用的 IT 资源处接管工作,相应的工作负载重定向到新的实例
审计监控器
审计监控器用于收集网络和 IT 资源的审计记录数据,满足管理需要或合同义务
云应用
云计算带来的改变
- 强大的计算能力
- 几乎无上限的存储空间
- 通信开销减小
云计算的优势
- 快速扩展:不必依赖硬件升级
- 高性能:云平台的性能超过可预期的单个设备的极限
- 经济型:按需付费
- 易用性:通过无线或有线网络均可以连接云平台
移动设备的局限性
云计算在物联网中的应用
- 提高服务器的可靠性
- 环节服务器的访问压力
- 实现更大范围的信息共享
- 增强数据处理能力
大数据的5个特点
- Volume(体量大)
- Variety(多样性)
- Velocity(时效性)
- Veracity(准确性)
- Value(大价值)
大数据发展的原因