※ 本文為 CSLabor.bbs. 轉寄自 ptt.cc 更新時間: 2012-04-15 18:21:02
看板 Soft_Job
作者 標題 Re: [情報] Facebook工程發佈技術的幕後故事
時間 Sun Apr 15 17:58:37 2012
※ 引述《olctw (olc.tw)》之銘言:
: 我是不知道你的定義啦,但我覺得照你的邏輯, HipHop 不也是在一些 OS 為基礎去小改
: 一下?你的小改、大改定義好像有點偏頗...
小改?
HipHop for PHP
HipHop 是由Haiping Zhou 所領導的PHP編譯器計畫。
Haiping 在中國出生,目前他是Facebook美國的資深軟體工程師。
HipHop轉換PHP原始碼成為C++的程式碼,
並且可以透過C++的編譯器編譯成可執行的二進制檔案。
像是GCC這類的C++編譯器。
HipHop被開發之後,已經廣泛的使用在Facebook的伺服器上面。
到目前為止,超過90%的網站都是透過HipHop所編譯的PHP程式。
到目前為止,超過90%的網站都是透過HipHop所編譯的PHP程式。
HipHop將一整個PHP程式編譯成一個可執行的程式,一個支援多重執行緒的網站伺服器。
透過這方式,已經編譯過的PHP不但可以跑得更快,更可以充分的利用記憶體來達到效果。
支援多重執行緒的網站伺服器通常使用較少的記憶體,
支援多重執行緒的網站伺服器通常使用較少的記憶體,
原因是因為他們會為所有的請求共用一個記憶池 (Memory Pool)。
這跟多重程序的網站伺服器不同,這個方式有點類似Apache 的 pre-fork 模式。
該模式是絕大部分執行PHP的Apache 主機所使用的方式。
在這個模式,每一個請求由單獨的作業系統程序所控制,
而每一個程序都包含一個專屬的記憶池。
在這個模式,每一個請求由單獨的作業系統程序所控制,
而每一個程序都包含一個專屬的記憶池。
使用多重程序網站伺服器常遇到的問題是,當某一個程序使用大量的記憶體的時候,
必須等到該程序結束的時候才會把佔用的記憶體釋放出來。
而即使後續的請求使相同的程序,但卻不需要使用到大量的記憶體,
這些未使用的記憶體空間也無法被其他的程序使用。
Apache 會根據記憶體回收機制強迫關閉某些已經產生的程序,
但卻不能完全解決記憶體耗用的問題。
對於伺服器而言,記憶體的使用情形影響到單位時間內可處理的最大請求個數。
舉個例子,一台擁有1GB記憶體的網站伺服器,假設每個PHP請求需要使用到10MB的
記憶體,
理論上,它只能同時處理的請求少於100個。如果有其他的程式在這台機器上執行,
他們也會同時佔用實體記憶體。這個時候作業系統就不得不使用虛擬記憶體。
使用虛擬記憶體的時候系統就必須將記憶體置換到磁碟當中,這個動作就會導致系
統緩慢。
這也就是為何伺服器在處理極大量的請求時,
會發生了所謂DOS( Denial Of Service )的當機問題。
在Apache 上面,你可以透過設定MaxClients 指令,限定單位時間內的最大連線數。
這可以避免當機的問題,但後續進來的請求就必須進入等待,
這代表某些請求可能延遲好長一段時間才被處理,或者直接被忽略掉。
這裡有一篇之前的文章,
討論到剛才所講到的問題,是關於透過多執行緒的方式解決高流量的說明。注意一點,這篇文章主要是建議靜態內容( 單純是影像、CSS、JavaScript這類的內容 )網站的伺服器可以採用多執行緒的方式運作。
目前Facebook 的開發人員正試著把HipHop設計成一個thread-safe的擴充套件。
這表示該套件可以在多執行緒的網站伺服器上面正常執行由HipHop所產生的東西。
-----------------------------------------------------------------------
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.162.1.144
--
※ 看板: Soft_Job 文章推薦值: 1 目前人氣: 0 累積人氣: 566
回列表(←)
分享