五千年(敝帚自珍)

主题:【原创】闲话Google集群 [3] 布局 -- 邓侃

共:💬15 🌺52
全看分页树展 · 主题
家园 【原创】闲话Google集群 [3] 布局

[1] 引子 链接出处

[2] 存在的理由 链接出处

[3] 布局

系统架构设计,以我个人体会,可以分为几个方面,机器和网络布局,数据流组织,控制流组织,负载均衡,线程规划,数据同步,数据恢复,系统安全和系统健康状态诊断等等。成为架构设计高手很难,但是入门并不那么困难。

我们不妨以Google File System(GFS)作为一个案例,逐一解剖这个系统的架构设计的各个方面。在分析完GFS以后,再解剖分析Google的分布式数据库,Bigtable的架构设计。如此分析多个系统的架构后,或许大家对系统架构设计就会有一个比较清晰的了解,我们的讨论也就会更深入,更有趣。

为什么要实现Google File System?最根本的原因,是因为要存放的数据的规模太大,以至于任何一台PC放不下,所以需要一个集群的PC来完成这个任务。数据的规模太大,也许是因为数据文件的数目很多,也有可能是因为单个文件的尺寸太大,也有可能是不仅单个文件的尺寸大,而且大尺寸的文件数目多。

设想一下,如果要存放的数据的规模是5000G,而一台PC的硬盘空间是500G,那么我们可以把数据分成十份,分别存放在不同的PC上。但是问题是如果我们要读取某个文件时,我们怎么知道这个文件在哪个PC里呢?有两个办法,

1. 逐个访问每个PC。但是这样的效率会比较差。

2. 另外再设一个PC,这个PC里存放着一个目录,专门记录哪些PC存放了哪些文件。这样的做法,好处是效率高,缺点是额外占用更多PC。

图一显示了这个布局。作为文件系统,主要功能无非是,1. 存放文件,2. 读取文件。

点看全图

外链图片需谨慎,可能会被源头改

存放:网络爬虫(Crawler)下载了形形色色的网页后,把这些网页发给存放目录的PC,简称目录服务器(master)。目录服务器决定用哪个PC来存放这些网页,简称数据存储器(ChunkServer)。

读取:等到有人想读取某个文件的时候,他可以向目录服务器发出请求,后者做以下几件事情,1. 先查询目录,确定文件存放在哪个机器,2.去目标机器读取所需文件,3. 把该文件返回给用户。

这个设计有以下几个主要问题。

1. 是否有必要占用额外PC,专门用来做目录服务器?譬如可以在数据存储器中,拨出一部份硬盘空间和内存,来存储目录。

这个办法是可行的,缺点是占用了一部份本来用来存放数据的硬盘以及内存空间。

另外一个缺点是,目录服务器通常很忙碌。如果存放文件甲的PC,同时兼做目录服务器,那么读取文件甲的速度,可能会低于读取其它文件的速度。

2. 无论存放还是读取文件,都必须经过目录服务器。数据存储器很多,但是目录服务器只有一个,千军万马过独木桥,目录服务器成为瓶颈。

解决办法是优化数据流的组织,我们在以后的章节中深入探讨。

3. 负载不均衡。譬如前一段时间,有关奥运会的文件被频繁读取,存放那些文件的数据存储器负荷很重。同样,存放某些经常被调用的程序的数据存储器,负荷也比其它机器重得多。

解决办法是优化负载均衡,甚至动态优化负载均衡,我们在以后的章节中深入探讨。

4. 万一某个数据存储器死机了,就会造成一部份数据无法读取。

解决办法是备份。把同一份文件,同时存放在多个PC上。当一台甚至多台PC死机了,只要还有一台PC正常工作,就可以正常读取文件。

图二显示了三个备份的布局。

点看全图

外链图片需谨慎,可能会被源头改

这个布局有什么缺陷?且听下回分解。

关键词(Tags): #Google#集群#互联网#操作系统#网络元宝推荐:老马丁, 通宝推匿名:1

本帖一共被 3 帖 引用 (帖内工具实现)
全看分页树展 · 主题


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河