Facebook 的主程式碼放在 Git?

在一月時,Facebook 官方的 Engineering Blog 上提到 Facebook 使用 Mercurial 遇到的問題,以及所作的努力「Scaling Mercurial at Facebook」:

Facebook's main source repository is enormous--many times larger than even the Linux kernel, which checked in at 17 million lines of code and 44,000 files in 2013.

...

Instead, we chose to improve Mercurial. Mercurial is a distributed source control system similar to Git, with many equivalent features.

當時的解讀是 Facebook 把 main source repository 放到 Mercurial 上。

以 Facebook 的規模以及遇到的問題,是有能力直接改變世界的,用 Mercurial 或是 Git 都算是合理的選擇。

不過這幾天在 Twitter 上看到:

這讓人錯亂了啊 XDDD

把 Git commit 切開

在「Split a commit in two with Git」這邊看到有趣的方法:

git rebase -i <oldsha1>
# mark the expected commit as `edit` (replace pick in front of the line), save a close
git reset HEAD^
git add ...
git commit -m "First part"
git add ...
git commit -m "Second part"
git rebase --continue

squash 是把多個 commit 合起來,這個方法是拆開。還沒有 push 出去,需要整理時應該會用到...

Leslie Lamport 拿下 2013 年圖靈獎 (Turing Award)

Leslie Lamport - A.M. Turing Award Winner

For fundamental contributions to the theory and practice of distributed and concurrent systems, notably the invention of concepts such as causality and logical clocks, safety and liveness, replicated state machines, and sequential consistency.

分散式系統領域的老大與 LaTeX 的發明人...

Machine Learning 的課程 (2013 年一月開課,已經完結)

在「推薦系統的課程...」這篇推薦了 2013 秋天的課程,不過整理舊文章的時候發現有另外一門講 Machine Learning 的課程已經結束 (不僅僅是 Recommendation System)。

CMU 的課程:「Introduction to Machine Learning」,課程都有 PDF slide 與錄影可以看。

相較於推薦系統,機器學習的課程比較篇理論,而且也比較廣泛,而推薦系統比較偏應用。

推薦系統的課程...

推薦系統已經是顯學了,如果不要太暴力的演算法 (太學術而導致相依性太高) 也都有現成的 Map-Reduce 類演算法可以處理大量資料。但如果要知從頭學起的話,資料反而不太好找?

然後... 也是上個禮拜看到的,現在在 Coursera 上有這樣一門課程:「Introduction to Recommender Systems」,在今年 (2013 年) 九月開課。有興趣慢慢學的當然可以去報名,不過我想說的是,這門課程的 Course Syllabus 列出了很多關鍵字,如果不想等九月開課的人,拿這些關鍵字搜尋資料也可以馬上學到不少東西。

另外一個入口是 Wikipedia:「Recommender system」,也算是導讀性質。

各種 credential 儲存的方式 (像是連到資料庫的密碼)

John Resig (現在在 Khan Academy) 在月初的時候發表了「Keeping Passwords in Source Control」討論要怎麼儲存 credential。

這不只是開發者的問題而已,這跟 code deploy 機制也很有關。目前沒有完美的方案,不同的解法都是在不同的環境與限制下而誕生出的產物。

分散式系統的建言...

「分散式系統」(Distributed System) 是個老詞彙,但跟最近當紅詞彙「雲」、「NoSQL」常常相關。也因此「雲」與「NoSQL」常常遇到的都是分散式系統遇到 (並且討論過) 的問題...

而「Notes on Distributed Systems for Young Bloods」這篇寫的好血淚 XDDD 除了講理論面的東西以外,也把實務面會遇到的問題拿出來講...

首先要先知道「Fallacies of Distributed Computing」,在分散式系統裡,能假設的事情實在太少,要處理的事情太多。而「CAP theorem」也是個必讀的主題,從 Amazon 丟出「Dynamo: Amazon's Highly Available Key-value Store」這篇經典的 paper 後讓更多人知道這個理論。

熟悉上面兩個主題後,接下來就是血淚史... XD

garbage collection pauses make masters “disappear”

啊,GC 讓 master 不見... (NameNode... XDDD)

Writing robust distributed systems costs more than writing robust single-machine systems.

Robust, open source distributed systems are much less common than robust, single-machine systems.

這兩條... XD

Oh, and Paxos really is very hard to implement

Paxos... XD

If you can fit your problem in memory, it’s probably trivial.

(噴飯)

“It’s slow” is the hardest problem you’ll ever debug.

連問題都找不到嗎... XD

撇開這些碎碎念的部份,就算對 distributed system 沒那麼熟,這篇文章也提到了很多「解決的方向」以及「關鍵字」讓你找資料,對於實際操作時會有很大的幫助。

在 Passion Bean 分享:System Operations for Startup

Passion Bean 的 Sting 與 ihower 邀請,到內湖用了兩個小時分享對於 Startup 公司在系統操作上的一些想法:

另外可以在 Facebook 上的活動頁 找到錄影。

一些關鍵字:

  • us-east-1:AWS 美東區的代號,位於維吉尼亞州。
  • 「萬事屋」指的是「新杰資訊科技股份有限公司」的老闆 Alex Wen。
  • Invalidation 與 Nameing Naming 是 CS 兩大難題:「TwoHardThings」。
  • 「未熟調教是一切邪惡的根源」出自劉燈「重新學C++」文章中 slzzp 的 comment