標籤:

Facebook 的主要開發語言是什麼?


最近收到邀請,回答這個問題。

其實Facebook已經是10多年的公司了,技術方面以現在的視角看,略顯陳舊,不建議現在的公司去刻意模仿他的技術棧(其開發工具和新的開源項目,還有裡面的軟體開發思想倒是很好的)。

我來說我一個我自己的版本:

主要的編程語言是php,裡面有大量的fb後來開發的擴展庫。也有轉c和編譯的hphp,再到後來的高性能vm。

現在fb開始越來越多地使用前端渲染和處理,大量使用js和後來新推出的react。思路就是將前後端盡量解除耦合,之間只交換數據(調rest api來取數據和扭轉數據的狀態)。

php的背後則是大量的java和c++的代碼,來處理後端一些深層次的邏輯,比如 news feed ranking,antispam,推薦演算法,ads ranking,messaging backend等等。他們遊離在PHP的背後,是一個一個獨立的service,通過thrift來和PHP以及他們互相間通信。

在移動端,剛開始是原生(那時只有原生)。2011年底開始浪,想用html5一統江湖,但是吃了巨大的苦果,於是後來又全部換回native。ios的用objc,android的用java,一部分不常用的功能保持在html頁面。

最後自己的思考就是:

技術和創業公司是一輪接一輪向前發展的,長江後浪推前浪。現在的Facebook團隊要是剛開始創業的話,按照peter thiel的說法,他們不會再做social network。那麼我的補充就是,他們也不會使用當時的技術棧,而是用當前更為輕便的方案,比如: python+django,或者ruby on rails,或者是node.js etc,而後端服務亦或是駕於amazon web service之上,甚至是Google app engine或者parse上。


之前是php,後來趙海平Facebook公司一次Hackathon活動(員工在一個晚上自由發揮,實驗新的想法),他手工將PHP轉換為C++代碼,雖然

語法上很類似,但是無論是CPU還是內存使用,轉換後的C++代碼都大大優於PHP。於是他想,如果構建一個系統,編程實現轉換,會怎麼樣呢?

在此之前,已經有了不少改善PHP性能的方法。Zend引擎在運行時轉換PHP源代碼為運行在Zend虛擬機上的opcode。開源項目APC和

eAccelerator將輸出緩存,為大多數PHP網站所使用。此外,還有Zend

Server這樣的商業產品,通過opcode優化和緩存,提高PHP速度。趙海平選擇了另一條道路,將PHP直接轉為C++,然後再變成本地機器碼。當

然,有許多開源項目也是同樣的思路,Roadsend和phc編譯為C,Quercus編譯為Java,而Phalanger編譯為.NET。

Hackathon之後8個月,趙海平拿出了原型,足以說明這條路可以走通,編譯後的代碼的確更快。不久,Iain Proctor和Minghui

Yang加入進來。接下來又開發了10個月,在生產伺服器上測試了6個月。然後正式上線部署,6個月之後,Facebook

90%以上的Web流量都使用了HipHop。 按趙海平的說法,憑藉HipHop,Facebook

Web伺服器上的CPU使用平均減少了50%,從而大大減少了伺服器的需求。項目對Facebook影響巨大。為了讓這一改進也惠及社區,已經開

源,也就是HipHop For PHP


推薦一個相關網站:Stacks | StackShare 這裡可以看到各科技公司的技術棧,和查看一個技術有哪些公司在採用。


前端(Web server)方面,把PHP翻譯成C++應該是比較早期(2012以前?)的做法了。現在應該都是都是在HHVM上的Hack/PHP了。HHVM有JIT會把Hack/PHP弄成HHVM上的一個中間代碼來執行。記得去年下半年Facebook來學校招人開宣講會的時候還介紹過還有可以把現成的php代碼轉化成Hack的工具。當時的轉換進度已經達到了90%+。現在前端應該全都是Hack了吧。

後端肯定有Java(Hadoop/Hive),似乎有Erlang。據說也有內部小工具是用OCaml、Haskell寫的。


web後端hack,前端react,integrity系統用的Haskell,Instagram用python,mobile很多react native,後端很多複雜邏輯Java和C++,編輯器nuclide,code review用Phabricator。。用的所有東西都開源,並沒神馬不能說的,data center的設計都開源。。


好老的一個問題....不知道怎麼刷到的。

fb的前端,或者叫「產品」組,的主要開發語言還是魔改後的「hack for PHP」。這部分即提供了所有社交網路業務相關的數據模型,也負責大部分的網頁端渲染工作。

產品組另外就是渲染層的objectc,android java,react和react native。前兩者必不可少,沒辦法。後一位優勢顯著,高交互性的ui很多都有react的版本。具體實現的時候去ui庫里翻,翻著啥算啥。

除開基本數據模型之外,都是散布在各處的service,包括數據模型的底層存儲之類的。service之間大多靠thriftprotocol 交互,也有hive和mysql這種交互介面感人的玩意兒。

service本身的實現語言全看各組喜好。cpp應該是大頭,也有java,python。我似乎見過d,go這種鬼。自己用過scala。反正service只要暴露介面,怎麼實現自己負責。

數據處理是python + presto/hive。python寫pipeline,另兩個負責具體的查詢。

ml具體的實現應該是cafe + cafe2吧。torch也有產品組在用。膠水還是python

語言的分析處理應該是ocaml的stack,也見過神奇的基於prolog的資料庫。

機器部署有chef,應該是基於ruby的玩意兒。

所以...很難講fb的「主要」開發語言。每個組織都依照要完成的任務選擇最合適的語言和框架。沒什麼「主要」一說


前端:JavaScript

JavaScript是一種常用的前端語言,可運行在所有主要平台的所有主流瀏覽器上,也可運行在每一個主流操作系統的伺服器端上。Facebook很多都是web產品,幾乎絕大多數產品都包含了JS的code。

後端:Hack, PHP (HHVM), Python, C++, Java, Erlang, D,Xhp, Haskell

Hack

Hack 是 Facebook 推出的一款新的編程語言,同時結合了動態類型語言(如PHP語言)和靜態類型語言(如C語言)兩種特點的一種編程語言。和Facebook的PHP代碼一樣,Hack也運行在Facebook的Hip Hop虛擬機(HVVM)上,HVVM使用即時編譯技術(JIT)來提升程序性能。

PHP

Facebook對PHP的偏愛眾所周知。在Facebook的創建初期,PHP支撐起了該公司的很多產品。PHP的一大優勢是,它是一種動態語言,非常適合快速建立原型,但是動態特性也往往會導致大規模代碼庫開發和維護的複雜化。

Python

Python是一種通用腳本語言,語言本身簡潔、優美,功能強大,可以跨平台和開源,一般在做腳本處理或者寫一些工具時會用到Python。

Java和C++

Java具有良好的拓展性和性能,在Facebook的很多應用服務中都有。 C++用於實現比較底層的介面,Facebook會用編譯器將PHP轉換成運行更快的C++代碼。

相關閱讀:Google 在開發中主要使用的編程語言有哪些?

歡迎關注我的微信公眾號:九章演算法(ninechapter ),帶你了解IT前沿技術,幫你通過面試,拿到offer,找到好工作!


PHP ,轉換為C++執行。


facebook 也有使用到java


HipHop 之所以開發那麼久,我想就是因為作為動態語言的PHP無法完全平滑的

轉換為靜態的Cpp,

其間一定有許多對原來PHP代碼的折中修改


HipHop for PHP


小扎當年寫的時候是用的PHP。後來慢慢壯大,招收的越來越多的工程師意識到PHP的坑但是又不好重新改框架了,就自己弄了個REACT。

目前發展到現在,FB的語言也很多元化了,PHP Java Js以及一些主流的其實都有涉及的。


facebook中文官網註冊php


有用erlang c++ php


php是世界上最好的語言。


推薦閱讀:

Facebook "贊」 可以不公開嗎?
我們都錯了!Snapchat走了一條中年人不懂的道路!
2016 Facebook營銷創意技巧和竅門
因圖片處理軟體一個漏洞 Facebook給出歷史最高漏洞賞金

TAG:Facebook |