1. 程式人生 > 實用技巧 >資料結構學習筆記.md

資料結構學習筆記.md

Nginx

  Nginx是一款高效能的http 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器。由俄羅斯的程式設計師Igor Sysoev所開發,官方測試nginx能夠支支撐5萬併發連結,並且cpu、記憶體等資源消耗卻非常低,執行非常穩定。

Apache和Nginx區別:


Nginx


  1
、輕量級,採用C進行編寫,同樣的web服務,會佔用更少的記憶體及資源。   2、抗併發,nginx以epollandkqueue作為開發模型,處理請求是非同步非阻塞的,負載能力比apache高很多,而apache則是阻塞型的。在高併發下nginx能保持低資源低消耗高效能,而apache在PHP處理慢或者前端壓力很大的情況下,很容易出現程序數飆升,從而拒絕服務的現象。   
3、nginx在開啟時,會生成一個master程序,然後,master程序會fork多個worker子程序,最後每個使用者的請求由worker的子執行緒處理。   4、可以配置nginx的upstream實現nginx的反向代理。   5、nginx作為負載均衡伺服器,支援7層負載均衡。   6、nginx處理靜態檔案好,靜態處理效能比apache高三倍以上。   7、支援高併發連線,每秒最多的併發連線請求理論可以達到50000個。   8、nginx配置簡潔,正則配置讓很多事情變得簡單,而且改完配置能使用-t測試配置有沒有問題,apache配置複雜,重啟的時候發現配置出錯了,會很崩潰。   
9、用執行緒處理使用者請求,而執行緒是共享記憶體的,只需要開啟少量程序,多個執行緒就可以共享程序的記憶體,佔用記憶體小。   10、一個程序死掉時,會影響到多個使用者的使用,穩定性差。   11、nginx的設計高度模組化,編寫模組相對簡單。   12、nginx本身就是一個反向代理伺服器,而且可以作為非常優秀的郵件代理伺服器。   13、啟動特別容易,並且幾乎可以做到7*24不間斷執行,即使執行數個月也不需要重新啟動,還能夠不間斷服務的情況下進行軟體版本的升級。   14、社群活躍,各種高效能模組出品迅速。


Apache
  

   1
、select同步阻塞。   2、一個連線對應一個程序。   
3、用程序處理使用者請求,用MPM(多處理模組)來繫結到網路埠上,接受請求,排程子程序處理請求。   4、當用戶請求過多時,開啟的程序較多,佔用記憶體大,每秒最多的併發連線請求最多不超過3000個。   5、一個程序死掉時,不會影響其他的使用者   6、apache的rewrite比nginx強大,在rewrite頻繁的情況下,用apache。   7、apache發展到現在,模組超多,基本想到的都可以找到。   8、apache更為成熟,少bug,nginx的bug相對較多。   9、apache超穩定。   10、apache對PHP支援比較簡單,nginx需要配合其他後端用。   11、apache在處理動態請求有優勢,一般動態請求要apache去做,nginx適合靜態和反向。   12、apache仍然是目前的主流,擁有豐富的特性,成熟的技術和開發社群。

使用場景:

  

Nginx:  

  1、 http伺服器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態伺服器。

2、 虛擬主機。可以實現在一臺伺服器虛擬出多個網站。例如個人網站使用的虛擬主機。

  •       基於埠的,不同的埠
  •       基於域名的,不同域名

3、 反向代理,負載均衡。當網站的訪問量達到一定程度後,單臺伺服器不能滿足使用者的請求時,需要用多臺伺服器叢集可以使用nginx做反向代理。並且多臺伺服器可以平均分擔負載,不會因為某臺伺服器負載高宕機而某臺伺服器閒置的情況。

Apache:

  1、自己去想

  

  

一 、什麼是代理

1、代理其實就是一箇中介,A和B本來可以直連,中間插入一個C,C就是中介。
2、剛開始的時候,代理多數是幫助內網client訪問外網server用的

3、後來出現了反向代理,
"反向"這個詞在這兒的意思其實是指方向相反,即代理將來自外網客戶端的請求轉發到內網伺服器,從外到內

二、 正向代理

  國外的某網站我們通過瀏覽器是沒有辦法訪問的,此時大家可能都會用一個代理進行訪問,代理的方式主要是找到一個可以訪問國外網站的代理伺服器,我們將請求傳送給代理伺服器,代理伺服器去訪問國外的網站,然後將訪問到的資料傳遞給我們!

三 反向代理

  反向代理(Reverse Proxy)實際執行方式是指以代理伺服器來接受internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時代理伺服器對外就表現為一個伺服器

總結:

兩者的區別在於代理的物件不一樣:正向代理代理的物件是客戶端,反向代理代理的物件是服務端。

  

負載均衡

1、當一臺伺服器的單位時間內的訪問量越大時,伺服器壓力就越大,大到超過自身承受能力時,伺服器就會崩潰。為了避免伺服器崩潰,讓使用者有更好的體驗,我們通過負載均衡的方式來分擔伺服器壓力。
2、我們可以建立很多很多伺服器,組成一個伺服器叢集,當用戶訪問網站時,先訪問一箇中間伺服器,在讓這個中間伺服器在伺服器叢集中選擇一個壓力較小的伺服器,然後將該訪問請求引入該伺服器。如此以來,使用者的每次訪問,都會保證伺服器叢集中的每個伺服器壓力趨於平衡,分擔了伺服器壓力,避免了伺服器崩潰的情況。

  負載均衡是用反向代理的原理實現的。

負載均衡方式

  

1、輪詢(預設)

     每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。

 

  2、weight權重        

     指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。(權重越高,在被訪問的概率越大)

 

  3、url_hash(第三方)

      在upstream中採用ip_hash指令,如果客戶已經訪問了某個伺服器,當用戶再次訪問時,會將該請求通過雜湊演算法,自動定位到該伺服器。每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器

 

  4、fair(第三方)

     按後端伺服器的響應時間來分配請求,響應時間短的優先分配。

 

  

down 表示單前的server暫時不參與負載

weight 預設為1.weight越大,負載的權重就越大。

max_fails:允許請求失敗的次數預設為1.當超過最大次數時,返回 proxy_next_upstream模組定義的錯誤
fail_timeout:max_fails次失敗後,暫停的時間。
backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。