主题:【原创】闲话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正常工作,就可以正常读取文件。
图二显示了三个备份的布局。
这个布局有什么缺陷?且听下回分解。
本帖一共被 3 帖 引用 (帖内工具实现)
- 相关回复 上下关系8
🙂【原创】闲话Google集群 [3] 布局
🙂不错,方便了我等懒得看英文paper的人 jet 字145 2008-09-03 01:22:16
🙂GFS,BIGTABLE,MAPREDUCE都思路很简单 黑色枪骑兵 字267 2008-09-04 20:44:55
🙂所言极对 邓侃 字300 2008-09-05 02:18:03
🙂which paper? mpc8240 字62 2008-09-05 13:17:24
🙂Google解剖学论文 1 邓侃 字561 2008-09-06 09:35:37
😜拆开来看,每个部件都很普通 美人他爹 字190 2008-09-06 17:22:44
🙂同意 jet 字30 2008-09-05 01:17:19