要问为啥单独把这个算法拎出来。。。相信我,等你学到它就会明白,用Raft作者在论文里的话来说,“…Paxos is exceptionally difficult to understand”;但它又特别重要,目前商业应用(例如Google的Chubby)中的distributed consensus算法实现的基本都是Paxos的变种。
500lines/cluster at master · aosabook/500lines · GitHub
当你把作业里的lab3做完,自己实现了一个Paxos之后,可以来Github上看看大牛是怎么写的。
顺便安利一下这个叫做“500lines”的项目:这个项目其实是一本书( The Architecture of Open Source Applications)的源代码附录,是一堆大牛合写的。这个项目个人觉得非常适合看完了一本编程语言教材、想写点实际的东西又不知道如何下手的同学们。里面包含了各种各样的小工程(正如书的名字所述,每个文件都不超过500行),每个小工程都是由某个大牛(比如说Guido van Rossum,Python的作者)负责撰写,包含详尽的测试代码,以及最重要的,文档——不是那种描述API的文档,而是用来教学的文档,里面会详细地解释整个工程的设计思路、所用技术的原理,还有大量的参考文献。
回复 ( 10 )
Update:
原问题还请教了有哪些开源项目可以参与实践,这个我了解不多,请有需要的看其它人的回答。
1. Distributed-systems-readings
这个网址里收集了一堆美帝各TOP大学分布式相关的课程,我就是从这找到MIT的那门课的。
2. Paxos算法
要问为啥单独把这个算法拎出来。。。相信我,等你学到它就会明白,用Raft作者在论文里的话来说,“…Paxos is exceptionally difficult to understand”;但它又特别重要,目前商业应用(例如Google的Chubby)中的distributed consensus算法实现的基本都是Paxos的变种。
Paxos vs Raft
这个网站是Raft算法的作者为教授Paxos和Raft算法做的,其中有两个视频链接,分别讲上述两个算法,个人认为是目前看过的相关资料中讲的最好的。
500lines/cluster at master · aosabook/500lines · GitHub
当你把作业里的lab3做完,自己实现了一个Paxos之后,可以来Github上看看大牛是怎么写的。
顺便安利一下这个叫做“500lines”的项目:这个项目其实是一本书( The Architecture of Open Source Applications)的源代码附录,是一堆大牛合写的。这个项目个人觉得非常适合看完了一本编程语言教材、想写点实际的东西又不知道如何下手的同学们。里面包含了各种各样的小工程(正如书的名字所述,每个文件都不超过500行),每个小工程都是由某个大牛(比如说Guido van Rossum,Python的作者)负责撰写,包含详尽的测试代码,以及最重要的,文档——不是那种描述API的文档,而是用来教学的文档,里面会详细地解释整个工程的设计思路、所用技术的原理,还有大量的参考文献。
3. Youtube
好几次我碰到某篇论文实在读不懂,就上Google一搜,然后发现Youtube上一堆讲解这篇论文的视频。。。
4. The Log: What every software engineer should know about real-time data’s unifying abstraction
这是Linkedin的某位工程师的一篇博客文章,文章认为Log应该作为分布式系统架构的核心,并举了他们使用的一个叫做Kafka的东西作为例子。文章写的贼长,但是通俗易懂,会把需要用到的基础知识都先交代清楚,不用担心看不懂。另外后面有成吨的参考文献和链接,涵盖了他们实现那个系统时涉及到的各种技术,很多都是经典的论文,个人觉得帮助很大。
===========================================================
原回答:
当然是刷这门课了:
MIT 6.824 Distributed System
6.824 Schedule: Spring 2015
这只是一个课程主页,没有上课的视频,但是并不影响你跟着它上课:每一周读两篇课程指定的论文,读完之后看lecture-notes里对该论文内容的讨论,回答里面的问题来加深理解,最后在课程lab里把所看的论文实现。当你把这门课的作业刷完后,你会发现自己实现了一个分布式数据库。
课程lab都是用Go写的,你可以从MIT的git服务器上把作业clone下来。每份作业都有详尽的指导意见,还配有详尽的测试代码,供你写完之后测试自己的实现是否正确。这些测试代码会在本地模拟分布式情况下可能碰到的各种问题(node crash、丢包、延迟、网络partition等等)。说实话我觉得这些测试代码的价值也很大,光是读这些代码就可以学到不少东西。
这门课的阅读量和coding量都不小,如果能坚持刷完相信题主对分布式系统的理解会加深不少。我目前刷了一半多了,lab也做了一半左右,整出了一个基于Paxos的key-value数据库,题主有兴趣的话可以一起刷。
NSQ :
InfluxDB:
seaweedfs
golang-distributed-filesystem
quora 上的一个顶级好贴:What are some good resources for learning about distributed computing? Why?
CMU上的一个课程:
未完待续…,
注:github上有关 golang 上的 分布式系统很多,尤其分布式基础架构与存储方面的。很值得我们学习。
pingcap/tidb · GitHub 一个用go写的分布式数据库 欢迎关注和参与
更新:最近做了一个改进的版本。支持非常类似的pure Go 的分布式map reduce 系统。
这个版本更加高效。牺牲了一点点type checking, 需要做interface{} casting。但是速度比用reflection高效非常多。
=====================
Glow: a map reduce system in Go
现在基于go的mapreduce框架基本上都是单机版的,靠goroutine, channel来意思一下。Glow是我所知道的唯一分布式数据处理的纯Go的实现。语法接近于spark,运行更简单,不需要各种复杂的setup.
需要有人参与!
自己整理了一个分布式系统(Distributed System)资料Qix/ds.md at master · ty4z2008/Qix · GitHub 并且刚刚收录了 @郭翔宇@赵玉豪 所说内容.
希望可以帮助到题主
可以了解一下pingcap的tidb
开源项目的话把 chrislusf/seaweedfs · GitHub 看明白了,我觉得就是最好的入门途径了。
毕竟这项目整个架构思路还是比较清晰的,文档也写的不错。
然后看懂了之后再做一些优化的pr(我记得可优化的点还是不少的),就更happy了。
Google有个开源的 golang开发的,可以看看。先了解透现有的分布式计算系统/存储系统的主要核心特点和短板,再去思考你的。走弯路虽然能带来一丢丢成长,但代价巨大。刷题看视频那是学生的做法 不适合工程
这个课程6.824 Schedule: Spring 2015我建立了一个Github工程
mrunix/lecture · GitHub
通过这个课程学习Golang不错。
完成Lab1 Part I.
后续继续努力,不知道全部搞完得多少时间。
分布式无非 解决计算和存储,提出问题,然后解决。
比如如何自动发现新加入的节点
如何分发任务到比较闲的节点
如何保证汇总结果的正确和效率
现有的一些东西很多hadoop,mysql,elastic什么的,实现其中的一个功能。。