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主服务器 存放文件系统所有的元数据,包括名字空间、访问控制、文件到块的映射、块物理位置等相关信息
通过服务器端和客户端的联合设计,GFS对应用支持达到性能与可用性最优,GFS是为Google应用程序本身而设计的,在内部部署了许多 GFS 集群,有的集群拥有超过 1 000 个存储节点,超过 300T 的硬盘空间,被不同机器上的数百个客户端连续不断地频繁访问
GFS 的系统架构 如下图所示
由此可看出,
读操作:客户端不通过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 函数去执行
M 代表 Map 函数的执行,R 代表 Reduce 函数的执行
3、 BigTable分布式大规模数据库管理系统
特点:大规模,弱一致性(以应对Google 应用程序需要处理大量格式化以及半格式化数据的需求)
采用列存储的方式,管理的数据存储结构为:<row:string,column:string,time:int64>-->string
基本元素是:行,列,记录板和时间戳 记录板是一段行的集合体
数据库的数据项按行关键字的字典序来排列,将多个行组成一个记录板,每个服务器节点大约管理100个记录板
BigTable执行时的三个组件:链接到每个客户端的库,一个主服务器,多个记录板服务器
主服务器:分配记录板到记录板服务器以及负载均衡、垃圾回收等
记录板服务器:直接管理一组记录板,处理读写请求等
客户端读取数据时,首先从Chubby file中获取Root Tablet的位置,并从中读取相应Metadata tablet的位置信息
在从Metadata tablet 中读取(包含目标数据位置信息的)User Table的位置,从该table中读取目标数据的位置信息项
再根据此信息到服务器中特定位置读取数据
BigTable 系统依赖于集群系统的底层结构(分布式的集群任务调度器+ GFS+分布式的锁服务 Chubby)
BigTable 使用 Chubby 来保存根数据表格的指针,即用户可以首先从Chubby锁服务器中获得根表的位置,进而对数据进行访问
4、Chubby
- 一个非常棒的粗粒度锁
- 高可用、分布式数据锁服务
- 当有机器失效时,Chubby 使用 Paxos 算法来保证备份的一致性
- 其中的小型分布式文件系统的每一个单元都可以用来提供锁服务
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:初识Google云计算平台(GFS+MapReduce+BigTable+Chubby) - Python技术站