文档章节

Google文件系统(转自维基百科)

xionghuiCoder
 xionghuiCoder
发布于 2016/03/29 17:26
字数 1389
阅读 112
收藏 0

Google文件系统(英语:Google File System,缩写为GFS或GoogleFS),一种专有分布式文件系统,由Google公司开发,运行于Linux平台上[1]。尽管Google在2003年公布了该系统的一些技术细节,但Google并没有将该系统的软件部分作为开源软件发布。[2]

2013年,Google公布了Colossus项目,作为下一代的Google文件系统[3]

历史

设计

GFS专门为Google的核心数据即页面搜索的存储进行了优化。数据使用大到若干G字节的大文件持续存储,而这些文件极少被删除、覆盖或者减小;通常只是进行添加或读取操作。它也是针对Google的计算机集群进行的设计和优化,这些节点是由廉价的“常用”计算机组成,这就意味着必须防止单个节点的高损害率和随之带来的数据丢失。其它设计理念包括高数据吞吐率,甚至这带来了访问反应期变差。

节点分为两类:节点和Chunkservers。Chunkservers存储数据文件,这些单个的文件象常见的文件系统中的簇或者扇区那样被分成固定大小的数据块(这也是名字的由来)。每个数据块有一个唯一的64位标签,维护从文件到组成的数据块的逻辑映射。每个数据块在网络上复制一个固定数量的次数,缺省次数是3次,对于常用文件如可执行文件的次数要更多。

主服务器通常并不存储实际的大块数据,而是存储与大块数据相关的元数据,这样的数据如映射表格将64位标签映射到大块数据位置及其组成的文件、大块数据副本位置、哪个进程正在读写特定的大数据块或者追踪复制大块数据的“快照”(通常在主服务器的激发下,当由于节点失败的时候,一个大数据块的副本数目降到了设定的数目下)。所有这些元数据通过主服务器周期性地接收从每个数据块服务器来的更新(“心跳消息”)保持最新状态。

操作的允许授权是通过限时的、倒计时“租期”系统来处理的,主服务器授权一个进程在有限的时间段内访问数据块,在这段时间内主服务器不会授权其它任何进程访问数据块。被更改的chunkserver——总是主要的数据块存储器,然后将更改复制到其它的chunkserver上。这些变化直到所有的chunkserver确认才存储起来,这样就保证了操作的完整性和原子性

访问大数据块的程序首先查询主服务器得到所要数据块的位置,如果大数据块没有进行操作(没有重要的租约),主服务器回答大数据块的位置,然后程序就可以直接与chunkserver进行联系接收数据(类似于Kazaa和它的超级节点)。

批评意见

只能有一个主服务器——代码不允许存在多个主服务器。这看起来是限制系统可扩展性和可靠性的一个缺陷,因为系统的最大存储容量和正常工作时间受制于主服务器的容量和正常工作时间,也因为它要将所有的元数据进行编制,并且因为几乎所有的动作和请求都经过它;但是Google的工程师们辩解说事实并不是这样。元数据是非常紧凑的,仅仅只有数K到数M的大小,并且主服务器通常是网络上性能最好的节点之一;至于可靠性,通常有一个“影子”主服务器制作主服务器的镜像,一旦主服务器失败它将接替工作。另外,主服务器极少成为瓶颈,因为客户端仅仅获取元数据然后将它们缓存起来;随后的交互工作是直接与chunkservers进行。同样,使用单个的主服务器可以大幅度地降低软件的复杂性,如果有多个的主服务器,软件将变得复杂以能够保证数据完整性、自动操作、负载均衡和安全性。

参考文献

  1. ^ Google提供的论文The Google File System中,多处提到

  2. ^ "Despite having published details on technologies like the Google File System, Google has not released the software as open source and shows little interest in selling it. The only way it is available to another enterprise is in embedded form--if you buy a high-end version of the Google Search Appliance, one that is delivered as a rack of servers, you get Google's technology for managing that cluster as part of the package." "How Google Works"

  3. ^ Google's Colossus Makes Search Real-Time by Dumping MapReduce, High Scalability (World Wide Web log), 2010-09-11.

外部链接

参见

本文转载自:https://zh.wikipedia.org/wiki/Google%E6%AA%94%E6%A1%88%E7%B3%BB%E7%B5%B1

共有 人打赏支持
xionghuiCoder
粉丝 82
博文 34
码字总数 31340
作品 4
海淀
程序员
私信 提问
2015 Google hosts 持续更新【更新于:2015-09-22】

本页面长期更新Google、谷歌学术、维基百科、ccFox.info、ProjectH、3DM、Battle.NET 、WordPress、MicrosoftLive、GitHub、Box.com、SoundCloud、inoreader、Feedly、FlipBoard、Twitter、F...

天天顺利
2015/09/23
0
1
common-tools(1)之中文相关工具类使用(ZhUtil)

发了个自己写的工具包,发现可能是样例代码太少了,导致反响不够强烈啊。那么从现在开始就以博文的形式介绍下我的这个工具包有哪些功能。 工具包我发布到github上了,开源中国的地址是:htt...

路小磊
2013/02/24
0
2
维基百科停摆原因:光纤故障服务中断

维基百科本月6日位于佛州的数据中心发生光纤断线的技术性意外,致使数百万使用者无法访问。维基百科昨日在太平洋时间早上6:30左右出现无法存取或严重延迟的情形,当时网站通过Twitter公告,网...

oschina
2012/08/08
1K
3
如何使用中文维基百科语料

前言 在做自然语言处理时很多时候都会需要中文语料库,高质量的中文语料库较难找,维基百科和百度百科算是比较不错的语料库。其中维基百科会定时将语料库打包发布 ,可以下载最新版本的语料库...

超人汪小建
2017/10/26
0
0
java获取系统语言(区分简体中文和繁体中文)

之前做android应用时遇到过一个问题,就是根据语言的不同而显示不同的内容 网上很多代码都是错误的,起码无法区分简体和繁体,这里给出一种方法 不涉及android任何知识,所以就归类到java这边...

Airship
2015/02/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring应用学习——AOP

1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就...

江左煤郎
今天
3
0
eclipse的版本

Eclipse各版本代号一览表 Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环...

mdoo
今天
1
0
SpringBoot源码:启动过程分析(一)

本文主要分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 还是老套路,先把分析过程的时序图摆出来:时序图-SpringBoot2.10启动分析 二.源码分析 首...

Jacktanger
今天
3
0
小白带你认识netty(二)之netty服务端启动(上)

上一章 中的标准netty启动代码中,ServerBootstrap到底是如何启动的呢?这一章我们来瞅下。 server.group(bossGroup, workGroup);server.channel(NioServerSocketChannel.class).optio...

天空小小
今天
3
0
聊聊storm trident batch的分流与聚合

序 本文主要研究一下storm trident batch的分流与聚合 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout) .p......

go4it
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部