- 浏览: 24263 次
- 性别:
- 来自: 浙江
最新评论
之前在没有接触到云计算之前,只是对云计算有一点点模糊的概念,觉得这是一个很高大上的东西,似乎离我们大一的还很远。后来有机会上了一节云计算的普及课程吧,并且在之前的一周里拜读了谷歌三大论文。不敢说理解,至少囫囵吞枣啃下了一大堆看不明白的理论。现在就简单聊聊我对于云计算的了解。
我先说说GFS
首先我们要知道Google GFS是一种文件系统,是一个面向大规模数据密集型应用的、可扩展的分布式文件系统。GFS虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了高性能的服务。
那么他既然是一种文件系统,他首先就具有与过去的分布式文件系统很多相同的目标。但是,对于GFS的设计还是以对自己的应用的负载情况和技术环境的分析为基础的,不管现在还是将来,GFS和早期的分布式文件系统的设想都有明显的不同。
一、设计思路上的不同
1.组件失效被认为是常态事件,而不是意外事件。GFS包括几百甚至几千台普通的廉价设备组装的存储机器,同时被相当数量的客户机访问。GFS组件的数量和质量导致在事实上,任何给定时间内都有可能发生某些组件无法工作,某些组件无法从它们目前的失效状态中恢复。我们遇到过各种各样的问题,比如应用程序bug、操作系统的bug、人为失误,甚至还有硬盘、内存、连接器、网络以及电源失效等造成的问题。所以,持续的监控、错误侦测、灾难冗余以及自动恢复的机制必须集成在GFS中
2.按照传统的标准,文件都非常大。大小达几个GB的文件是很平常的。每个文件通常包含很多应用对象。当经常要处理快速增长的、包含数以万计的对象、长度达TB的数据集时,我们很难管理成千上万的KB规模的文件块,即使底层文件系统提供支持。因此,设计中操作的参数、块的大小必须要重新考虑。对大型的文件的管理一定要能做到高效,对小型的文件也必须支持,但不必优化。
3.大部分文件的更新是通过添加新数据完成的,而不是改变已存在的数据。在一个文件中随机的操作在实践中几乎不存在。一旦写完,文件就只可读,很多数据都有这些特性。一些数据可能组成一个大仓库以供数据分析程序扫描。有些是运行中的程序连续产生的数据流。有些是档案性质的数据,有些是在某个机器上产生、在另外一个机器上处理的中间数据。由于这些对大型文件的访问方式,添加操作成为性能优化和原子性保证的焦点。而在客户机中缓存数据块则失去了吸引力。
4.工作量主要由两种读操作构成:对大量数据的流方式的读操作和对少量数据的随机方式的读操作。在前一种读操作中,可能要读几百 KB,通常达1MB和更多。随机的读操作通常在一个随机的偏移处读几个 KB。性能敏感的应用程序通常将对少量数据的读操作进行分类并进行批处理以使得读操作稳定地向前推进,而不要让它来来回回的读。
5、工作量还包含许多对大量数据进行的、连续的、向文件添加数据的写操作。所写的数据的规模和读相似。一旦写完,文件很少改动。 在随机位置对少量数据的写操作也支持,但不必非常高效。
6、系统必须高效地实现定义完好的大量客户同时向同一个文件的添加操作的语义。
既然他在设计思路上跟过去的分布式文件系统有那么多不同,那么他的结构是怎么样的呢?
二、结构体系
1.单Master
单一的Master节点的策略大大简化了我们的设计。单一的Master节点可以通过全局的信息精确定位Chunk的位置以及进行复制决策。另外,我们必须减少对Master节点的读写,避免Master节点成为系统的瓶颈。客户端并不通过Master节点读写文件数据。反之,客户端向Master节点询问它应该联系的Chunk服务器。客户端将这些元数据信息缓存一段时间,后续的操作将直接和Chunk服务器进行数据读写操作。
首先,客户端把文件名和程序指定的字节偏移,根据固定的
Chunk大小,转换成文件的Chunk索引。然后,它把文件名和Chunk索引发送给Master节点。Master节点将相应的Chunk标识和副本的位置信息发还给客户端。客户端用文件名和Chunk索引作为key缓存这些信息。之后客户端发送请求到其中的一个副本处,一般会选择最近的。请求信息包含了Chunk的标识和字节范围。在对这个Chunk的后续读取操作中,客户端不必再和Master节点通讯了,除非缓存的元数据信息过期或者文件被重新打开。实际上,客户端通常会在一次请求中查询多个Chunk信息,Master节点的回应也可
能包含了紧跟着这些被请求的Chunk后面的Chunk的信息。在实际应用中,这些额外的信息在没有任何代价的情况下,避免了客户端和Master节点未来可能会发生的几次通讯。
2.块规模
块规模是设计中的一个关键参数。我们选择的是64MB,这比一般的文件系统的块规模要大的多。每个块的副本作为一个普通的Lin ux文件存储,在需要的时候可以扩展。
规模较大的好处有:
减少client和master之间的交互。因为读写同一个块只是要在开始时向master请求块位置信息。对于读写大型文 件这种减少尤为重要。即使对于访问少量数据的随机读操作也可以很方便的为一个规模达几个TB的工作集缓缓存块位置信息。
Client在一个给定的块上很可能执行多个操作,和一个chunkserver保持较长时间的TCP连接可以减少网络负载 。
这减少了master上保存的元数据(metadata)的规模,从而使得可以将metadata放在内存中。这又会带来一 些别的好处。
不利的一面:
一个小文件可能只包含一个块,如果很多Client访问改文件的话,存储这些块的chunkserver将成为访问的热点。但在 实际应用中,应用程序通常顺序地读包含多个块的文件,所以这不是一个主要问题。
3.元数据
master存储了三种类型的metadata:文件的名字空间和块的名字空间,从文件到块的映射,块的副本的位置。所有的metadata都放在内存中。前两种类型的metadata通过向操作日志登记修改而保持不变,操作日志存储在master的本地磁盘并在几个远程机器上留有副本。使用日志使得我们可以很简单地、可靠地更新master的状态,即使在master崩溃的情况下也不会有不一致的问题。相反,mater在每次启动以及当有chuankserver加入的时候询问每个chunkserve r的所拥有的块的情况。
三、特点
1.采用中心服务器模式
GFS采用中心服务器模式来管理整个文件系统,可以大大简化设计,从而降低实现难度。
2.不缓存数据
缓存(Cache)机制是提升文件系统性能的一个重要手段,通用文件系统为了提高性能,一般需要实现复杂的缓存机制。GFS文件系统根据应用的特点,没有实现缓存。
3.在用户态下实现
文件系统作为操作系统的重要组成部分,其实现通常位于操作系统底层。以Linux为例,无论是本地文件系统如Ext3文件系统,还是分布式文件系统如Lustre等,都是在内核态实现的。在内核态实现文件系统,可以更好地和操作系统本身结合,向上提供兼容的POSIX接口。然而,GFS却选择在用户态下实现,主要基于以下考虑。
在用户态下实现,直接利用操作系统提供的POSIX编程接口就可以存取数据,无需了解操作系统的内部实现机制和接口,从而降低了实现的难度,并提高了通用性。
POSIX接口提供的功能更为丰富,在实现过程中可以利用更多的特性,而不像内核编程那样受限。
用户态下有多种调试工具,而在内核态中调试相对比较困难。
用户态下,Master和Chunk Server都以进程的方式运行,单个进程不会影响到整个操作系统,从而可以对其进行充分优化。在内核态下,如果不能很 好地掌握其特性,效率不但不会高,甚至还会影响到整个系统运行的稳定性。
用户态下,GFS和操作系统运行在不同的空间,两者耦合性降低,从而方便GFS自身和内核的单独升级。
4.只提供专用接口
通常的分布式文件系统一般都会提供一组与POSIX规范兼容的接口。其优点是应用程序可以通过操作系统的统一接口来透明地访问文件系统,而不需要重新编译程序。
我先说说GFS
首先我们要知道Google GFS是一种文件系统,是一个面向大规模数据密集型应用的、可扩展的分布式文件系统。GFS虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了高性能的服务。
那么他既然是一种文件系统,他首先就具有与过去的分布式文件系统很多相同的目标。但是,对于GFS的设计还是以对自己的应用的负载情况和技术环境的分析为基础的,不管现在还是将来,GFS和早期的分布式文件系统的设想都有明显的不同。
一、设计思路上的不同
1.组件失效被认为是常态事件,而不是意外事件。GFS包括几百甚至几千台普通的廉价设备组装的存储机器,同时被相当数量的客户机访问。GFS组件的数量和质量导致在事实上,任何给定时间内都有可能发生某些组件无法工作,某些组件无法从它们目前的失效状态中恢复。我们遇到过各种各样的问题,比如应用程序bug、操作系统的bug、人为失误,甚至还有硬盘、内存、连接器、网络以及电源失效等造成的问题。所以,持续的监控、错误侦测、灾难冗余以及自动恢复的机制必须集成在GFS中
2.按照传统的标准,文件都非常大。大小达几个GB的文件是很平常的。每个文件通常包含很多应用对象。当经常要处理快速增长的、包含数以万计的对象、长度达TB的数据集时,我们很难管理成千上万的KB规模的文件块,即使底层文件系统提供支持。因此,设计中操作的参数、块的大小必须要重新考虑。对大型的文件的管理一定要能做到高效,对小型的文件也必须支持,但不必优化。
3.大部分文件的更新是通过添加新数据完成的,而不是改变已存在的数据。在一个文件中随机的操作在实践中几乎不存在。一旦写完,文件就只可读,很多数据都有这些特性。一些数据可能组成一个大仓库以供数据分析程序扫描。有些是运行中的程序连续产生的数据流。有些是档案性质的数据,有些是在某个机器上产生、在另外一个机器上处理的中间数据。由于这些对大型文件的访问方式,添加操作成为性能优化和原子性保证的焦点。而在客户机中缓存数据块则失去了吸引力。
4.工作量主要由两种读操作构成:对大量数据的流方式的读操作和对少量数据的随机方式的读操作。在前一种读操作中,可能要读几百 KB,通常达1MB和更多。随机的读操作通常在一个随机的偏移处读几个 KB。性能敏感的应用程序通常将对少量数据的读操作进行分类并进行批处理以使得读操作稳定地向前推进,而不要让它来来回回的读。
5、工作量还包含许多对大量数据进行的、连续的、向文件添加数据的写操作。所写的数据的规模和读相似。一旦写完,文件很少改动。 在随机位置对少量数据的写操作也支持,但不必非常高效。
6、系统必须高效地实现定义完好的大量客户同时向同一个文件的添加操作的语义。
既然他在设计思路上跟过去的分布式文件系统有那么多不同,那么他的结构是怎么样的呢?
二、结构体系
1.单Master
单一的Master节点的策略大大简化了我们的设计。单一的Master节点可以通过全局的信息精确定位Chunk的位置以及进行复制决策。另外,我们必须减少对Master节点的读写,避免Master节点成为系统的瓶颈。客户端并不通过Master节点读写文件数据。反之,客户端向Master节点询问它应该联系的Chunk服务器。客户端将这些元数据信息缓存一段时间,后续的操作将直接和Chunk服务器进行数据读写操作。
首先,客户端把文件名和程序指定的字节偏移,根据固定的
Chunk大小,转换成文件的Chunk索引。然后,它把文件名和Chunk索引发送给Master节点。Master节点将相应的Chunk标识和副本的位置信息发还给客户端。客户端用文件名和Chunk索引作为key缓存这些信息。之后客户端发送请求到其中的一个副本处,一般会选择最近的。请求信息包含了Chunk的标识和字节范围。在对这个Chunk的后续读取操作中,客户端不必再和Master节点通讯了,除非缓存的元数据信息过期或者文件被重新打开。实际上,客户端通常会在一次请求中查询多个Chunk信息,Master节点的回应也可
能包含了紧跟着这些被请求的Chunk后面的Chunk的信息。在实际应用中,这些额外的信息在没有任何代价的情况下,避免了客户端和Master节点未来可能会发生的几次通讯。
2.块规模
块规模是设计中的一个关键参数。我们选择的是64MB,这比一般的文件系统的块规模要大的多。每个块的副本作为一个普通的Lin ux文件存储,在需要的时候可以扩展。
规模较大的好处有:
减少client和master之间的交互。因为读写同一个块只是要在开始时向master请求块位置信息。对于读写大型文 件这种减少尤为重要。即使对于访问少量数据的随机读操作也可以很方便的为一个规模达几个TB的工作集缓缓存块位置信息。
Client在一个给定的块上很可能执行多个操作,和一个chunkserver保持较长时间的TCP连接可以减少网络负载 。
这减少了master上保存的元数据(metadata)的规模,从而使得可以将metadata放在内存中。这又会带来一 些别的好处。
不利的一面:
一个小文件可能只包含一个块,如果很多Client访问改文件的话,存储这些块的chunkserver将成为访问的热点。但在 实际应用中,应用程序通常顺序地读包含多个块的文件,所以这不是一个主要问题。
3.元数据
master存储了三种类型的metadata:文件的名字空间和块的名字空间,从文件到块的映射,块的副本的位置。所有的metadata都放在内存中。前两种类型的metadata通过向操作日志登记修改而保持不变,操作日志存储在master的本地磁盘并在几个远程机器上留有副本。使用日志使得我们可以很简单地、可靠地更新master的状态,即使在master崩溃的情况下也不会有不一致的问题。相反,mater在每次启动以及当有chuankserver加入的时候询问每个chunkserve r的所拥有的块的情况。
三、特点
1.采用中心服务器模式
GFS采用中心服务器模式来管理整个文件系统,可以大大简化设计,从而降低实现难度。
2.不缓存数据
缓存(Cache)机制是提升文件系统性能的一个重要手段,通用文件系统为了提高性能,一般需要实现复杂的缓存机制。GFS文件系统根据应用的特点,没有实现缓存。
3.在用户态下实现
文件系统作为操作系统的重要组成部分,其实现通常位于操作系统底层。以Linux为例,无论是本地文件系统如Ext3文件系统,还是分布式文件系统如Lustre等,都是在内核态实现的。在内核态实现文件系统,可以更好地和操作系统本身结合,向上提供兼容的POSIX接口。然而,GFS却选择在用户态下实现,主要基于以下考虑。
在用户态下实现,直接利用操作系统提供的POSIX编程接口就可以存取数据,无需了解操作系统的内部实现机制和接口,从而降低了实现的难度,并提高了通用性。
POSIX接口提供的功能更为丰富,在实现过程中可以利用更多的特性,而不像内核编程那样受限。
用户态下有多种调试工具,而在内核态中调试相对比较困难。
用户态下,Master和Chunk Server都以进程的方式运行,单个进程不会影响到整个操作系统,从而可以对其进行充分优化。在内核态下,如果不能很 好地掌握其特性,效率不但不会高,甚至还会影响到整个系统运行的稳定性。
用户态下,GFS和操作系统运行在不同的空间,两者耦合性降低,从而方便GFS自身和内核的单独升级。
4.只提供专用接口
通常的分布式文件系统一般都会提供一组与POSIX规范兼容的接口。其优点是应用程序可以通过操作系统的统一接口来透明地访问文件系统,而不需要重新编译程序。
发表评论
-
配置免安装版Mysql
2016-03-08 23:46 425今天在下载MySQL的时候遇到一些麻烦,可能也是挺普遍的现象, ... -
swap算法
2015-12-13 16:30 1067在这里介绍几种交换算法 一、 最常用的一种 int x=1 ... -
c++链表实现2
2015-11-25 20:21 1213template <class Elem> cl ... -
acm实用小技巧
2015-11-23 21:46 2189在acm题目中经常会有十分麻烦的问题,有时候这些问题可以用一些 ... -
c++ 用数组实现栈类
2015-06-15 12:27 1444#include<iostream> #incl ... -
c++ 用类模版实现链表(c++语言程序设计第四版示例代码)
2015-06-12 22:28 930#include<iostream> #incl ... -
c++ 实现五种基础的排序算法
2015-06-11 22:29 1271#include<iostream> using ... -
java 实现自定义链表
2015-06-06 21:33 15681.链表结构 链表是链式的结构 2.链表的组成 ... -
c++ 用类模版实现数组类
2015-06-05 01:18 3918最近c++学到数组类,写了代码将他实现,基本具有vector类 ... -
java 线程弹球小游戏
2015-06-03 19:40 749最近java学到线程,于是做了一个线程弹球的小游戏,不过还没完 ... -
c++运算符重载
2015-05-30 01:06 413一、加+,减-,乘*,除/ 的运算符重载 Rational ... -
java 链表
2015-05-25 20:52 01.链式结构是什么样的? 2.链表的组成 链表是由 ... -
算法竞赛入门经典(第二版)第2章习题
2015-05-25 20:43 52942.4.1 输出技巧 #include <stdio.h ... -
java异常处理机制
2015-05-21 21:29 472java异常关键字有以下几个,分别为 try catch fi ... -
java 关键字
2015-05-14 22:49 590关键字是事先定义的,有特别意义的标识符,有时又叫保留字。对于 ...
相关推荐
本科毕业设计-论文-课设-基于SSM+Vue+Mysql的手机商城销售系统项目.zip本科毕业设计-论文-课设-基于SSM+Vue+Mysql的手机商城销售系统项目.zip本科毕业设计-论文-课设-基于SSM+Vue+Mysql的手机商城销售系统项目.zip...
云计算-DNS分离解析与智能解析实验指南 云计算技术的发展使得云计算环境中的网络架构变得越来越复杂,而DNS(Domain Name System)作为网络架构中的一个关键组件,起着至关重要的作用。在云计算环境中,DNS的应用...
简单的个人可以进行的架构,可以使想要联系和学习的小白,看一下,主要是由tomcat+nginx来实现的,对后端服务器也需要进读写分离。
云计算期末设计——基于Hadoop平台的文字处理MapReduce程序+源代码+文档说明 -------- 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审...
云计算管理系统-基于Python和Flask设计实现-最新开发(含全新源码+详细设计文档). 【项目说明】 1、该项目是团队近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常...
在“零基础小白初学云计算”的学习过程中,第三天的学习重点很可能是理解云计算如何与前端网站开发相结合。让我们深入探讨一下这个主题。 首先,我们来理解什么是云计算。云计算是一种通过互联网提供计算资源和服务...
本科毕设-课设-基于SpringMVC+MyBatis开发学生管理系统.zip本科毕设-课设-基于SpringMVC+MyBatis开发学生管理系统.zip本科毕设-课设-基于SpringMVC+MyBatis开发学生管理系统.zip本科毕设-课设-基于SpringMVC+MyBatis...
基于VGG16-LSTM进行基于关键帧的视频场景识别python源码.zip基于VGG16-LSTM进行基于关键帧的视频场景识别python源码.zip基于VGG16-LSTM进行基于关键帧的视频场景识别python源码.zip基于VGG16-LSTM进行基于关键帧的...
C++ 小白手册--环境搭建与程序调试.pdf
人工智能-深度学习-语音识别-基于STM32的孤立词语音识别项目源码+毕设论文资料,该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要...
毕业设计-JavaWEB项目基于SSM+mysql框架实现的在线商城系统源码.zip毕业设计-JavaWEB项目基于SSM+mysql框架实现的在线商城系统源码.zip毕业设计-JavaWEB项目基于SSM+mysql框架实现的在线商城系统源码.zip毕业设计-...
谷歌的三大论文是分布式计算领域的里程碑,它们定义了现代大数据处理的基础框架和技术。这三篇论文分别是《MapReduce:大规模数据集的并行计算》、《Bigtable:一个结构化数据的分布式存储系统》和《The Google File...
不仅适合小白入门进阶,还可作为毕设项目、课程设计、大作业、比赛初期项目立项演示等。 4、如果基础还不错,又热爱学习钻研,也可基于此项目基础上进行修改进行二次开发。 本人也是技术狂热者,如果觉得此项目对您...
小白7620A-aikuai-1.3.1
"小白开题-论文.zip" 这个文件包显然包含了与论文撰写相关的资料,特别是对于初学者或者“小白”来说,可能是指导如何开始论文写作的资源。在这个压缩包里,我们找到了一个名为 "小白开题-论文.doc" 的文档,这很...
资源专区-小白必看-【网络安全】资源-网络安全资料题整理
资源专区-小白必看-python学习资料大全
小白入门sharding-jdbc,数据库中间键
基于flask的web端三维模型重建系统源码+文档说明-毕业设计,该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工...
资源专区-小白必看-【计算机二级】资源-计算机二级习题整理