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

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


HHVM+WordPress的壞處

  • 32bit系統上(微型VPS常見)用不了
  • 部分WP插件兼容性問題
  • 未必所有主機都支持

HHVM+WordPress的好處

  • 性能,但和Apache還是Nginx沒有關係

PHP7是更好的選擇

  • 兼容性,據我所知國外一線主機廠商 都已全面支持,比如在PHP5和7之間自由切換
  • 和HHVM相當的性能,你可以去網上搜各種benchmark
  • Facebook,5%的性能提供合適呢個意味著節省幾千萬美金投入,但你不是Facebook
  • PHP7才是社區的前進方向

不要在錯誤的層次上優化

  • 多花時間搞明白技術棧的原理
  • 沒有必要追逐HHVM,你的網站確實不是Facebook

說 Nginx 配置簡單的你們看到題主是要搭 WordPress 了么……

WordPress 這個東西,歷史遺留包袱嚴重,很多功能依賴於 Apache 提供的可寫配置(.htaccess)。不僅僅是程序本身對它有依賴,大量擴展也依賴於這一功能。如果你用 Nginx 的話,不僅要熟練把 .htaccess 遞歸改寫成 Nginx 配置文件規則,每次還要重啟服務,就問你煩不煩。

所以我強烈建議所有新手/實驗性質站點/不熟悉 Nginx 情況下搭建 WordPress 都用 Apache 做動態頁面伺服器。要說配置簡單,我選 Caddy,要什麼 Nginx 啊(笑


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)這樣是最快最好的 ,也很穩定。


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


這件事情取決於你博客的訪問量. 大部分人的博客訪問量, 對apache+phpmod或者nginx+php-fpm, 壓力不會太大, 這點區別, 跟在wordpress啟用頁面cache插件比, 還是比較小的.

你提供的場景信息太少, 沒法做詳細的分析


寫文章比較重要,wordpress只是內容的載體,php環境只是wordpress的載體。不懂技術的話,建議裝個帶面板的一鍵包,比如AMH,或者買個php環境的虛擬主機,多把時間花在內容本身。

說回技術,Nginx首選,配置文件簡單明了,

至於HHVM和PHP,如果你只跑wordpress,隨你高興,因為wordpress對hhvm的兼容性不錯。如果還有可能跑其他php程序,建議用php


聽說最好的辦法不是nginx+apache+php(wordpress)嗎?


推薦閱讀:

Web 測試 有沒有比Apache Jemeter更好的工具,windows或者macos上的?

TAG:PHP | WordPress | Nginx | Apache | HHVM |