用 HHvm 運行 Wordpress 是用 Apache 好還是 Nginx 好一點?

來源:互聯網
上載者:User
關鍵字 Apache Nginx HHvm Wordpress RedHat
最近想研究一下 HHvm,但是在網上沒找到詳細的技術文檔,所以想自己做一個 Wordpress 執行個體研究一下,選擇 Web 服務器時讓我猶豫了一下:
系統: Ubuntu OR RedHat
因為我自己對 Nginx 沒有太多研究(我只鐘愛Apache)。不知道它支不支援虛擬路徑。
所以在這裡問一下懂 HHvm 的人,是選 Apache 或是 Nginx 好一點?
也可以提供相關技術文檔。
註:我是一個菜鳥……

回複內容:

HHVM通常搭配Nginx比較多,Apache當然也可以,通訊方式走fastcgi。

HHVM的介紹如下:
HHVM是一個開源的PHP虛擬機器,使用JIT的編譯方式以及其他技術,讓PHP代碼的執行效能大幅提升。據傳,可以將目前的版本的原生PHP代碼提升5-10倍的執行效能。

HHVM起源於Facebook公司,Facebook早起的很多代碼是使用PHP來開發的,但是,隨著業務的快速發展,PHP執 行效率成為越來越明顯的問題。為了最佳化執行效率,Facebook在2008年就開始使用HipHop,這是一種PHP執行引擎,最初是為了將 Fackbook的大量PHP代碼轉成 C++,以提高效能和節約資源。使用HipHop的PHP代碼在效能上有數倍的提升。後來,Facebook將HipHop平台開源,逐漸發展為現在的 HHVM。


HHVM提升PHP執行效能的方式

HHVM提升PHP效能的途徑,採用的方式就是替代Zend引擎來產生和執行PHP的中間位元組碼(HHVM產生自己格式的中間位元組 碼),執行時通過JIT(Just In Time,即時編譯是種軟體最佳化技術,指在運行時才會去編譯位元組碼為機器碼)轉為機器碼執行。Zend引擎預設做法,是先編譯為opcode,然後再逐條 執行,通常每條指令對應的是C語言層級的函數。如果我們產生大量重複的opcode(純PHP寫的代碼和函數),對應的則是Zend多次逐條執行這些C代 碼。而JIT所做的則是更進一步,將大量重複執行的位元組碼在啟動並執行時候編譯為機器碼,達到提高執行效率的目的。通常,觸發JIT的條件是代碼或者函數被多 次重複調用。


普通的PHP代碼,因為無法固定變數的類型,需要額外添加判斷類型的邏輯代碼,這樣PHP代碼是不利於CPU執行和最佳化 的。因此,HHVM通常需要用到Hack寫法(為了相容某種特性而額外添加的技巧性質的代碼)的PHP代碼來“配合”,就是為了讓變數類型固定,方便虛擬 機編譯執行。PHP追求以一種形式來容納一切類型,而Hack則可以將被容納的一切標記上確定的類型。

PHP代碼的Hack寫法的例子:


上面的例子中,PHP代碼主要被添加上了變數類型。Hack寫法的總體方向,就是將之前“動態”的寫法變為“靜態”的寫法,來配合HHVM。

HHVM因為它的高效能而吸引了不少人的關注,一些一線互連網公司也開始跟進使用。從純語言執行效能測試結果來看,HHVM領先了開發中的PHP7版本不少。


不過,從具體業務情境來看,HHVM和PHP7的差距並沒有那麼大,以WordPress開源部落格首頁為測試情境的結果中,他們目前的差距並不明顯。



但是,PHP7目前還在開發中,就已經可用的技術方案來看,目前的HHVM略勝一籌。不過,HHVM的部署和應用都存在一些的問題:

  1. 服務部署比較複雜,有一定維護成本。
  2. 對PHP原生代碼並非完整支援,PHP拓展也需要做適當的相容。
  3. HHVM是個新虛擬機器,長時間運行有記憶體泄露。(據說,一線互連網公司在應用這個技術時,是通過自己打Patch的方式解決記憶體泄露)
PS:PHP7是PHP官方社區的下一個大版本,旨在提升PHP代碼的執行效能。

我之前整理的兩個社區的科普文:
PHP7和HHVM的效能之爭介紹 想知道答案的方法,就是自己去實踐。以下內容僅供參考:

apache / nginx 兩者側重點不同,前者適合搭配各種apache旗下軟體使用,後者是單純的前端代理軟體。如果你單純的跑給站的話,hhvm自己就可以,但是如果要權衡前端緩衝,反響代理,細緻的用戶端緩衝設定,還是用nginx吧。

而且如果你沒有特殊的需求(svn?hadoop?)的話,nginx完全可以滿足你的各種需求,而且配置簡單。

至於熱載入,你需要的是tengine,支援dso(動態載入模組)。

關於安裝和配置,可以參考:
  • 配置Ubuntu WebServer基礎環境
  • 簡單佈建服務端代理Apache
  • 簡單佈建服務端代理Tengine
如果涉及上傳,參考php的設定,在/etc/hhvm/php.ini 設定upload_limit/post_limit...

如果你用hhvm跑前端代理和runtime兩個角色的話,那麼請參考官方文檔。

最後,如果只是通過網站響應速度來評定好壞的話,可以參考:
天下武功,唯快不破 標題中的『好』在哪裡?不太明白。

先簡單來說下 PHP 運行方式,大概有三種:
1. 命令列(解譯器),這個跟 Web Server 無關
2. mod_php,這個就是說 Apache 的模組
3. fpm,官方提供的 FastCGI 協議管理程式,走 FastCGI 協議,Apache 和 Nginx 都可以做 FastCGI 協議代理轉寄,不過這種方式一般人都會選擇 Nginx

對於上面的 2、3 中,個人建議採用 Apache(mod_php)方式來運行,主要是簡單,穩定,省事,等你折騰到 PHP 自身(最佳化、配置)的時候再考慮 Nginx 方式。

樓主提到 HHVM 是另外一個東西,這裡有個文章:HHVM 是如何提升 PHP 效能的? 請看鳥哥的測試:http://www.laruence.com/2014/12/18/2976.html 部落格的話,簡單就好。如@smallfish所言。
nginx的話主要是高並發,效能高。 Apache對於多使用者訪問採用的是每一個使用者一個fork,對記憶體,線程切換開銷可想而知。
Apache對於第三方外掛程式可以“熱”插拔,重啟apache即可。Nginx則需要重新編譯。
Hackshell和php與@smallfish說的一樣,fadtcgi,可以說是php的“虛擬機器”,相當於是php自身是個伺服器,apache和nginx是用來做代理用,處理http請求的一些細節。這件事情取決於你部落格的訪問量. 大部分人的部落格訪問量, 對apache+phpmod或者nginx+php-fpm, 壓力不會太大, 這點區別, 跟在wordpress啟用頁面cache外掛程式比, 還是比較小的.

你提供的情境資訊太少, 沒法做詳細的分析nginx + hhvm 運行時候, 跟nginx + php-fpm 運行時候。hhvm 此時等同於 php-fpm 的。都是監聽連接埠或者unix 本地 sock解釋PHP的。就是HHVM解析速度快,目前感受是廢一點記憶體,CPU省一半兒, 相容性良好, 就是穩定性大概我用HHVM3.3.0 2個月進程意外崩一次, 目前的HHVM 3.5應高好一點。

最快最省伺服器的,是 nginx + HHVM(hhvm監聽本地sock, 比如 /dev/shm/hhvm.sock)這樣是最快最好的 ,也很穩定。聽說最好的辦法不是nginx+apache+php(wordpress)嗎?
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.