2012-01-30 86 views
0

我有興趣創建一個web應用程序,我剛剛做了一些關於什麼使得一個好的web服務器的研究。我已經通過facebook,twitter和foursquare進行搜索。他們分享他們用來構建基礎設施的軟件。爲什麼在Web Server基礎架構中使用後端服務器和RPC?

對我而言,一些使用的軟件是新的。我想在這裏問一些問題。 爲什麼要創建一個後臺服務器,是不是運行PHP的web服務器就夠了?爲什麼使用java/scala作爲後端?我們是否真的需要諸如thrift/protocol buffer之類的RPC框架?什麼是RPC框架使用?它用於前端和後端服務器之間的通信嗎?

非常感謝那些回答我的問題,或者如果有一些書你會建議我閱讀。

謝謝。

+1

當涉及到軟件時,這是一個很好的經驗法則 - 只使用你需要的東西,而不是更多的東西。 – Perception 2012-04-12 13:03:22

回答

0

例如,我遇到很多使用PHP開發複雜webapp的問題。 PHP沒有任何線程,php缺乏很多有scala的好東西,或者是帶有豐富語法的另一種好的現代語言。與編譯的JVM語言相比,PHP速度較慢。我認爲PHP不太安全。獲得大量數據並呈現爲HTML頁面是一件好事,但高負載處理不是它的優點。您建議的RPC作爲通信層。

3

這聽起來好像你想建立一個最終將被用來做以下可擴展的後端基礎設施:

  1. 提供內容。這是Web服務器層。
  2. 對來自Web服務器層的用戶請求 執行某種類型的後端處理,並與數據存儲進行通信。將其稱爲應用程序服務器層。
  3. 將會話狀態和用戶數據保存在分佈式,容錯,最終一致的密鑰值存儲中。

此外,它聽起來好像你想使用商用PC硬件做到這一點。

這是一個很高的訂單。

Foursquare使用Scala和Lift框架,jetty爲他們的web服務器。這裏是more。和more

Facebook使用許多不同的技術。我知道他們使用HBase的數據存儲(他們使用Cassandra)

雅虎使用HBase跟蹤用戶統計信息。

Twitter作爲Ruby後端網站開始。他們搬到了斯卡拉。 Twitter正在使用他們專有的增量數據庫轉換工具逐步從mysql(我假設分片)轉移到Cassandra。對於應用程序服務器和Web服務器端的擴展,我知道真正重要的是擁有能夠在用戶空間中產生新用戶進程的能力以及爲新的工作進程分配請求的管理器進程進來。把它想象成一個非常有效率的公司。你進來的工作越多,你僱用的人越多。這是Actor model.一些語言有內置演員,(erlang)其他人有演員作爲框架(akka)或圖書館(Scala本機)實現。顯然,斯卡拉的本地演員是越野車,所以有些人聚在一起並實施Scala和Java的akka​​框架。網上有很多關於演員的討論,以及應該使用哪種語言和圖書館。 Erlang有很多開箱即用的功能,但是,Scala運行在JVM中,允許您重用很多現有的Java Web庫(如果它們碰巧在其中聲明瞭靜態對象,那麼可能會出現一些問題)Erlang有演員和OTP庫,但顯然沒有Java擁有的豐富庫。所以,對我來說,它真的歸結爲斯卡拉(與akka)或Erlang。

對於使用Scala的Web服務器,您可以使用任何Java應用程序服務器。 Foursquare使用碼頭爲大多數事情。它不是用Scala編寫的,但是由於Scala編譯成在JVM上運行的字節碼,所以它很容易與任何Java應用程序服務器進行交互。
人們也說,有沒有那麼多的Erlang程序員和Erlang是更難學(functional programming VS imperative programming)Scala是在同一時間的功能和必要的(這意味着你可以做任何)

Erlang是功能性的。現在,函數式編程有很多事情要做,因爲一個專家函數式編程人員可以比專家式編程人員做得更多。另一方面,強制性編程更容易學習,並在團隊設置中廣泛使用。命令式語言對於某些東西很有用,對於其他的功能語言也是如此。 其他。 The right tool for the right job.

回到Web服務器的討論,與二郎神,你可以使用雅司病也可以運行一個框架(芝加哥老闆)

Here's更多斯卡拉VS二郎辯論。另外link
更多here
another。另外。

在數據庫端,您有很多選擇。見here. 你甚至可以避開數據庫全在一起,在Mnesia中保存數據(Erlang的運行數據存儲)

我的答案是不完整的,因爲這話題(縮放應用服務器,數據庫和Web服務器)是非常複雜的,充滿了辯論。有些框架甚至模糊了層(Web服務器,應用程序服務器,數據庫)的區別,並在框架本身內集成了這些層的許多功能。

相關問題