想用 GO 寫一個開源分散式數據處理相關的系統,並學習 GO,有什麼建議?
想學習GO,並且在這個過程中為社區貢獻自己的力量,用在分散式處理方面都可以考慮,比如存儲引擎,分散式處理編程框架,機器學習,數據挖掘,系統管理配置等等。可以開發新的系統或者參加目前已有的開源項目,大家有什麼建議呢?目前開源社區缺少那些必要的可以用Go寫的組件?從哪裡開始比較好?或者開源的分散式數據處理相關的GO項目,有沒有需要幫忙的,我感興趣我也可以參與進來。
我的微信:a311155
QQ:311155
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 :http://bitly.github.io/nsq/
InfluxDB:http://influxdb.org/
seaweedfs
golang-distributed-filesystem
quora 上的一個頂級好貼:What are some good resources for learning about distributed computing? Why?
CMU上的一個課程:
http://www.cs.cmu.edu/~dga/15-440/S14/syllabus.html
註:github上有關 golang 上的 分散式系統很多,尤其分散式基礎架構與存儲方面的。很值得我們學習。
更新:最近做了一個改進的版本。支持非常類似的pure Go 的分散式map reduce 系統。
http://github.com/chrislusf/gleam
這個版本更加高效。犧牲了一點點type checking, 需要做interface{} casting。但是速度比用reflection高效非常多。
=====================
Glow: a map reduce system in Go
現在基於go的mapreduce框架基本上都是單機版的,靠goroutine, channel來意思一下。Glow是我所知道的唯一分散式數據處理的純Go的實現。語法接近於spark,運行更簡單,不需要各種複雜的setup.
http://github.com/chrislusf/glowpingcap/tidb · GitHub 一個用go寫的分散式資料庫 歡迎關注和參與
可以了解一下pingcap的tidb
自己整理了一個分散式系統(Distributed System)資料Qix/ds.md at master · ty4z2008/Qix · GitHub 並且剛剛收錄了 @郭翔宇@趙玉豪 所說內容.
希望可以幫助到題主
開源項目的話把 chrislusf/seaweedfs · GitHub 看明白了,我覺得就是最好的入門途徑了。
畢竟這項目整個架構思路還是比較清晰的,文檔也寫的不錯。
然後看懂了之後再做一些優化的pr(我記得可優化的點還是不少的),就更happy了。
這個課程6.824 Schedule: Spring 2015我建立了一個Github工程
mrunix/lecture · GitHub
通過這個課程學習Golang不錯。
完成Lab1 Part I.
後續繼續努力,不知道全部搞完得多少時間。
分散式無非 解決計算和存儲,提出問題,然後解決。
比如如何自動發現新加入的節點
如何分發任務到比較閑的節點
如何保證匯總結果的正確和效率
Google有個開源的 golang開發的,可以看看。先了解透現有的分散式計算系統/存儲系統的主要核心特點和短板,再去思考你的。走彎路雖然能帶來一丟丟成長,但代價巨大。刷題看視頻那是學生的做法 不適合工程
寫個Go的redis cluster driver吧。不知道現在有沒有已有的實現
區塊鏈相關開源項目有興趣嗎?,區塊鏈就可以看作是一個分散式的資料庫/賬本
首先不用go 你可以寫一個什麼樣的分散式數據處理相關的系統?你對分散式數據處理相關的系統 的理解是什麼樣的? 你是想寫一個存儲系統,計算系統? 它能滿足什麼要求? 達到什麼效果?
什麼樣的量級 什麼樣的容錯 恢復? 每個都是細節再細節 然後決定了它會是什麼樣子的。用c++
java 能否做到,它們的痛點在哪裡, 比如 你已經寫了20萬行相關的代碼,發現了什麼問題,如果解決,發現是語言本身的問題,所以我要換一種語言。
就像為什麼大象會出現在熱帶,非洲 ? 這和食物 氣候 環境,進化 各個方面都有息息相關的。不是拍拍腦子說 我要這裡發現一種世界上最大的陸地動物。
所以問這種問題總是很莫名,能寫的人 肯定是有技術背景,那麼他肯定是知道大家的痛點在哪裡,他不會來問。 問的人吧,貌似完全沒有這種背景,那你說個啥呢?
所以沒意義! 好的 我不友好了!匿名吧!從前有個輪子,橡膠坐的,大家用著挺好的。後來一個帶頭大哥發現石墨烯也可以做輪子,而且看起來要高大上不少,似乎速度也有會所提升,於是就有人說咱們用石墨烯造輪子吧~
推薦閱讀:
※只用同一聲調的字可以造出哪些句子?
※自學日語,從零基礎到 JLPT N2 水平需要多久?
※語言學上看 Klingon 語有哪些特點?
※先秦的「東夷」到底說什麼語言?
※在多語言環境,嬰兒學習語言是否會有障礙?