新四季網

nginx特點和架構多圖詳解(架構和基礎原理)

2023-04-15 00:36:30 1

Nginx 的應用場景

Nginx 的應用場景主要有三個:

靜態資源服務反向代理服務API 服務

靜態資源服務

Nginx 可以通過本地文件系統提供靜態資源的服務,例如純靜態的 HTML 頁面等。

反向代理服務

很多應用服務的運行效率是很低的,QPS,TPS,並發等都是受限的,所以需要把很多應用服務組成一個集群,向用戶提供高可用性的服務,這個時候需要 Nginx 的反向代理功能,而應用服務的動態擴容需要負載均衡功能,另外一個,Nginx 層還需要做緩存。因此反向代理服務主要是三個功能:

反向代理負載均衡緩存

API 服務

有時候應用服務本身有很多性能問題,但是資料庫服務要比應用服務好的多,業務場景比較簡單,並發性和 TPS 都要遠高於應用服務,所以這個時候可以由 Nginx 直接去訪問資料庫或者 Redis,還可以利用 Nginx 的強大的並發性來實現應用防火牆的 API 服務。

Nginx 架構基礎

Nginx 狀態機

Nginx 對外提供服務時,主要有三種流量會到達 Nginx:WEB、EMAIL、TCP 流量。這三種流量到達 Nginx 後,會分別由傳輸層狀態機、應用層狀態機、MAIL 狀態機來處理。當內存不足以緩存所有的靜態資源時,會退化成阻塞的磁碟調用,這個時候需要一個線程池來處理,對於每一個處理完的請求記錄訪問日誌和錯誤日誌,日誌也是記錄到磁碟中的。

Nginx 的進程結構

Nginx 有四種進程:

Master 進程。Master 進程是父進程,其他進程都是子進程,Master 進程對 worker 進程進行管理worker 進程。worker 進程有多個,是負責處理具體的請求的。Nginx 為什麼採用多進程而不是多線程的進程結構呢?是因為 Nginx 要保證高可用性,多線程之間會共享地址空間,當某一個第三方模塊引發了一個段錯誤時,就會導致整個 Nginx 進程掛掉。而採用多進程模型不會出現這個問題cache manager 和 cache loader 進程。緩存除了要被多個 worker 進程使用,也要被 cache 進程使用,cache loader 做緩存的載入,cache manager 做緩存的管理,實際上每一個請求所使用的緩存還是由 worker 進程來進行的。這些進程間的通信都是通過共享內存來進行的

為什麼 worker 進程需要很多個?

這是因為,Nginx 採用了事件驅動的模型後,它期望 worker 進程可以從頭到尾佔滿一顆 CPU,這樣可以更加高效的利用整顆 CPU,提高 CPU 的緩存命中率,另外還可以將 worker 進程與某一個 CPU 核綁定在一起。

使用信號管理 Nginx 的父子進程

在前面說到了 Nginx 的命令行,其實很多 Nginx 的信號都是通過向 master 進程發送信號來實現的。

Master 進程

master 進程會監控 worker 進程,而監控是通過 Linux 規定的當子進程退出時需要向父進程發送 CHLD 信號實現的。這樣可以當出現 bug 時,立刻拉起 worker。

master 進程可以接收以下信號:

TERM, INTQUITHUPUSR1USR2WINCH

Worker 進程

worker 進程可以接收以下信號:

TERM, INTQUITHUPUSR1WINCH

命令行對應的信號

reload:HUPreopen:USR1stop:TERMquit:QUIT

USR2 和 WINCH 沒有對應的信號,只能通過 kill 發送。

stop 和 quit 的區別是,一個是立即退出,一個是優雅的停止。

reload 重載配置文件的真相

向 master 進程發送 HUP 信號master 進程檢查配置文件是否有語法問題master 進程打開新的監聽埠(如果配置了新的埠)master 進程使用新的配置文件啟動 worker 進程master 進程向老的 worker 進程發送 QUIT 信號老 worker 進程關閉監聽句柄,處理完當前連接後結束進程

熱部署的真相

在上一篇文章中,講了熱部署的流程,那麼熱部署具體的流程是怎麼樣的呢?

將舊的 Nginx 文件替換成新的 Nginx 文件(注意備份)向 master 進程發送 USR2 信號master 進程修改 pid 文件名,加後綴 .oldbinmaster 進程用新 Nginx 文件啟動新 master 進程向老的 master 進程發送 quit 信號,關閉老的 master回滾操作,向老的 master 進程發送 HUP 信號,向新的 master 發 QUIT

優雅的關閉 worker 進程

設置定時器 worker_shutdown_timeout關閉監聽句柄關閉空閒連接再循環等待全部連接關閉退出進程

這裡面,定時器的作用是,如果時間超時了,但是連接還沒有處理完畢,就會強制退出進程。另外,Nginx 只能處理 HTTP 的優雅關閉,websocket 、TCP、UDP 的代理都做不到,worker 不解析數據。

以上這些內容,就是 Nginx 命令行和信號的完整過程。下一講開始講 HTTP 模塊。

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了