上班以來做過的事


畢業開始工作,一轉眼就三年半了,上班以後、生了小孩之後,很多事情都改變了,我也很少在這邊寫文章,寫上一篇已經是一年半前的事了

最近我覺得我應該再回來寫些網誌

就先來回顧一下我畢業之後在Facebook做的事情,我的職稱是Software Engineer,就是一個普通的軟體打雜工人,這種工作在矽谷非常平凡,路上隨便一堆都是靠這種技能討生活的人

因為我不是Computer Science背景,之前沒有太多軟體的經驗,剛加入Facebook的初期對我而言是個辛苦的過程,不過很有趣,我一下學會了很多事情,在Facebook的新訓中心出來之後,我加入了Data Infrastructure組

這一組負責的是後端資料的儲存和計算,儲存和計算的數量相當龐大,儲存上可以到100PB (1PB = 1000TB)以上,計算上,一個計算可以到幾百個TB的輸入輸出資料,因為這樣龐大的數量,所以這不是件簡單的事情,要從幾百個硬碟裡讀資料出來,在幾百台電腦上計算後,再寫到幾百個硬碟裡,不但要夠快,還要安排不同計算工作同時進行

在這個組我除了打了很多小雜工之外,做了三件比較大一點的事

第一件事,收集每台電腦上的資源使用狀態,然後用這個資訊來改進排程器的效率,(排程器就是一台負責安排其他上千台電腦要做什麼事的老大電腦),排程器知道那些電腦有比較多資源,就可以把計算排給他們,知道那些電腦已經忙到爆炸,就不要送計算給他們,而且收集了每個計算的實際實用資源,這樣可以對資源做有效的管理,防止人為浪費,實際工作包含寫一個在每台電腦上監控資源的程式,還有改變排程器的演算法去使用這些資訊,這件事是我剛到這個組的第一件工作,我覺得很不錯,因為做這件事讓我對Linux和系統資源,(CPU, memory, IO)等等有了一些了解

第二件事,利用錯誤更正碼來改進儲存的效率,之前有說到這些資料可以到上百個PB (1PB = 1000TB = 1000,000GB),保存這些資料一年花的錢是非常驚人的,如果能減少儲存,就能省下可觀的錢,一般儲存的方式是把一個資料塊(256MB)複製三個複本,再把三個複本放在三台不同機器上

為什麼要這樣做呢?,假設你的硬碟平均用三年壞掉一個,你如果有一萬個硬碟,一天大概就會有十個壞掉,所以一定要有複本,而且要能在電腦壞掉時馬上復原複本的數量,不然一定會損失資料

我們做的改進就是不使用三個複本,我們存一個複本再加上一些錯誤更正碼,因為我以前是學通訊的,所以我對錯誤更正碼有一定的了解,其他同事對這方面可以說是完全不懂,我開發了在這上面用的Reed-Solomon Code(某種錯誤更正碼),還有一些監控和修復的邏輯,這個改進不但讓空間變小,容錯的能力也變更強,這讓公司省下了很多錢,這邊有一篇文章介紹這個技術,作者是我很尊敬的強者同事
https://www.facebook.com/note.php?note_id=468211193919

第三件事,開發新的工作管理和排程架構,本來整個工作管理和資源分配是在同一台電腦上做的,這台電腦沒辦法管這麼多事,常常爆炸重開,這一重開的結果就是浪費好幾千台電腦好幾個小時的CPU時間,我們的改進就是把工作管理分散到好幾台電腦上,只有一台電腦只管資源分配,這邊有篇文章介紹這個
https://www.facebook.com/notes/facebook-engineering/under-the-hood-scheduling-mapreduce-jobs-more-efficiently-with-corona/10151142560538920
我和另外兩位同事開始了這個計畫,我寫了整個排程器和一些接收工作的邏輯,做這個計畫十分有趣,因為能從頭開始寫了很多新的程式,和其他兩位同事討論和設計這個分散式系統,讓我學到了很多分散系統架構上面的知識,這套系統後來申請了專利,我也是四個發明人之一

去年九月時我離開Data Infrastructure加入了Database Engineer,在那邊做的也是資料,不過不是後端的資料,而是直接給Facebook使用者即時讀寫的資料,在這一組我參加了一個初期的計畫,我不確定能不能說在這個組做的事情,所以就不說了,以前在Data Infrastructure做的事情,因為Open Source,所以我才確定我能說我做了什麼

在Database Engineer組我讀了一些MySQL和HBase內部的程式碼,讓我學到很多資料庫內部的知識像B-tree、LSM-tree等等,還有對Facebook用大規模MySQL+Memcache,建成的後端有了一些了解

今年六月底,我離開Database Engineer,加入Search Ranking,這一組做的是搜尋結果的最佳化,在這一組做的事情,大部分都是不可說的,不過我最近做了一件事,這事是可以說的,我對Facebook的中日韓搜尋做了一些改進,之前你找中文人名,大部分的結果都是讀音接近的名字,但不是你搜尋的名字,我最近把這個問題修好了,各位最近有沒有發現中文搜尋變好了呢?

我覺得自己很幸運畢業後轉了行,而且能到Facebook工作,除了經濟上面有好的回報,工作本身也非常有趣,一下子你的寫的程式就能被上億人用到,是很有成就感的事情,公司對員工也非常照顧,有免費三餐、洗衣服、健身房等等小福利,讓生活變得很方便

在這邊順便幫公司廣告一下
https://www.facebook.com/careers/


留言

這個網誌中的熱門文章

下一站: Facebook

斷食期間吃黑巧克力會怎樣

可持續的健身之道