1. 程式人生 > >nginx 集群

nginx 集群

機制 nginx 配置 apache服務器 cpu 創建 start 瀏覽器 反向 還需

Nginx是什麽?

Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器。一直納悶這個X是怎麽來的在網上查了查原來X代表很牛逼的樣子,Nginx就是代表一個非常牛逼的引擎服務器系統,在很多年以前記得都是用的apache來作為分流以及負載均衡的作用,在過了幾年中一個俄羅斯人又開發了一個性能更高的服務器來處理客戶端向瀏覽器發出的各種請求,它從技術角度解決了大數量高並發的用戶量訪問,官網上面寫的並發數量可以達到5萬,實際項目應用中可能也打不到這麽多,如果可以達到2、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系統上面,會得到更好的性能。

nginx 集群