如何編寫一個分散式計算框架?
我想要了解如果從零開始,要考慮使用那些方面的技術,一步步編寫出一個分散式計算框架。之所以問這個問題,是想要比較詳細地了解現今流行的分散式計算框架(hadoop,spark等等)。
MIT有門分散式系統的課 6.824, 第一個lab就是寫一個非常簡單的MapReduce模型
6.824 Schedule: Spring 2014
拜今天高級的編程語言所賜,一個自己寫一個簡陋的分散式系統其實非常簡單。
最最基本的分散式系統涉及的關鍵技術無非就是把代碼的執行放到remote的機器上去執行。以Python為例,我給個最簡單的方案。
1. Pickle和Marshal可以序列化簡單的Python對象,甚至source也可以通過各種自省方法獲得。
2. 隨便找一個Web框架都可以實現一個ReST風格的伺服器作為Worker,eval相關的機制也可以方便地對已有代碼進行求值。
3. Redis實現一個簡單的任務分發系統很方便,比如可以直接使用訂閱發布機制,分布的Worker獲取Redis里待執行的任務,執行完後將結果統一放到另一個位置。
4. 調用者需要做的事就是分割計算任務,把相關的任務,包括使用的數據、參數等扔給Redis資料庫,還有收集結果並拼成最終的計算結果。一個最簡單的策略是直接分布實現一個map函數。
好了,一個簡單的分散式系統就完成了。在實現過程中你會發現很多新問題,比如marshal雖然能序列化code,但是涉及的閉包啊之類還是無能為力。還有容錯啊之類的也是挑戰。這時候你再去看已有的框架的思想。
嗯哼~從深入學習使用Netty, ZooKeeper,編寫Replicated Server開始。
分散式系統部分。
要從頭開始寫一個分散式計算框架,非常難。但結合用現在的開源軟體還是比較容易,具體涉及到MQ,ZOOKEEPER,MEMCACHE,RPC。。。在此基礎上自己實現spilt,merge,calculate.裡面的細節還是非常多,要用到一些設計模式,分散式系統最重要的是要有容錯。
建議你把基礎打好,不要被眼花繚亂的技術看花了,追求事物的本質才是真正掌握一切的根本。多看看網路,演算法,系統原理,分散式開源的關鍵原理這方面的經典書籍,不然永遠只是一個普通的工程師。
推薦閱讀:
※有沒有免費的代碼查看工具推薦?
※零基礎轉行it,哪個方向容易一些?
※iOS 開發入門需要學習哪些知識,從一無所知到精通需要多長時間?
※為什麼有人說《暗黑破壞神 3》中的隨機是「偽隨機」?
※當正在閱讀的書籍、正在討論的內容或者正在解決的問題涉及到許多因素時,如何有效在大腦中組織這些因素?