請問nginx比apache效能高為什麼apache現在依然流行?
來源:互聯網
上載者:User
回複內容:
“效能是個筐,什麼都往裡裝”
效能好只是 IO 效能好。而 Apache 的 CPU 效能更好。
對於純 IO 型的靜態資源,顯然 Nginx 更適合。
就算 Nginx 並發數再高,如果這些請求不能被及時處理,後續請求一樣要排隊,說白了就是吞吐不行。謝邀
看資料說話
Apache vs. Nginx vs. Microsoft-IIS usage statistics
Usage broken down by ranking
rank 前100萬的,apache使用量大於nginx
rank 前10萬的,nginx使用量大於apache
從趨勢看
nginx 在走高,apache在降低
在來看下官方changelog
http://nginx.org/en/CHANGES
從2004年10月提交0.1.0版本,功能hin弱
圍觀下apache https://zh.wikipedia.org/wiki/Apache_HTTP_Server
1996年就是主流了。
對於商業公司的技術選型來說,在效能沒有壓倒性優勢的對比時候,穩定性高於一切。
在來看下 wiki Nginx
的history,流量大站是在12年以後才換成nginx。
也就是主流的流量大站換方案到現在也就4年左右。
考慮到很多流量大站的並不是技術驅動,而是商業驅動。換方案的成本。在沒有壓倒性優勢和低成本方案的情況下。apache可以運作就夠了。
對於新興的互連網公司嘛。。一個是io密集型,一個是計算密集型,根本無法比較,效能高這個結論從何而來?成熟有時候比單方面的優勢更為重要。只是初學者覺得Apache流行把。業界企業沒有用的
。
簡直了,評論裡人都是怎麼理解的,能不能對比問題看答案。。謝邀
因為大部分開發人員的電腦是WINDOS……
另外,現在伺服器端基本都是NGINX吧?要分使用情境要說為何流行,要先明白這兩個東西被經常按怎樣的方式來運行。
Apache 很有年頭了,該支援的運行模式都支援,CGI、動態編譯、靜態編譯,你想怎樣都可以,唯獨架構老舊、效能不佳而令人詬病。相比而言,Nginx 作為後起之秀,在異構的模式上選擇了一條路走到黑,以 FastCGI 方式運行其上的 PHP 擁有非常好的調度效能,並且因為是異構,Nginx 本身掛掉的機率也變得更小,FPM 在此時充當了冤大頭,這也是目前 Nginx 的主流應用模式。
話說回來 Apache 呢,大概用它的人應該都是以動態編譯的方式在各種環境中啟動並執行吧,動態編譯決定了 PHP 是以 Apache 的動態模組按同步的模式來啟動並執行,兩者相輔相成、同生共死,但凡出現什麼疑難雜症,基本可以忽略 Apache<->PHP 中介層的問題,因為在編譯時間已完成合體、沒什麼好說的。並且,因為是同步架構,PHP 也能更直接的控制 HTTP 協議層的各種請求和響應行為,例如 PHP 直接操作輸出緩衝區一秒一個位元組的回顯給用戶端瀏覽器,這是 Nginx + FPM + PHP 這種異構模式所做不到的(因為 CGI 層有獨立的 PHP 不可控的資料緩衝地帶),同時,因為 Apache 本身也具有十分多的動態機制,例如 Rewrite 可以放在 .htaccess 內直接修改而不用重啟 httpd 等等,使得 Apache 整體上對於需要彈性的運行環境天然具有更良好的操作體驗,非常適合開發環境。
以上說的都是優點,再說說缺點,動態編譯到一起後,httpd 每處理一次請求,可想而知後面是帶著了多麼大的一串資源在跑一次請求會話,一個進程運行期間的每個環節(httpd->php->exts)所佔的資源,都會對同一進程的其它環節相當於上了一把互斥鎖,靠後的 php 沒跑完,那這個進程的 httpd 前端就別想再受理其它請求,一旦遇到高密集請求的情況,一方面是沒處理完的進程各個體積臃腫滯留在記憶體裡吃著 CPU,另一方面是新的請求要求 httpd fork 出更多子進程以應對,因果輪迴,Panic 去吧。
所以,結合優缺點,以及對周圍的觀察,仍然使用 Apache 的可能有以下幾種情況:
1、本地開發環境,需要靈活配置和機動響應,對效能不敏感;
2、效能要求不十分高、彈性需求大於效能需求的小型生產環境;
3、情懷驅使、不見效能黑洞心不死的老派人員。
其它情境還有什麼,那就只剩高效能、高穩定密集型的生產環境了,這確實不是 Apache 所擅長的,不出問題則已,出問題了就是一個大型故障點、很難控制,即便你玩 mpm=worker 也不行(線程模式的 PHP 出問題只會更糟,而且它真的更容易出問題 -_,-)。Apache 架構太笨重了,Nginx 針對這個領域做了它該做的、並且做得十分出色,但是 Nginx 依然很年輕,所以 Apache 仍會在未來以它相對更深厚的沉澱在一些情境下有它的用武之處。
綜上,為個人認為 Apache 老不死、死不透的一些原因,部分闡述會有片面之詞,欠妥之處還望指正。我想認真地答一次題了。
Nginx 確實適合做靜態資源分發,效能確實比 Apache 比要高很多,我在 MacBook Pro 本地使用 ab 進行並發測試,單張 200KB 圖片,並發量 8W 對 2W,四倍。
另一方面,Apache + mod_php 已經成熟到開箱無需配置絕大多數效能夠用的情境下穩定跑 N 年不掛。nginx + PHP-FPM 說開箱即用還差得遠。本地壓測普通 PHP 網站,Apache 巋然不動,PHP-FPM 掛的一塌糊塗。當然,我明白這是缺乏個性配置、沒有一對多負載平衡、缺少監控工具的原因,但是絕大多數的網站訪問量是非常低的,在這種情境下,顯然 Apache 更省事兒。
其實大家都不傻,能簡單地解決問題,誰又想去不斷折騰呢?Apache、Nginx 各有各的情境罷了,現在 Nginx + Apache 前後端搭配不也挺多的嘛哈哈。可憐的 PHP-PFM :-D因為有xmap(好像是叫這個吧,是一個套餐,x忘了是什麼了,m是mysql,a就是Apache,p當然是php)