Google的云计算基础架构模式包括4个相互独立又紧密结合的系统:Google File System分布式文件系统GFS,MapReduce编程模式,分布式的锁机机制Chubby,和大规模分布式数据库BigTable

1、Google File System 文件系统(GFS) 

  • 性能:可伸缩性、可靠性及可用性,同时受到 Google 应用负载和技术环境的影响,表现在4个方面

(1)应对大量节点的失效问题,通过软件将容错以及自动恢复功能集成在系统中

(2)构造特殊的文件系统参数,文件通常大小以 G 字节计,并包含大量的小文件

(3)增加文件追加操作,优化顺序读写速度

(4)文件系统的某些具体操作不再透明,需要应用程序的协助完成

  • 一个GFS集群,包含一个主服务器和多个块服务器
  • 文件被分割成64MB的块,块服务器把块作为 Linux 文件保存在本地硬盘上,并根据指定的块句柄和字节范围来读写块数据
  • 为保证数据可靠性,每个块被缺省保存 3 个以上的备份(冗余存储
  • Master主服务器 存放文件系统所有的元数据,包括名字空间、访问控制、文件到块的映射、块物理位置等相关信息
  • 初识Google云计算平台(GFS+MapReduce+BigTable+Chubby)

通过服务器端和客户端的联合设计,GFS对应用支持达到性能与可用性最优,GFS是为Google应用程序本身而设计的,在内部部署了许多 GFS 集群,有的集群拥有超过 1 000 个存储节点,超过 300T 的硬盘空间,被不同机器上的数百个客户端连续不断地频繁访问

GFS 的系统架构 如下图所示

初识Google云计算平台(GFS+MapReduce+BigTable+Chubby)
Google File System 的系统架构 

由此可看出,

读操作:客户端不通过Master读取数据,避免了大量读操作使Master成为系统瓶颈。

               客户端从Master获取目标数据块的位置信息后,直接与块服务器交互进行操作

写操作:客户端在获取Master的写授权后,将数据传输给所有的数据副本,当所有的数据副本(备份)都收到修改的数据后,客户端才发出写请求控制信号,

              所有的数据副本更新完数据后,由主副本向客户端发出写操作完成控制信号

2、MapReduce 分布式编程环境 

Google构造MapReduce编程规范来简化分布式系统的编程

应用程序编写人员只需将精力放在应用程序本身,而关于集群的处理问题,包括可靠性和可扩展性,则交由平台来处理

MapReduce 通过“Map(映射)”和 “Reduce(化简)”这两个简单概念来构成运算基本单元,用户只需提供自己的 Map 函数以及 Reduce 函数即可并行处理海量数据

如:一个基于 MapReduce 编程的用来统计文本中所有单词出现的次数的程序伪代码

此map函数中,用户的程序将文本中所有出现的单词都按照出现计数1(以Key-Value对的形式) ,发射到 MapReduce 给出的一个中间临时空间中,通过 MapReduce 中间处理过程,将所有相同的单词产生的中间结果分配到同样一个 Reduce 函数中,而每一个 Reduce 函数则只需把计数累加在一起,即可获得最后结果

map(String input_key, String input_value):   
   for each word w in input_value: 
         EmitIntermediate(w,“1”);   
reduce(String output_key, Interator intermediate_values):
      int result = 0;   
      for each v in intermediate_values:  
           result+=ParseInt(v);  
      Emit(AsString(result));

// input_key: document name   
// input_value: document contents    

 // output_key: a word 
  // output_values: a list of counts  

 MapReduce 执行过程,分为 Map 阶段以及 Reduce 两个阶段,都使用了集群中的所有节点

在两个阶段之间还有一个中间的分类阶段,即将中间结果中包含相同key 的结果交给同一个 Reduce 函数去执行

初识Google云计算平台(GFS+MapReduce+BigTable+Chubby)
MapReduce 处理程序的执行过程

                                                               M 代表 Map 函数的执行,R 代表 Reduce 函数的执行

3、 BigTable分布式大规模数据库管理系统 
 特点:大规模,弱一致性(以应对Google 应用程序需要处理大量格式化以及半格式化数据的需求)

采用列存储的方式,管理的数据存储结构为:<row:string,column:string,time:int64>-->string

基本元素是:行,列,记录板和时间戳   记录板是一段行的集合体

数据库的数据项按行关键字的字典序排列将多个行组成一个记录板,每个服务器节点大约管理100个记录板

初识Google云计算平台(GFS+MapReduce+BigTable+Chubby)
数据模型

BigTable执行时的三个组件:链接到每个客户端的库,一个主服务器,多个记录板服务器

   主服务器:分配记录板到记录板服务器以及负载均衡、垃圾回收等

   记录板服务器:直接管理一组记录板,处理读写请求等

   客户端读取数据时,首先从Chubby file中获取Root Tablet的位置,并从中读取相应Metadata tablet的位置信息

   在从Metadata tablet 中读取(包含目标数据位置信息的)User Table的位置,从该table中读取目标数据的位置信息项

再根据此信息到服务器中特定位置读取数据

初识Google云计算平台(GFS+MapReduce+BigTable+Chubby)

BigTable 系统依赖于集群系统的底层结构(分布式的集群任务调度器+ GFS+分布式的锁服务 Chubby)

初识Google云计算平台(GFS+MapReduce+BigTable+Chubby)
 BigTable 系统的组织结构 

BigTable 使用 Chubby 来保存根数据表格的指针,即用户可以首先从Chubby锁服务器中获得根表的位置,进而对数据进行访问

4、Chubby

  • 一个非常棒的粗粒度锁
  • 高可用、分布式数据锁服务
  • 当有机器失效时,Chubby 使用 Paxos 算法来保证备份的一致性
  • 其中的小型分布式文件系统的每一个单元都可以用来提供锁服务