首頁>Club>
11
回覆列表
  • 1 # 雲渺書齋

    Nginx效能要比Apache高,主要是由於網路IO模型選擇不同,Nginx使用是最新的epoll網路I/O模型,而Apache使用的則是傳統的select模型。Nginx是非同步非阻塞,Apache是同步阻塞。

    同步與非同步

    同步:同步是指呼叫者發起一個請求,直到請求返回結果之後,才進行下一步操作。簡單來說,同步就是必須一件事一件事的做,等前一件做完了,才能做下一件事。

    非同步:呼叫者發起一個請求,在沒有得到返回結果之前,可以繼續執行後續操作。非同步相對同步來講,二者的區別主要在於是否需要等待某操作的返回結果。

    阻塞與非阻塞

    阻塞:阻塞一般是指在呼叫結果返回之前,當前執行緒會被掛起。呼叫執行緒只有在得到結果之後才會被喚醒執行後續的操作。

    非阻塞:非阻塞是指在呼叫結果沒有返回之前,該呼叫不會阻塞住當前執行緒。

    epoll

    epoll是指當檔案描述符的核心緩衝區非空的時候,發出可讀訊號進行通知,當寫緩衝區不滿的時候,發出可寫訊號的一種I/O事件通知機制,是linux 核心實現IO多路複用的一個實現。

    檔案描述符數目沒有上限:透過epoll_ctl()來註冊一個檔案描述符,核心中使用紅黑樹的資料結構來管理所有需要監控的檔案描述符。基於事件就緒通知方式:一旦被監聽的某個檔案描述符就緒,核心會採用類似於callback的回撥機制,迅速啟用這個檔案描述符,這樣隨著檔案描述符數量的增加,也不會影響判定就緒的效能。維護就緒佇列:當檔案描述符就緒,就會被放到核心中的一個就緒佇列中,這樣呼叫epoll_weit獲取就緒檔案描述符的時候,只要取佇列中的元素即可,操作的時間複雜度恆為O(1)。使用mmap加速核心與使用者空間的訊息傳遞。selectselect()的可移植性更好,在某些Unix系統上不支援poll()。select() 對於超時值提供了更好的精度:微秒,而poll是毫秒。單個程序可監視的fd數量被限制。需要維護一個用來存放大量fd的資料結構,這樣會使得使用者空間和核心空間在傳遞該結構時複製開銷大。對fd進行掃描時是線性掃描。fd劇增後,IO效率較低,因為每次呼叫都對fd進行線性掃描遍歷,所以隨著fd的增加會造成遍歷速度慢的效能問題。select() 函式的超時引數在返回時也是未定義的,考慮到可移植性,每次在超時之後在下一次進入到select之前都需要重新設定超時引數。總結Linux下能夠承受高併發訪問的Squid、Memcached都採用的是epoll,epoll是一種IO多路複用技術,可以非常高效的處理數以百萬計的socket控制代碼,比起select效率會高一些。epoll不會隨著監聽fd(檔案描述符)數目的增長而降低效率。select採用的是輪詢來處理,在高併發伺服器中,輪詢I/O是最耗時間的操作之一,輪詢的fd(檔案描述符)數目越多,自然耗時越多,效能越低。

    Nginx執行效率高、CPU記憶體佔用率低、代理功能強大、佔用資源少、支援更多的併發連線,主要用來做動靜分離和負載均衡。Apache在動態資源處理和穩定性方便要優於Nginx,但是靜態資源處理不如Nginx。

  • 2 # 創新炎黃

    《nginx比Apache跑得快;不管你同不同意,靈活性還是nginx好得多!》

    Nginx不知比apache強大多少倍的!即便是APaChe2.4來比賽也是如此!Nginx堪稱程式設計師級的web應用伺服器!

    一、設計思想註定nginx的效能比Apache高得多;

    Nginx是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,開源釋出,所以還有了阿里的中國化版本Tengine。

    Nginx其特點是佔有記憶體少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現最好。

    三、nginx自產生以來,nginx成為幾乎所有大併發量WEB伺服器的首選;

    中國大名大名鼎鼎人網路平臺基本都用上了nginx:比如百度,比如京東,比如新浪,比如網易,比如騰訊,比如淘寶等等。

    四、關於nginx的穩定性Monit自動監控;

    Monit 算是 Linux程序和服務監控的大神。 monit免費、開源的一款基於網路的程序監控工具。它能自動地監控和管理系統程序,當然能量遠不止於此。

    Monit使用C語言編寫而成,處理效率非常之高,佔用資源極少,配置引數簡單,只使用幾個if … then…語句就可以完成監控任務。尤其適用於對某些程序進行守護。比如:檢測到http服務不正常時,自動重啟nginx 。

    monit還能監控象Apache, MySQL, Mail, FTP, ProFTP, SSH各式各樣的服務。其最大有功能就在於一個程序服務宕機了,monit就可以重新開啟這個服務!

    總結:流行就有流行的道理!假如你要做個大平臺,用用nginx也許是個正確的選擇!

  • 3 # 偶爾來逛逛隨便來瞧瞧

    對java程式設計師來說apache基本是雞肋,當然你如果非要說tomcat是apache的擴充套件,那也隨你,單就apache來說,靜態比不過nginx,動態和weblogic/jboss這些比又不是一個檔次,別人用不用不知道反正我們是不用滴

  • 4 # 老劉論道

    nginx是因網際網路而生的輕量級、高效能,高併發性和低記憶體使用的場景。

    Apache因年代久遠,屬於重型的的web應用伺服器,每個請求都會佔用一個程序處理,程序非常佔資源 ,而且當併發量大的時候,就需要等額的程序,導致高記憶體、CPU的佔用。

  • 5 # 小x全棧工程師

    我2008年開始使用nginx,2009年開始開發nginx模組,ngnix最大的特點是效能,是很好的c10k的實踐。在nginx流行之前雖然還有lighttpd,squid,但那個時期apache的server模型是多程序和多執行緒,不管是什麼場景,只要當前連線數過萬,都是伺服器的負載都是很高的。

    nginx的server模型是多程序io複用,一個程序可以同時處理過萬個tcp連線,Linux使用epoll,bsd系使用kqueue這些基於事件驅動去實現io複用,同時nginx內部使用了非常高效的資料結構去管理這些連結,例如rbtree,這樣使得管理十萬以上的連線CPU消耗也可以有效控制。

    nginx是基於資料流去處理http資料的,因此nginx模組的開發並不容易,由於開源社群的努力,現在也存在好多nginx模組,幾乎apache常用的模組nginx也有對應的模組,有幾個關鍵的模組,例如ssl,ssi,url rewrite,gzip,這樣nginx就可以很輕易取代apche的地位了。於此同時,nginx的反向代理也是特色之一,因此nginx不但取代了apache也在一些領域裡取代了squid,主要是squid實在太老舊了。

  • 6 # 五四瘋哥

    關於apache和nginx的比較網上一大把,這裡就不再複製了,但說apache效能差很多有點看不起老前輩了,畢竟apache發展這麼多年,基本上該有的功能都有了,該處理的bug也都處理了,說apache是超穩定那是一點也不過份,這個靠時間堆積起來的底蘊是nginx這種後起之秀比不過的,但這也意味著現在apache身材臃腫,對新手來說感覺比較難上手。

    nginx比apache好的地方在於輕量級,配置簡單,極易上手,尤其是其在處理高併發和反向代理方面比apache明顯佔優勢,自然成了雲虛擬主機和一些高併發場景下的首選。

    拿我個人而言,其實並遇到過多大的高併發場景,但自從用了nginx之後就用不回apache了,並不是因為nginx效能有多高,僅僅是因為配置簡單而已。

    如果搭建新環境沒有特殊要求,就用nginx吧。

  • 7 # RedHatLinux

    主要看應用場景。LAMP構建的Web伺服器更加的成熟,模組兒更全面。Lnmp構建的Web伺服器速度更快,響應更及時,佔用記憶體更小。還是要看你的具體需求。

  • 中秋節和大豐收的關聯?
  • 上中學時候老師按成績排座的舉手,你受過哪些類似的心裡傷害?