想用 GO 写一个开源分布式数据处理相关的系统,并学习 GO,有什么建议?

理由
举报 取消

想学习GO,并且在这个过程中为社区贡献自己的力量,用在分布式处理方面都可以考虑,比如存储引擎,分布式处理编程框架,机器学习,数据挖掘,系统管理配置等等。可以开发新的系统或者参加目前已有的开源项目,大家有什么建议呢?目前开源社区缺少那些必要的可以用Go写的组件?从哪里开始比较好?或者开源的分布式数据处理相关的GO项目,有没有需要帮忙的,我感兴趣我也可以参与进来。我的微信:a311155QQ:311155

2017年6月16日 10 条回复 1069 次浏览

发起人:段昊 初入职场

★ 麻将一对一授课 http://www.

回复 ( 10 )

  1. xyguo
    理由
    举报 取消

    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数据库,题主有兴趣的话可以一起刷。

  2. 匿名用户
    理由
    举报 取消

    NSQ :

    InfluxDB:

    seaweedfs

    golang-distributed-filesystem

    quora 上的一个顶级好贴:What are some good resources for learning about distributed computing? Why?

    CMU上的一个课程:

    未完待续…,

    注:github上有关 golang 上的 分布式系统很多,尤其分布式基础架构与存储方面的。很值得我们学习。

  3. 申砾
    理由
    举报 取消

    pingcap/tidb · GitHub 一个用go写的分布式数据库 欢迎关注和参与

  4. Chris Lu
    理由
    举报 取消

    更新:最近做了一个改进的版本。支持非常类似的pure Go 的分布式map reduce 系统。

    这个版本更加高效。牺牲了一点点type checking, 需要做interface{} casting。但是速度比用reflection高效非常多。

    =====================

    Glow: a map reduce system in Go

    现在基于go的mapreduce框架基本上都是单机版的,靠goroutine, channel来意思一下。Glow是我所知道的唯一分布式数据处理的纯Go的实现。语法接近于spark,运行更简单,不需要各种复杂的setup.

    需要有人参与!

  5. 廖君
    理由
    举报 取消

    自己整理了一个分布式系统(Distributed System)资料Qix/ds.md at master · ty4z2008/Qix · GitHub 并且刚刚收录了 @郭翔宇@赵玉豪 所说内容.

    希望可以帮助到题主

  6. 黄一炏
    理由
    举报 取消

    可以了解一下pingcap的tidb

  7. yanyiwu
    理由
    举报 取消

    开源项目的话把 chrislusf/seaweedfs · GitHub 看明白了,我觉得就是最好的入门途径了。

    毕竟这项目整个架构思路还是比较清晰的,文档也写的不错。

    然后看懂了之后再做一些优化的pr(我记得可优化的点还是不少的),就更happy了。

  8. 阿法科
    理由
    举报 取消

    Google有个开源的 golang开发的,可以看看。先了解透现有的分布式计算系统/存储系统的主要核心特点和短板,再去思考你的。走弯路虽然能带来一丢丢成长,但代价巨大。刷题看视频那是学生的做法 不适合工程

  9. 立峰
    理由
    举报 取消

    这个课程6.824 Schedule: Spring 2015我建立了一个Github工程

    mrunix/lecture · GitHub

    通过这个课程学习Golang不错。

    完成Lab1 Part I.

    后续继续努力,不知道全部搞完得多少时间。

  10. 用户头像
    理由
    举报 取消

    分布式无非 解决计算和存储,提出问题,然后解决。

    比如如何自动发现新加入的节点

    如何分发任务到比较闲的节点

    如何保证汇总结果的正确和效率

    现有的一些东西很多hadoop,mysql,elastic什么的,实现其中的一个功能。。

我来回答

Captcha 点击图片更换验证码