中南大学2021级云计算复习笔记

打印 上一主题 下一主题

主题 672|帖子 672|积分 2016

选择题 20分 10个
填空题 10分 10个
判断题 10分 5个
简答题 20分 4个
编程题 40分 2个
云计算基础
云计算的概念:云计算是一种商业计算模型。它将计算任务分布在大量计算机构成的资源池上,使各种应用体系能够根据需要获取计算力、存储空间和信息服务。
云计算是并行计算、分布式计算和网格计算的发展,或者说是这些计算机科学概念的商业实现


  • 并行计算:同时利用多种计算资源办理计算题目的过程
  • 分布式计算:将需要巨大计算能力的题目分成很多小部分进行处理,最后综合效果
  • 网格计算:在动态、多机构参与的虚拟组织中协同共享资源和求解题目
云计算是虚拟化、效用计算、IaaS、PaaS、SaaS等技能混淆演进、提拔的效果
云计算重要管理计算资源、存储资源、网络资源三个方面
云计算特点:超大规模、虚拟化、高可靠性、通用性、高可伸缩性、按需服务、极其便宜
云计算服务类型:


  • IaaS(将基础设施作为服务):将硬件设备等基础资源封装成服务供用户利用
  • PaaS(将平台作为服务):对资源的抽象条理更进一步,提供用户应用程序运行情况
  • SaaS(将软件作为服务):针对性更强,它将某些特定应用软件功能封装成服务
云计算架构
云计算分为前端后端两个部分:


  • 前端:指用户的计算机或客户端,包括用户计算机(或计算机网络)以及云计算体系登录程序。不同的云计算体系具有不用的用户界面。
  • 后端:各种各样的计算机、服务器和数据存储体系,它们共同组成了云计算体系中的“云”。
  • 二者通过网络相互毗连。
架构图:



  • SOA构建层:封装云计算能力成尺度的web services服务,并纳入SOA体系
  • 管理中心件层:云计算的资源管理,并对众多应用任务进行调理,使资源能够高效、安全地为应用提供服务
  • 资源池层:将大量相同类型的资源构成同构或靠近同构的资源池
  • 物理资源层:计算机、存储器、网络设施、数据库和软件等
云计算和网格计算的关系:

为什么云计算成本很低?
重要原因是云计算的技能特性和规模效应所带来的压倒性的性能代价比优势。
云计算有更低的硬件和网络成本、更低管理成本和电力成本,也有更高的资源利用率。两个乘起来能够将成本节流30倍以上。

大数据及特点
大数据的定义:海量数据或巨量数据,其规模巨大到无法通过现在主流的计算机体系在公道时间内获取、存储、管理、处理并提炼以资助利用者决议。
大数据特点:价值密度低、快速、复杂度、数据量大、多样
大数据、云计算、人工智能是什么关系(一定要把握)

x是大数据,f是人工智能和云计算,G是我们的目标。也就是说,云计算和人工智能是处理大数据的本领,我们通过人工智能技能和云计算技能去处理大数据,来达成我们的目标。大数据与人工智能和云计算是一枚硬币的正反面。大数据是需求,云计算和人工智能是本领。没有大数据就不需要人工智能和云计算。没有人工智能和云计算,就无法处理大数据。
谷歌的云计算的焦点技能
三个技能:MapReduce, GFS, BigTable
谷歌的分布式文件体系怎么设计
Google GFS的新颖之处在于它接纳便宜的商用及其构建分布式文件体系,同时将GFS的设计与Google应用的特点精密联合,简化实现,使之可行,最终到达创意新颖、有用、可行的美满组合。
GFS将容错的任务交给文件体系完成,利用软件的方法办理体系可靠性题目,是存储的成本成倍降落。GFS将服务器故障视为正常现象,并接纳多种方法,从多个角度,利用不同的容错措施,确保数据存储的安全、包管提供不间断的数据存储服务。
GFS架构

GFS将整个体系节点分为三类脚色:

GFS的实现机制


  • 客户端起首访问Master节点,获取交互的Chunk Server信息,然后访问这些Chunk Server,完成数据存取工作。这种设计方式实现了控制流和数据流的分离
  • Client与Master之间只有控制流,而无数据流,极大地降低了Master的负载。
  • Client与Chunk Server之间直接传输数据流,同时由于文件被分为多个Chunk进行分布式存储,Client可以同时访问多个Chunk Server,从而使得整个体系的I/O高度并行,体系团体性能得到提高
GFS容错机制
Master容错
Master上保存了GFS文件体系的三种元数据:

起首就单个Master来说,对于前两种数据,GFS通过操纵日志来提供容错功能。第三种元数据信息则直接保存再各个Chunk Server上,当Master启动或Chunk Server向Master注册时自动生成。
当Master发生故障时,在磁盘数据保存齐备的情况下,可以迅速恢复以上元数据。为了防止Master彻底死机的情况,GFS还提供了Master远程的实时备份,如许在当前的GFS Master出现故障无法工作的时间,别的一台GFS Master可以迅速接替其工作。
Chunk Server容错


  • GFS接纳副本的方式实现Chunk Server的容错
  • 每一个Chunk有多个存储副本(默认为三个)
  • 对于每一个Chunk,必须将所有的副本全部写入成功,才视为成功写入
  • 相关的副本出现丢失或不可恢复等情况,Master自动将该副本复制到其他的Chunk Server
MapReduce (会编程)
MapReduce是Google提出的一个软件架构,是一种处理海量数据的并行编程模式,用于大规模数据集(通常大于1TB)的并行计算。
MapReduce封装了并行处理、容错处理、本地化计算、负载均衡等细节,还提供了一个简单而强大的接口。通过这个接口,可以把大尺度的计算自动地并发和分布实验,是编程变得非常轻易。
MapReduce把对数据集的大规模操纵,分发给一个主节点管理下的各分节点共同完成,通过这种方式实现任务的可靠实验与容错机制
MapReduce编程模型

Map函数——对一部分原始数据进行指定的操纵。每个Map操纵都针对不同的原始数据,因此Map与Map之间是互相独立的,这使得它们可以充分并行化。
Reduce操纵——对每个Map所产生的一部分中心效果进行归并操纵,每个Reduce所处理的Map中心效果是互不交叉的,所有Reduce产生的最闭幕果颠末简单毗连就形成了完备的效果集.

Map输入参数:in_key和in_value,它指明白Map需要处理的原始数据
Map输出效果:一组<key,value>对,这是颠末Map操纵后所产生的中心效果
Reduce输入参数:(key,[                                   v                         a                         l                         u                                   e                            1                                       value_1                  value1​,…,                                   v                         a                         l                         u                                   e                            m                                       value_m                  valuem​])
Reduce工作:对这些对应相同key的value值进行归并处理
Reduce输出效果:(key, final_value),所有Reduce的效果并在一起就是最闭幕果
MapReduce操纵的实验流程

Master容错
Master会周期性地设置检查点(checkpoint),并导出Master的数据。一旦某个任务失效,体系就从最近的一个检查点恢复并重新实验。由于只有一个Master在运行,如果Master失效了,则只能终止整个MapReduce程序的运行并重新开始。
Worker容错:
Master会周期性地给Worker发送ping命令,如果没有Worker的应答,则Master认为Worker失效,终止对这个Worker的任务调理,把失效Worker的任务调理到其他Worker上重新实验。
分布式锁服务Chubby
Chubby是Google设计的提供粗粒度锁服务的一个文件体系,它基于松耦合分布式体系,办理了分布的同等性题目。
Paxos算法(一定要把握)

体系约束条件


  • p1:每个acceptor只接受它得到的第一个决议。
  • p2:一旦某个决议得到通过,之后通过的决议必须和该决议保持同等。

    • p2a:一旦某个决议v得到通过,之后任何acceptor再批准的决议必须是v。
    • p2b:一旦某个决议v得到通过,之后任何proposer再提出的决议必须是v。
    • p2c:如果一个编号为n的提案具有值v,那么存在一个“多数派”,要么它们中没有谁批准过编号小于n的任何提案,要么它们进行的最近一次批准具有值v。

为了包管决议的唯一性,acceptors也要满足一个约束条件:当且仅当 acceptors 没有收到编号大于n的哀求时,acceptors 才批准编号为n的提案。

Chubby设计目标
高可用性和高可靠性、高扩展性、支持粗粒度的发起性锁服务、服务信息的直接存储、支持缓存机制、支持通报机制。
Bigtable数据存储格式
Bigtable是一个分布式多维映射表,表中的数据通过一个行关键字(Row Key)、一个列关键字(Column Key)以及一个时间戳(Time Stamp)进行索引。
Bigtable的存储逻辑可以表示为:(row:string, column:string, time:int64)→string

Megatstore
nosql优点缺点(一定要把握)
优点:


  • Cheap(便宜)
  • Scalable(可扩展)
  • Handles large data(可处理大批数据)
缺点:


  • Inconsistent APIs(API前后不同等)
  • Lack of complicated queries requires joins / aggregations / filters(缺少复杂的查询哀求 :毗连/聚合/过滤器)
  • Lack of ACID(缺少事件的原子性、同等性、隔离性、恒久性)
Megastore索引

Megastore提供的三种读

Megastore完备的事件周期

Megastore三种副本

Dapper两个基本要求


  • 广泛可摆设性:设计出的监控体系应当能够对尽可能多的Google服务进行监控
  • 不间断的监控:Google的服务是全天候的,如果不能对Google的后台同样进行全天候的监控很可能会错过某些无法再现的关键性故障
Dapper三个基本设计目标


  • 低开销:这个是广泛可摆设性的必然要求。监控体系的开销越低,对于原体系的影响就越小,体系的开发人员也就越乐意接受这个监控体系。
  • 对应用层透明:监控体系对程序员应当是不可见的。如果监控体系的利用需要程序开发人员对其底层的一些细节进行调整才华正常工作的话,这个监控体系肯定不是一个完备的监控体系。
  • 可扩展性:Google的服务增长速度是惊人的,设计出的体系至少在未来几年里要能够满足Google服务和集群的需求。
Dapper监控体系的三个基本概念


  • 监控树(Trace Tree):一个同特定事件相关的所有消息
  • 区间(Span):区间实际上就是一条记载
  • 注释(Annotation):注释重要用来辅助推断区间关系,也可以包含一些自定义的内容
Dapper关键技能:
轻量级焦点功能库:

二次抽样技能
利用二次抽样技能成功地办理了低开销及广泛可摆设性的题目。


  • 第一次抽样:实践中,设计人员发现当抽样率低至1/1024时也能够产生充足多的有效监控数据,即在1024个哀求中抽取1个进行监控也是可行的,从而可以捕获有效数据。
  • 第二次抽样:发生在数据写入Bigtable前,详细方法是将监控id散列成一个标量z(0 <= z <= 1),如果某个区间的z小于事先定义好的汇总抽样系数,则保留这个区间并将它写入Bigtable,否则丢弃
Google App Engine
Google App Engine是一个由Python应用服务器群、Bigtable数据库及GFS数据存储服务组成的平台,它能为开发者提供一体化的可自动升级的在线应用服务。
沙盒的限制


  • 用户的应用程序只能通过GAE提供的网址抓取API和电子邮件服务API来访问互联网中其他的计算机,其他计算机如哀求与该应用相毗连,只能在尺度接口上通过HTTP或HTTPS进行
  • 应用程序无法对GAE的文件体系进行写入操纵,只能读取应用程序代码上的文件,并且该应用程序必须利用GAE的Data Store数据库来存储应用程序运行期间持续存在的数据
  • 应用程序只有在响应网络哀求时才运行,并且这个响应实践必须极短,在几秒之内必须完成。与此同时,哀求处理的程序不能在自己的响应发送后产生子进程或实验代码
亚马逊基础存储架构Dynamo

数据均衡分布(一定要把握)
采取了改进的同等性哈希算法
同等性哈希算法是现在主流的分布式哈希表(Distributed Hash Table, DHT)协议之一,通过修正简单哈希算法,办理了网络中的热点题目,使DHT可以真正地应用于P2P情况中。
同等性哈希算法除了能够包管哈希运算效果充分分散到整个环上外,还能包管在添加或删除设备节点时只会影响到其在哈希环中的前驱设备节点,而不会对其他设备节点产生影响。
同等性哈希算法可以大大降低在添加或删除节点时引起的节点间的数据传输开销

改进的同等性哈希算法
Dynamo中引入了虚拟节点的概念,每个虚拟节点抖隶属于一个实际的物理节点,一个物理节点根据其性能的差异被分为一个或多个虚拟节点
各个虚拟节点的能力基本相当,并随机分布在哈希环上

Dynamo将整个哈希环划分为Q等份,每个等份称为一个数据分区(Partition)
在存储数据时,每个数据会被先分配到某个数据分区,再根据负责该数据分区的虚拟节点,最终确定其所存储的物理节点。
数据分区的好处:


  • 建小数据分布不均衡的可能性
  • 添加或删除设备节点时引起较小的数据传输

数据备份

数据冲突题目

成员资格及错误检测



容错机制
暂时故障处理机制

永世性故障处理机制

弹性计算云EC2

呆板映像

实例

地理区域,可用区域

EC2体系中包含多个地理区域,而每个地理区域中又包含多个可以区域。为了确保体系的稳定性,用户最好将自己的多个实例分布再不同的可用区域和地理区域中。
三种ip

hadoop
两个编程题搞清楚
一个是用MR编程做图书统计,排序
Mapper类:
  1. public class BookCountMapper extends Mapper<Object, Text, Text, IntWritable> {
  2.     private Text bookTitle = new Text();
  3.     private IntWritable count = new IntWritable();
  4.     public void map(Object key, Text value, Context context)
  5.             throws IOException, InterruptedException {
  6.         // 假设输入格式为 "书名  数量"
  7.         String[] parts = value.toString().split("\\s+");
  8.         if (parts.length == 2) {
  9.             // 提取书名和数量
  10.             String title = parts[0];
  11.             int quantity = Integer.parseInt(parts[1]);
  12.             // 输出键值对 (书名, 数量)
  13.             bookTitle.set(title);
  14.             count.set(quantity);
  15.             context.write(bookTitle, count);
  16.         }
  17.     }
  18. }
复制代码
Reducer类:
  1. public class BookCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
  2.     private IntWritable result = new IntWritable();
  3.     public void reduce(Text key, Iterable<IntWritable> values, Context context)
  4.             throws IOException, InterruptedException {
  5.         int sum = 0;
  6.         for (IntWritable value : values) {
  7.             sum += value.get();
  8.         }
  9.         result.set(sum);
  10.         context.write(result, key);
  11.     }
  12. }
复制代码
主程序:
  1. public class BookCount {
  2.     public static void main(String[] args) throws Exception {
  3.         Configuration conf = new Configuration();
  4.         Job job = Job.getInstance(conf, "BookCount");
  5.         job.setJarByClass(BookCount.class);
  6.         job.setMapperClass(BookCountMapper.class);
  7.         job.setReducerClass(BookCountReducer.class);
  8.         job.setOutputKeyClass(Text.class);
  9.         job.setOutputValueClass(IntWritable.class);
  10.         job.setInputFormatClass(TextInputFormat.class);
  11.         job.setOutputFormatClass(TextOutputFormat.class);
  12.         TextInputFormat.addInputPath(job, new Path(args[0])); // 输入路径1
  13.         TextInputFormat.addInputPath(job, new Path(args[1])); // 输入路径2
  14.         TextOutputFormat.setOutputPath(job, new Path(args[2])); // 输出路径
  15.         System.exit(job.waitForCompletion(true) ? 0 : 1);
  16.     }
  17. }
复制代码
一个是spark编程,实验的两个例子
wordcount
  1. import org.apache.spark.{SparkConf, SparkContext}
  2. object WordCount {
  3.   def main(args: Array[String]): Unit = {
  4.     // 创建Spark配置
  5.     val conf = new SparkConf().setAppName("WordCount")
  6.     // 创建Spark上下文
  7.     val sc = new SparkContext(conf)
  8.     // 读取输入数据,这里假设输入数据是一个文本文件
  9.     val input = sc.textFile("input.txt")
  10.     // 执行WordCount操作
  11.     val wordCounts = input
  12.       .flatMap(line => line.split(" ")) // 将每行文本拆分为单词
  13.       .map(word => (word, 1))           // 将每个单词映射为 (单词, 1) 键值对
  14.       .reduceByKey(_ + _)               // 按键合并相同单词的计数
  15.       .sortByKey()                      // 按单词排序
  16.     // 打印结果
  17.     wordCounts.collect().foreach(println)
  18.     // 关闭Spark上下文
  19.     sc.stop()
  20.   }
  21. }
复制代码
pagerank
  1. import org.apache.spark.{SparkConf, SparkContext}
  2. object PageRank {
  3.   def main(args: Array[String]): Unit = {
  4.     val conf = new SparkConf().setAppName("PageRank")
  5.     val sc = new SparkContext(conf)
  6.     // 从文件中读取初始图数据,每行格式为:source_node target_node
  7.     val links = sc.textFile("input.txt").map(line => {
  8.       val parts = line.split("\\s+")
  9.       (parts(0), parts(1))
  10.     }).distinct().groupByKey().cache()
  11.     // 初始化每个节点的PageRank值为1.0
  12.     var ranks = links.mapValues(_ => 1.0)
  13.     // 迭代计算PageRank值
  14.     for (i <- 1 to 10) {
  15.       val contributions = links.join(ranks).flatMap {
  16.         case (node, (neighbors, rank)) =>
  17.           neighbors.map(neighbor => (neighbor, rank / neighbors.size))
  18.       }
  19.       ranks = contributions.reduceByKey(_ + _).mapValues(0.15 + 0.85 * _)
  20.     }
  21.     // 打印最终的PageRank值
  22.     val result = ranks.collect()
  23.     result.foreach(println)
  24.     sc.stop()
  25.   }
  26. }
复制代码
spark
Hadoop/MapReduce缺点


  • MR算法少,不适合描述复杂的数据处理过程(不适合Group By、Join等操纵)
  • 每次Reduce都需要磁盘读写,速度慢
  • MR需要成对出现
  • Master节点调理慢
  • 单节点
spark组件

RDD概念
RDD是一个数据集,不可改变,分布在集群上;通过DAG来实现自动数据恢复;支持内存物化(Cache)和硬盘物化(Checkpoint),来保存中心效果
OpenStack
OpenStack是一个管理计算、存储和网络资源的数据中心云计算开放平台,通过一个仪表板,为管理员提供了所有的管理控制,同时通过Web界面为其用户提供资源。

OpenStack的重要服务
OpenStack有三个重要的服务成员:计算服务(Nova)、存储服务(Swift)、镜像服务(Glance)



  • 计算服务Nova
  • 对象存储服务Swift
  • 镜像服务Glance
  • 身份认证服务keystone
  • 网络管理服务Quantum
  • 存储管理服务Cinder
  • 仪表盘Horizon
Libvirt
虚拟云实现的三部曲:虚拟化技能实现 – 虚拟机管理 – 集群资源管理(云管理)
Nova 通过独立的软件管理模块实现 XenServer、Hyper-V 和 VMWare ESX 的调用与管理
同时对于其他的 Hypervisor,如 KVM、LXC、QEMU、UML 和 Xen 则通过Libvirt尺度接口同一实现
Libvirt的重要目标是为各种虚拟化工具提供一套方便、可靠的编程接口,用一种单一的方式管理多种不同的虚拟化提供方式。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表