Google技术知多少
google技术都具有标杆作用,也是体现了目前互联网各个技术的最高水平,其论文更是开源界的参考依据。下面从文件系统,分布式存储及高性能计算方面总结一下google的各大技术。
文件系统
GFS即Google File System,是google的分布式文件系统。GFS采用主从模式,主要分为主控服务器,数据服务器和GFS客户端三部分。主控服务器负责所有数据服务器的检索/查询,提供管理服务;数据服务器是实际的数据存储服务器,以chunk为单位;GFS客户端提供应用程序操作GFS的接口API。整体架构如图1所示。
图1 GFS整体架构(图来源于百度百科)
从图1可以看出,应用程序读写数据流程如下:
- 客户端将应用程序提供的读写位置和大小转换成chunk index,同时将文件名file name一并发送给master请求读写
- master根据上述提供的信息,查询chunk index与chunkserver的映射表,得到应该读写的chunkserver服务器地址
- 客户端根据master返回的地址,直接与chunkserver进行交互
分布式存储
- Bigtable
Fay Change,Jeffrey Dean, Sanjay Ghemawat等人设计开发了bigtable分布式存储系统,开源界有Hbase对应,同时,Jeffrey和Sanjay推出了开源数据存储levelDB,其功能特点与bigtable非常类似。
Bigtable将数据存放在sstable和memtable中,前者为磁盘文件,后者为内存数据。bigtable在接收到写入操作时,首先将命令写入到log文件,再往memtable中写入,如果memtable已经满,则会自动merge到sstable中,merge过程分为:minor,major,full三种。minor指将memtable合并成一个新的sstable;major指将memtable与部分sstable合并成新的sstable;full则指将memtable与全部sstable进行合并,将已经标记为删除的记录删除掉,是比较耗时的但能减小存储空间。在levelDB中有两种合并方式:minor和major,minor基本相同,在major方式中,levelDB按照相同的level内部进行合并。sstable,memtable及log如图2所示。
图2 Bigtable结构图
Bigtable的整体结构与GFS类似,可以分为主控服务器master,子表服务器tablet和客户端client。管理数据使用chubby系统和元数据表(Meta Table)共同维护系统数据的管理。Meta Table记录了具体某个子表存储在哪个子表服务器上,它也被切割成多份存储在不同的子表服务器上。被切割的第一个子表被称为root tablet,根据root tablet可以找到完整的meta table,除了root tablet的其他元数据子表存储了子表服务器的信息,这样的三层结构查询可以定位到具体的子表,如图3所示。
图3 bigtable的三层查询结构
- Megastore
MegaStore最大的特点是提供了实体内的强一致性,实体间的弱一致性。对于大数据的存储,bigtable提供高可用性,但只能提供弱一致性,为了提供跨行一致性,google研发了MegaStore,既能提供nosql的高可用性,又能吸收关系数据库的一致性。其基本思路是将大规模数据进行细粒度切分,切分的若干实体内部提供满足ACID语义的强一致性服务,实体间提供相对弱的一致性服务,从而使用了折中的办法。如图4所示。
图4 Megastore 实体切分及强弱一致性支持示意图
实体之间的通信使用消息队列,如图5所示。由于实体间可以被定义有很多共性,大部分数据操作发生在实体内部,通信开销不大,如果需要跨实体间通信,则使用two-phase提交方式保证通信及同步。
图5 实体间通信通过消息队列
高性能计算
- MapReduce
MapReduce是Google高性能计算基础,开源界hadoop就是其效仿者。MapReduce正如其名,计算模型中包含两个步骤:map和reduce。map过程是将原始数据通过某种策略分发到不同的节点进行计算,这些节点之间的计算相互独立互不影响;reduce过程则是将各个节点的计算结果进行收集整理和汇总,输出最终结果。由于整个过程可以高效地利用计算机的处理能力,达到处理大数据量计算的目的。处理过程如图6所示。