作者:phylips@bmy 时间:2011-2-26
出处:http://duanple.blog.163.com/blog/static/70971767201133011171419/
还在上研的时候,由于当时在做并行计算相关的方向,老师推荐阅读下google的MapReduce以做参考,当时并没有仔细的去看论文只是大概看了些中文的介绍。第一次真正阅读google关于分布式系统的论文大概是2009年,临近毕业,当我向未来公司的老大询问需要提前看下哪些资料的时候,老大告诉我只需要看google的三篇论文就可以了。那时才知道google的三篇经典论文:GFS MapReduce BigTable。于是便去网上搜索了下,并根据网上的推荐额外加了几篇将它们打印成册,其中增加的比较重要的两篇就是关于google cluster和chubby的论文,然后寒假的时候便把它们带回了家,阅读的时候发现,基本就cluster这篇还能理解,其他的都比较困难,尤其是Chubby,基本没有明白其中的内容,尽管如此还是把它们都通读了一遍。
到了2010年的下旬,开始实际接触类MapReduce的实际系统,随着工作的进行觉得还需要再次阅读下google的论文。但是阅读过后发现很快就忘记了,于是觉得应该自己翻译一下,这样一方面印象深刻,另一方面以后读起来也方便,同时还可以把一些理解记下,随着不断的深入也可以对它们进行纠正和深化。所以在10.1国庆期间,翻译了关于Cluster GFS MapReduce BigTable的几篇,而关于Chubby由于并未接触其相关的内容且本身相对更难理解一些,则准备以后再翻译。所以在当时,阅读只是针对google的那几篇论文,并没有产生这样一个系统的翻译计划。
后来又不断的了解到一些关于nosql的概念,而云计算和nosql的概念也成为当下的热题。在学习过程中,逐渐认识到以前对于云计算和nosql的认识更多的流于表面,而云计算和nosql这些概念实际上是建立在分布式领域数十年的研究基础之上的,如果要深入了解云计算和nosql就有必要对这样的一些基础性的理论进行学习。学习的方式有很多,比如阅读相关论文写下笔记,或者实现一个具体的系统。
最终决定先找到其背后的理论基础,然后把建立这些理论基础的原始论文重新阅读,并完整翻译出来,同时会穿插对其中内容的理解。最后有机会会再实现一个实验性的系统,以加深对理论的理解。
要找到其背后的理论脉络,有很多方式, 比如查看google一系列论文的参考文献,然后再从这些文献出发,如此递归,基本上就可以找到其背后的一系列理论基础。然后再结合论文本身内容,查阅网上关于这方面的一些推荐文章。正是通过这样一种方式,我逐渐选择出其中最为重要的一些论文,并进行归类,作为阅读的重点。这些论文基本上是分布式领域最为经典和重要的一些,同时它们也正是当前云计算和nosql系统的底层依赖的那些,所以我决定逐步对它们进行翻译,并记录阅读过程中的对某些内容的理解,同时也会涉及一些关于论文的有趣的八卦。
老实说翻译这样一系列的文章,是一个非常艰巨的工作。因为其中很多论文,涉及到分布式领域的基本理论问题,其中又有很多伴随着复杂的算法和证明。好在读研阶段的方向是高性能计算,对于并行分布式有些了解,同时有很长的一段时间内对于算法保持着强烈的兴趣,有着不错的算法阅读理解基础。即使这样,翻译如此众多的经典论文,其中理解偏颇,翻译错误之处在所难免,只能是在反复的阅读和回顾中,不断的修正,对于内容复杂的论文,相应的放慢阅读的速度,反复阅读,理解之后再形成文字。
翻译这些论文的目的,首先是对于自身学习过程的一个记录,同时方便以后的回顾以及继续的学习理解,同时将这些翻译内容发布在我的blog上(http://duanple.blog.163.com),希望能为对分布式领域感兴趣的同学提供一些参考性的资料,同时也可以让更多的人帮助纠正其中翻译和理解的失误之处。
根据目前的计划,会将这些论文分为如下几个系列,共60篇左右,预计在未来的一两年内完成:
一.google论文系列:
包括了google发布的最重要的那些论文。从创始人Sergey Brin 和Lawrence Page发表的奠定google搜索引擎基础架构的论文<<The anatomy of a large-scale hypertextual Web search engine>>,到作为当前云计算理论基础的GFS MapReduce BigTable Chubby及其底层的Cluster架构,以及一些更为高级的计算查询系统比如设计于MapReduce之上的脚本查询语言Sawzall,最新的海量数据实时查询系统Dremel,用来解决大规模图计算的Pregel,新一代存储系统MegaStore,新一代实时搜索系统核心–增量更新系统Percolator。
二.分布式理论系列:
主要涉及分布式领域的基本理论问题及一致性问题,其中有相当一部分是著名计算机科学家Leslie Lamport发表的论文。对该领域的拜占庭将军问题,FLP结论,Lease机制,用于解决分布式一致性的Paxos算法,2PC,3PC,分布式系统的错误检测,时序,状态确定方法进行学习,其中针对Paxos算法的论文会有好几篇。
三.Sql&NoSql理论系列:
从关系型数据库的ACID概念开始,到Nosql的理论基石。包括事务概念,CAP猜想及证明,BASE模型,最终一致性概念。此外还有IO的5分钟法则,一些重要的观点,原则和设计模式。
四.基本算法和数据结构:
主要是关系数据库及nosql系统尤其是Dynamo系统底层所依赖的算法和数据结构。包括B树,log merge tree,一致性hash,DHT,vector clock,merkle tree,gossip协议,lock-free数据结构。
五.基本系统和实践经验:
一些著名的产品系统:Berkle DB,yahoo的PNUT,亚马逊的Dynamo,Facebook的Cassdara的官方论文。著名互联网公司的实践经验总结,包括google,yahoo,youku,twitter,ebay,豆瓣,淘宝,amazon,facebook,renren等。以及一些知名人士在该领域的一些文字总结或演讲内容,比如Jeff Dean。
六.系统实现基础:
分布式监控系统ganglia chukwa,protocolbuffer,tcp/ip协议,多线程编程,锁和同步,网络编程框架,poll和epoll等在编程实现中的一些问题。
七.其他
一些经典性的计算机科学相关文章的翻译,比如Reflection on Trustin trust,who needs an artitect,Go To statements considered harmful。同时可能会在这部分加入一些原创性的文字,而不再是单纯的翻译内容。
[符号说明]
在论文原内容之外,还会添加的一些解释性及理解性的文字,通过不同的符号用来标识它们的类型。对于这些文字通常会标红,或采用其他彩色文字,以与原论文内容区分。
():原文中本来就有的解释性内容
[]:与原文内容无直接相关的附加性的文字
{!}:对原文内容的理解性文字,主要说明那些比较难理解的部分
{?}:对原文内容尚未理解的地方,存在的一些疑问
{!?}:对原文内容的理解性文字,但是并不确定其正确性