Nginx是什麼?
Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器。一直納悶這個X是怎麼來的在網上查了查原來X表明很牛逼的樣子,Nginx就是表明一個很是牛逼的引擎服務器系統,在不少年之前記得都是用的apache來做爲分流以及負載均衡的做用,在過了幾年中一個俄羅斯人又開發了一個性能更高的服務器來處理客戶端向瀏覽器發出的各類請求,它從技術角度解決了大數量高併發的用戶量訪問,官網上面寫的併發數量能夠達到5萬,實際項目應用中可能也打不到這麼多,若是能夠達到二、3萬併發訪問量,也是一個用戶很是多的網站了。
下面咱們就結婚具體的例子以及特色原理啥的來應該這個技術到咱們項目中來。
Nginx與Apache服務器對比
1.輕量級,一樣起web 服務,比apache 佔用更少的內存及資源 抗併發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高性能 。nginx運行起來佔用的資源CUP很是少,對於啓動、重啓都很是快速,在低配電腦上也能夠快速的運行。
2.Nginx 配置簡潔, Apache 複雜
對於這一點使用過nginx的用戶來講就會深有體會,若是不是學習他的原理以及各類細節,幾乎一會的時間就能夠搭起來一個nginx集羣服務器,搭建能夠按着下面的步驟本身搭建。
3.最核心的區別在於apache是同步多進程模型,一個鏈接對應一個進程;nginx是異步的,多個鏈接(萬級別)能夠對應一個進程。
4.nginx的負載能力比apache高不少
若是你的網站有大量的高併發用戶訪問能夠試着使用nginx來做爲負載均行。
典型案例
中國大陸使用nginx網站用戶有:新浪、網易、騰訊等。這麼大的公司都在使用nginx做爲網站的負載均衡能夠說,它已是一個比較成熟的框架,值得咱們去學習和了解,經過學習和了解這個服務器也瞭解了一些多線程、阻塞、非阻塞的概念,多線程是一個很不錯的提高性能的解決方案,但有時在多個線程之間切換以及建立關閉線程很消耗系統資源,接觸的一些多線程模式能夠解決多線程帶來的併發訪問問題,若是master/worker,fulture,生產者/消費者模式等等,在nginx裏面就用到了一個多線程模式,master/worker模式,這個模式在nginx中起着重要的做用。
本身搭建集羣架構:
從官網下載最新nginx-1.9.0.,下載地址爲:http://nginx.org/en/download.html
1.下載完成,解壓,到以下目錄打開cmd,輸入start nginx命令,便可啓動nginx進程。
2.轉到conf目錄,以下
打開文件後,更改以下配置:
如上圖所示,我配置了兩臺tomcat服務器,讓nginx做爲負載均衡代理的做用,通過測試配置好後既可使用,它會隨機的分發到兩臺不一樣的電腦上面去,配置很是簡單,固然若是要深刻了解nginx仍是須要仔細分析分析它的運行流程的,簡單的配置並不可以真正掌握它的做用,也不可以讓它發揮更大的做用,例如還有一些靜態資源的配置,訪問等等,上面的jpj|png等都是對於靜態資源的配置,它會將靜態資源保存在本地的nginx服務器,減小服務器之間的帶寬以及讀寫速度。
Nginx具備高性能緣由
想要理解高性能還須要從最近本概念提及,要不是很差理解它爲何會性能高。一個線程一般具備五中狀態,以及它們之間的轉換關係以下,不可逆轉。
1.
新生--->就緒: 經過調用start()方法
2.
就緒--->運行: 處於就緒狀態的線程一旦獲得CPU,就進入運行狀態並自動調用本身的run()方法
3.
運行--->阻塞: 處於運行狀態的線程,執行sleep()方法,或等待I/O設備資源,讓出CPU並暫時停止本身運行,進入阻塞狀態
4.
阻塞--->就緒: 睡眠時間已到,或等待的I/O設備空閒下來,線程便進入就緒狀態,從新到就緒隊列中等待CPU。當再次得到CPU時,便從原來停止位置開始繼續運行。
5.
運行--->死亡: (1)(正常狀況下)線程任務完成
(2)(非正常情況)線程被強制性的停止,如經過執行stop()或destroy()方法來終止一個線程
線程
這裏重點說一下阻塞狀態,當web服務器如tomcat處理大量請求時,會頻繁進行磁盤IO讀寫操做,CPU輪訓時會使運行狀態的請求進入「阻塞」狀態,這就是阻塞產生的緣由,接下來講一下非阻塞。
非阻塞
把整個過程切換成小的任務,經過任務間協做完成。 由一個專門的線程來處理全部的 IO 事件,並負責分發。
事件驅動機制:事件到的時候觸發,而不是同步的去監視事件。
線程通信:線程之間經過 wait,notify 等方式通信。保證每次上下文切換都是有意義的。減小無謂的進程切換。
Master/Worker併發工做模式
該模式來用來處理高併發的一種設計模式,多線程請求時,模式工做圖以下
Master-Worker模式是經常使用的並行模式之一,它的核心思想是,系統有兩個進程協做工做:Master進程,負責接收和分配任務;Worker進程,負責處理子任務。當Worker進程將子任務處理完成後,結果返回給Master進程,由Master進程作概括彙總,最後獲得最終的結果。
同一時刻只有一個worker創建鏈接,用到了鎖的概念來保證只有一個worker處理請求。採用多線程好處,若是一個worker掛掉,對於其餘沒有影響
下面是一個簡單的master、worker多線程實現,
Worker:用於實際處理一個任務;
Master:任務的分配和最終結果的合成
Main:啓動程序,調度開啓Master。
代碼實現中……………………
總結:
Nginx服務器是一個高性能的服務器,能夠用它來做爲提升性能的系統,在上線的產品最好搭建在linux系統上面,會獲得更好的性能。