读了 google 的几篇论文
周末在家赖床,把玩我的 treo 手机,从 google reader 上看到 myan 大大新近介绍 google 的三篇论文的中译版。
(插一句,google reader 的手机版做的相当不错,很烂的手机都可以方便的使用,界面简洁,节省 GPRS 流量,强烈推荐)
这三篇论文我都有所耳闻,GFS 的论文应该出来最早,前几年就有同事发过英文版的给我看过。MapReduce 耳边经常有人跟我提起。BigTable 听的比较少一点,但也知道大概是咋回事。
三篇论文中译本都没读过(更别说英文版我会仔细学习了)。我便躺在床上,捧着手机,细细品读。
这三篇其实都是解决大数据量,分布式处理的问题。说穿了,都没什么技术难点,也无啥革命性的技术创新,但系统实现起来绝对不简单。这个难度,体现在工程实现上的困难。
健壮的系统总是结构简单规则简单的,用冗余的数据提高效率,增加健壮度。
GFS 是另两个系统的基础,它最底层利用本地文件系统提供原子操作,而不是自己解决。这可以简化系统复杂度,我们在设计系统时就应该尽量简化每个层次上代码完成的工作。与之类似的,我在设计我们的游戏服务器架构的时候,数据储存一块没有使用标准数据库,而是依赖于内存与本地文件系统,也是基于这种考虑。
GFS 采用了单点的 master 调控全局,这样可以做出非常简单的设计。但是需要极度减轻加在其上的工作,最终让 client 在真正获取数据的时候不必直接和它通讯。我非常认同这一点,有时候设计一个单点总控的单元并非不合理。我们已经实现的登陆服务器就是这样的,用户只有一个登陆认证点,但认证完毕后不再需要保持连接。
整个系统中,其实可以有许多单元是单点的。只需要减轻其上任务的复杂度,往往都是可堪负荷的。至于单点故障的问题,在底层设计上可以允许发生错误并重试,而系统能够快速重启就够了。当然,并非系统所有的部分都适用,有些地方,相互备份的模块是必须的。
BigTable 满有意思的。我认为当初做出设计的最难点是合理的提出需求,把需求简化到最小的单位,然后就最基本的需求来实现和优化,得到一个高性能的分布式结构化数据存储方案。
比如完全的关系数据模型就是不必要的,但是版本控制就有必要。复杂的数据类型是没有必要的,只需要储存字符串就够了。合理的需求自然需要大量的实践经验来总结,而需求的合理则可以做出极大的性能优化。实现者最清楚怎样的需求能最大限度的优化;实践者最清楚哪些需求是合理的,必须的,哪些则是不重要的,可放弃的。我们对系统设计者的要求就是即有丰富的实践经验,又有足够的能力自己做实现。这样才能做出优秀的系统来。
最后说说 MapReduce ,原理不复杂。就是把大部分可分布式任务完成的要点提取出来:即数据分割、分布式叠代处理、去掉冗余的计算结果、结果合并。效率的提高在于冗余处理,用廉价的机器计算能力来减轻系统设计的复杂度。系统则专注于解决数据传输、分割、合并这些简单逻辑的高效实现上。并实现数据定位和数据运算的正交化。
以上我也就是简单评论几句,行家不必较真。目前我的工作范围内尚没有需求去设计实现类似的系统,所以暂时也没太多精力研究细节。我相信若真的做起实现来,困难会很多,工作量会很大,会碰到相当多初期没想到的难题。
随便再写几句最近的一些工作。
新同事报道,安排的工作是完成我前段做了一半的资源管理模块。几个月前,我那段代码几经修改后算是收工了,提交代码仓库后就没有修改过。但是我只完成了从本地文件系统中加载资源,这次打算把数据打包以及数据包读写的加上。
大约花了好几天的时间讲解代码和设计,也算新同事天资聪慧,硬是把我近千行毫无注释的代码给理解了一遍。想起有些地方很不规则的内部函数命名,以及偶尔几行自己都差点想不起的原始设计用意,真是汗颜。
最后,总算让人弄懂了,自己也输理了一遍当初的思路。值得庆幸的是,设计大体还算合理,这次新添加东西没有动任何老的接口,也没有新增加接口。该隐藏的信息都隐藏好了,该暴露的东西都用上了。新添加的代码跟老代码的正交性也还好,不大需要重复做一些工作。
表面上看起来应该很简单的东西,实际做出来还是满复杂的,我想这就是工程实现的难度吧。
Comments
Posted by: 福利工口姬 | (16) April 16, 2014 04:33 PM
Posted by: Cloud | (15) August 31, 2007 12:00 AM
Posted by: Atry | (14) August 30, 2007 11:22 PM
Posted by: Atry | (13) August 30, 2007 11:19 PM
Posted by: d | (12) August 25, 2007 04:36 PM
Posted by: Atry | (11) August 22, 2007 01:28 AM
Posted by: Cloud | (10) August 14, 2007 01:19 PM
Posted by: dayn9 | (9) August 14, 2007 09:23 AM
Posted by: Cofyc | (8) August 10, 2007 08:23 PM
Posted by: Linker M Lin | (7) August 10, 2007 09:10 AM
Posted by: alioxp | (6) August 10, 2007 09:04 AM
Posted by: longtrue | (5) August 7, 2007 07:56 PM
Posted by: ywchen2000 | (4) August 7, 2007 12:00 PM
Posted by: xLight | (3) August 7, 2007 09:41 AM
Posted by: ywchen2000 | (2) August 7, 2007 09:21 AM
Posted by: xLight | (1) August 7, 2007 12:05 AM