Nginx學習筆記(一)基本概念及原理

什麼是Nginx

在這裏插入圖片描述
nginx可以作爲web服務器,但更多的時候,我們把它作爲網關,因爲它具備網關必備的功能:反向代理、負載均衡、動態路由、請求過濾

基本概念

(1)正向代理

如果把局域網外的Internet想象成一個巨大的資源庫,則局域網中的客戶端要訪問Internet,則需要通過代理服務器來訪問,這種代理服務就稱爲正向代理。

在這裏插入圖片描述
(2)反向代理

反向代理,其實客戶端對代理是無感知的,因爲客戶端不需要任何配置就可以訪問,我們只需要將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取數據後,在返回給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器地址,隱藏了真實服務器IP地址

在這裏插入圖片描述
(3)負載均衡

   客戶端發送多個請求到服務器,服務器處理請求,有一些可能要與數據庫進行交互,服務器處理完畢後,再將結果返回給客戶端。

   這種架構模式對於早期的系統相對單一, 併發請求相對較少的情況下是比較適合的,成本也低。但是隨着信息數量的不斷增長,訪問量和數據量的飛速增長,以及系統業務的複雜度增加,這種架構會造成服務器相應客戶端的請求日益緩慢,併發量特別大的時候,還容易造成服務器直接崩潰。很明顯這是由於服務器性能的瓶頸造成的問題,那麼如何解決這種情況呢?。

   我們首先想到的可能是升級服務器的配置,比如提高CPU執行頻率,加大內存等提高機器的物理性能來解決此問題,但是事實上硬件的性能提升已經不能滿足日益提升的需求了。最明顯的一個例子,天貓雙十一當天,某個熱銷商品的瞬時訪問量是極其龐大的,那麼類似上面的系統架構,將機器都增加到現有的項級物理配置,都是不能夠滿足需求的。那麼怎麼辦呢?。

   上面的分析我們去掉了增加服務器物理配置來解決問題的方法,也就是說縱向解決問題的方法行不通了,那麼橫向增加服務器的數量呢?這時候集羣的概念產生了,單個服務器解決不了,我們增加服務器的數量,然後將請求分發到各個服務器上,將原先請求集中到單個服務器上的情況改爲將請求分發到多個服務器上,將負載分發到不同的服務器,也就是我們說的負載均衡
在這裏插入圖片描述
(4)動靜分離

  爲了加快網站的解析速度,可以把動態頁面和靜態頁面由不同的服務器來解析,加快解析速度。降低原來單個服務器的壓力。
在這裏插入圖片描述

Nginx原理

  1. master和worker
    在這裏插入圖片描述

  2. worker如何進行工作的?
    在這裏插入圖片描述

  3. 一個master多個worker有哪些好處
    (1)可以使用nginx -s reload熱部署,利用nginx進行熱部署操作。
    (2)首先,對於每個worker進程來說,獨立的進程,不需要加鎖,所以省掉了鎖帶來的開銷,同時在編程以及問題查找時,也會方便很多。其次,採用獨立的進程,可以讓互相之間不會影響,一個進程退出後,其它進程還在工作,服務不會中斷,master 進程則很快啓動新的worker進程。當然,worker 進程的異常退出,肯定是程序有bug了,異常退出,會導致當前worker上的所有請求失敗,不過不會影響到所有請求,所以降低了風險。

  4. 需要設置多少個work合適
    Nginx同Redis類似都採用了 io多路複用機制,每個worker都是一個獨立的進程,但每個進程裏只有一個主線程,通過異步非阻塞的方式來處理請求,即使是千上萬個請求也不在話下。每個worker的線程可以把一個cpu的性能發揮到極致。所以worker數和服務器的cpu數相等是最爲適宜的。設少了會浪費cpu,設多了會造成cpu頻繁切換上下文帶來的損耗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章