X
Published on
· Last modified on
· Public

分布式系统入门

最近一直在学习分布式系统,现在总算是感觉有点入门了,所以想写一写这一段时间的学习心得,希望能够对想和我一样自学分布式系统,却又无从下手不知道如何开始的同学一点帮助~

近两年来校招后台工程师的时候面试官很有兴趣考察分布式,这说明,熟悉和掌握一定的分布式系统知识对每一个后台工程师都是很有必要的,再说,这些知识也挺有趣的啊。分布式系统是一个很大的命题,这里,我学习的重点放在分布式计算和存储。

自学一样东西的时候,我们最怕的就是不系统,所以,先找一门课程的大纲,能够让我们知道自己将要面对的是一门怎样的知识,其中的重点在哪里。这里,我推荐的是结合CMU的15-440课程 http://www.cs.cmu.edu/~15-440/ 和MIT的6.824课程 http://nil.csail.mit.edu/6.824/2015/ 。首先说说CMU的课程,因为我觉得它的难度比较低,要求的论文也不多,在课程Schedule页面上,可以找到每一次课堂的重点内容,也可以看到,要学习分布式,需要先提前掌握操作系统,计算机网络和数据库相关的知识。前两门的重要性不言而喻,也相信大部分同学掌握的比较好了(这里顺便安利一下MIT的6.830操作系统课程,能够在在这门课上写一个完整操作系统哦!) ,对于数据库,如果只能算是停留在操作基本的SQL和懂几个范式的水平上的话(好像也是大部分学校教学的水平),那么可以先去看看《数据库系统概念》中第11章的索引,16-18章的事务部分,尤其要注意关系型数据库是如何维持ACID特性的,因为分布式存储中很重要的一个问题就是如何在ACID中的C一致性和系统的可用性之间做权衡。

好了,有了这些先验知识,我们就可以跟着CMU的课程表来走了,CMU提供了每一次课的内容的PDF,跟着很快的过一遍,心里大概也就对分布式有了一定的了解。但是,我们仅仅只是了解了一些基本概念而已,还有很多的内容要在MIT的那门课上去学习。MIT的课程会要求读很多的论文,基本是每次课都有一篇,挑的都是在某些方面很具有代表性的,很值得去读。更加重要的是,学习到现在,我们还没有真正的去写过一些程序,我们本来就是程序员不是吗,不写写程序怎么行,而且没有课程视频,真要一篇篇的读论文又显得有点枯燥无味,那你就绝对不能错过这门课的实验部分,也是这门课的精华所在,1到5的实验可以极大地帮助你了解为什么要有分布式系统,网上常常说得MapReduce到底是什么,在分布式计存储中需要注意哪些问题,当然,通过做这些实验,也能很好的锻炼你的工程能力,也能让你对分布式这个名词不再害怕。

如果一开始不想读论文,那就做实验去吧,不用担心知识上的不足,实验说明里会有详细的讲解,可能唯一会让你觉得有点难懂的就是lab3的实现Paxos算法了,没关系,先不读论文,可以找到Paxos的wiki页面,看懂这个wiki再配合实验说明中给的伪码就足够你完成这个实验了。

简单介绍一下这五个实验,lab1实现mapreduce那篇论文中的word count例子,很容易懂,建议结合论文顺便看看给的源码,看看如何去实现一个MapReduce计算框架。lab2实现一个主从备份的Key-Value存储服务器。lab3,实现paxos,嗯,这个有点烧脑。lab4,实现一个shard存储,要用到lab3的Paxos实现。lab5,之前的实验都没有写到硬盘,这个实验主要是要实现持久化。目前我还只是做到了lab4,等全部做完了,想认真的把每一个实验都写写实验报告。

好了,学习到这,基本上我们把课程的实验都过了一遍,现在是时候补一下之前没看的论文了。分布式的中文资料比较少,质量也良莠不齐,由于更新较快,所以很多东西都要自己去看论文才能了解。可以看看现在工业界中现实的产品和实验做的有什么不同,找找对应的论文,紧跟一下潮流,比如Spark,Google的Spanner,亚马逊的Dynamo,还有用的比较多的ZooKeeper是根据Google的Chubby来实现的,可以先看看Chubby的论文啊,其中就有之前比较头疼的paxos的身影呢。

如果手还是比较痒,想做个能写在简历上的东西的话,建议可以实现一下BT协议啊,带和不带Tracker服务器的都要实现,写在简历中可比FTP有逼格的多。

做到以上这些,应该算是已经把分布式系统入了个门,可以开始接下来的学习进阶之旅了!

Sign in or Sign up Leave Comment