http服務器搭建之apache與nginx的特性


一、了解一些簡單的概念

  HTTP服務器程序:

    httpd(apache)

    nginx

    lighttpd(功能和nginx差不多,活躍度不如ng)

 

  應用程序服務器:

    IIS

    Tomcat(開源jsp容器),jetty(開源輕量級jsp容器),jboss(2次封裝tomcat-jsp),resin(教學)、webshpere(重量級)、weblogic(bea公司大量市場份額),oc4j(oracle的,已經把bea公司買了,oc4j已經沒有市場)

 

二、HTTPD(Apache)

  httpd:apache(a patchy server)

  ASF(軟件基金會):apache software foundation

  1、httpd特性

  ①、高度模塊化:core + modules,

    運行再編譯或運行時,選擇哪些模塊將會加載到服務器,來確定服務器特性

  ②、DSO:Dynamic Shared Object 動態共享對象

  ③、MPM:Multipath Processing Modules 多路處理模塊

  能夠更好的為有特殊要求的站點定制,例如,要求高伸縮性的站點可以選擇線程的MPM,(worker,event);需要可靠性或者與舊軟件兼容站點可以使用prefork。

    httpd-2.4支持,MPM支持運行DSO機制;以模塊形式按需加載;

  1)prefork:多進程模型,每個進程響應一個請求;

    一個主進程:負責生成n個子進程,子進程也稱為工作進程,每個子進程處理一個用戶請求;即便沒有用戶請求,也會預先生成多個空閑經常,隨時等待請求到達;最大不會超過1024個;

    主進程:管理子進程,創建套接字,接受用戶請求,並派發某個子進程

    子進程:處理請求和響應請求

  2)worker:多線程模型,每個現成響應一個請求;(比prefork不相上寫,每天15萬)

    一個主進程:生成多個子進程,每個子進程負責多個線程,每個線程響應一個請求;m進程,n線程;m*n

    主進程:管理子進程,創建套接字,接受用戶請求,並派發給某個子進程處理

    子進程:負責管理線程

    線程:處理請求和響應請求;

  3)event:事件驅動模型,每個線程響應N個請求;,和worker很像,多個進程+多個線程的混合模式,但是event模型下每個進程會有一個單獨的線程來管理這些keep-alive類型的線程,當新的請求過來的時候,管理線程會把請求交給其他空閑線程處理,這樣舊避免了每個線程都被keep-alive阻塞。但是event模型並不是所有情況都通用,再https協議下會退化成worker模型

    一個主進程:生成M個子進程,每個進程直接n個請求,m*n

    主進程:管理子進程,創建套接字,接受用戶請求,並派發給某個子進程

    子進程:處理請求和響應請求

    httpd-2.2,event為測試使用,不支持DSO機制的MPM

    httpd-2.4,event為生產使用,production ready,支持DSO機制的MPM。

2、HTTPD的功能特性

  虛擬主機:能夠標識虛擬主機的方式:IP + PORT + HOSTNAME(IP、Port、FQDN)

  CGI:common gateway interface ,通用網關接口;

  反向代理 :reverse proxy

  負責均衡 :基於流量(bytraffic),基於業務(bybusiness),基於請求(byrequest)

  路徑別名

  豐富的用於認證機制:basic、digest

  支持第三方模塊

 

三、Nginx

  1、簡介 

    nginx2004年正式發布,Apache是1995年

    Apache以穩定著稱但是隨着互聯網的日漸壯大,網站的並發變大,Apache就出現了一個C10K的問題,即一個物理服務器達到並發量1w的時候apache就會承受不了,后來2004年nginx很好的解決了c10k的問題。

    淘寶用的Tengine nginx,簡稱tng

  2、特性

    模塊化設計、較好擴展性(不支持動態裝卸載,tng支持)

  

    高可靠性

      master--->worker

      nginx服務器使用的異步機制是異步非阻塞方式,也就是master-->worker,每個工作進程使用異步非阻塞方式,可以處理多個客戶端請求,當某個工作進程接收到客戶端的請求,調用IO進行處理,如果不能立即獲得結果,就去處理其他的請求,而客戶端再此期間也無需等待響應,可以去處理其他事情,當IO返回時,就會通知此工作進程,該進程得到通知,暫時掛起當前處理的失誤區響應客戶端請求。

      nginx采用異步非阻塞方式處理請求,處理請求具體到系統底層就是讀寫事件(所謂阻塞調用方式即請求事件還沒准備好,線程只能一直等待,等事件准備好了再處理;而非阻塞即事件沒准備好,馬上返回ENGAIN,告訴你事件還沒准備好,而再這期間可以先去做其他事,再回頭看看事件准備好了嗎,時不時的看,需要的開銷也是不小的)

      異步可以理解為循環處理多個准備好的事件,不會導致無畏的資源浪費,當有更多的並發數只會占用更多的內存而已

  

    低內存消耗

      10000個keep-alive連接再ningx僅消耗2.5MB

  

    支持熱部署

      不停機而更新配置文件、更好日志文件、更新服務器程序版本

  

    支持事件驅動、AIO(異步io,epoll等)、mmap(內存映射)

  

  3、基本功能

    處理靜態資源的web服務器,能緩存打開的文件描述符,索引文件以及自動索引;

    http,smtp,pop3協議的反向代理服務器加速,緩存、負載均衡;

    支持FastCGI(fpm,LNMP),uWSGI(python),memcached server等;

    模塊化,非DSO機制,過濾器包括zip,圖形大小調整、byte ranges,chunked responses以及SI-filter,在SSI過濾器中,到同一個proxy或FastCGI的多個子請求並發處理;

    支持SSL,TLS SNI;

  

   4、nginx結構與擴展

    一個master進程,生成一個或多個worker;

    事件驅動:epoll(邊緣觸發,支持linux2.6+),kqueue(BSD 4.1+),/dev/poll(event prots,solaris 7 11/99+);

    消息通知(復用器):select,poll,rt signals(實施信號);

    支持sendfile(linux2.2+),sendfile64(linux2.4.21+),sendfilev(solaris 8 7/01+);

    支持輸入過濾(freeBSD 4.1+)及TCP_DEFER_ACCEPT(linux2.4+);

    最小化的數據庫拷貝操作;

 

   5、擴展功能

    基於名稱和IP 的多虛擬主機站點

    支持keepalive和pipelined(管道)連接

    支持平滑升級,不中斷業務

    定制訪問日志,支持使用日志緩沖區提高日志存儲性能

    4xx-5xx錯誤代碼重定向;

    支持URL, 基於PCRE的rewrite重寫模塊,及正則表達式

    支持路徑別名

    支持基於IP 及用戶的訪問控制

    支持速率限制,支持並發數限制

    支持 PUT,DELETE,MKCOL,COPY及MOVE等較特殊的HTTP請求

    可以做HTTP反向代理及加速緩存,即負載均衡功能,內置都RS節點服務器健康檢查功能,這相當於專業的Haproxy軟件或LVS功能

    具備Squid等專業緩存軟件等緩存功能

    支持FLV(flash視頻);

 

  6、nginx的工作模式

    非阻塞、事件驅動、一個master生成一個或多個worker,每個worker響應n個請求;

      worker*n 國人單機最高並發達到52000個

    nginx是一個高性能得web服務器,能夠同時處理大量得並發請求,它結合多進程機制和異步機制,異步機制使用得異步非阻塞方式,接下來就給大家

   

  7、五大模塊

    核心模塊、標准HTTP模塊、可選HTTP模塊、郵件服務模塊和第三方模塊。

    

      1)、核心模塊:nginx最基本的核心服務,進程管理、權限控制、錯誤日志記錄等;

      2)、標准HTTP模塊:標准HTTP模塊支持標准的HTTP功能;

      3)、可選HTTP模塊:主要用於擴展標准HTTP功能,讓Nginx能處理一些特殊服務;

      4)、郵件服務模塊:主要用於支持Nginx的郵件服務;

      5)、第三方模塊:擴展Nginx服務器應用,完成開發者想要的功能;

    模塊圖如下:

    

       

   8、nginx,master-worker模型架構圖

  

  9、nginx整體架構圖

  

 

  主進程

  nginx啟動時,會生成兩種類型的進程,一個是主進程master一個或多個工作進程worker,主進程並不處理網絡請求,主要負責調度工作進程,加載配置、啟動工作進程及非停升級。所以nginx啟動后查看系統進程,就能看到至少兩個nginx進程

  工作進程

  服務器實際處理網絡請求響應的是工作進程worker,在類unix系統上,nginx可以配置多個worker,每個worker進程都可以同時處理數以千計網絡請求

  模塊化設計

  包括核心功能性模塊核心模塊負責維持要給運行循環run-loop,執行網絡請求處理的不同階段的模塊功能,比如:網絡讀寫、存儲讀寫、內容傳輸、外出過濾,以及將請求發往上游服務器等,而其代碼模塊化設計,也使得我們可以根據需要對功能模塊進行適當的選擇修改,編譯成具有特定功能的服務器

  事件驅動模型

  基於異步及非阻塞事件模型,可以說是nginx得以獲得高並發、高性能得關鍵因素,同時也得益於對linux、solaris及類BSD等操作系統內核中事件通知及I/O性能增強功能得采用,如kqueue、epoll及event ports。

  代理設計

  代理設計,可以說是nginx深入骨髓得設計無論是對於HTTP,還是FastCGI、Memcache、Redis等得網絡請求或響應,本質上都采用了代理機制,所以,Nginx天生就是高性能得代理服務器

 

 

 

轉載請注明出處:https://www.cnblogs.com/zhangxingeng/p/10150955.html 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM