image

##前言:

主要是Golang.Tw上面有人在問,加上這門課程的作業本身是使用Golang來開發.就還蠻有興趣玩玩看.

課程鏈結在這裡.6.824: Distributed Systems

MIT 6.824 分散式系統 系列文章

6.824: Distributed Systems

##第一週課程:

###Paper1: 鼎鼎大名的Google Mapreduce 論文: 課程內容主要是要讀鼎鼎大名的mapreduce系統論文.

###Lab1: 寫一個簡單的Map跟Reduce 然後來寫一個Lab1 Word Count的小程式.裡面主要要完成兩個functions:

  • Map: 把文章裡面的字拆出來後,放入一個List. List 裡面的內容是文字與出現的次數.
  • Reduce: 就每個檔案裡面的所以出現單字找出來,並且回傳它的加總.

課程算很簡單,主要是要對於mapreduce有基本的了解.我一開始不是很了解,比對了參考文章內的內容跟論文演算法就看懂了. 其實還挺有趣的. 寫完裡面還有go test 可以去驗證你的想法有沒有問題.

###簡單介紹RPC

第一週後半段其實還有一部分是RPC的部分,還好最近有點研究.所以也很快地讀完筆記.

主要講解內容如下:

  • 什麼是RPC Server.
  • RPC 架構下會有什麼問題? (斷線,命令未收到,命令未完成)
  • 如何解決:
    • “最少一次”:
      • 優點: 可以確認server有執行到.
      • 使用範圍:
        • 可以用: 重複性質的讀取
        • 不能使用: 存款
    • “最多一次” (Go RPC就是這種)
      • 會把重複的需求挑出來,直接回答上一次的結果而不是再跑一次.
      • 怎麼分辨是不是重複: 透過unique ID.
      • Lab2 要玩這部分.
    • “剛好一次”:
      • 也就是最多一次的系統加上unbounded retries跟容錯設計.Lab3要玩這個.
  • Go thread:
    • 何時使用Go channel 何時使用 shared memory + lock:
      • Channels: 確定要兩個thread互相溝通,一個等待另一個回傳.
      • Shared memory + locks: 需要共用資料,但是不需要等待另一個結果.

##參考文章:


Evan

Attitude is everything