首页
/
每日頭條
/
生活
/
nginx特點和架構多圖詳解
nginx特點和架構多圖詳解
更新时间:2024-11-15 20:07:34
Nginx 的應用場景

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

  • 靜态資源服務
  • 反向代理服務
  • API 服務

靜态資源服務

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

反向代理服務

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

  • 反向代理
  • 負載均衡
  • 緩存

API 服務

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

Nginx 架構基礎

Nginx 狀态機

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

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

Nginx 的進程結構

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

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, INT
  • QUIT
  • HUP
  • USR1
  • USR2
  • WINCH

Worker 進程

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

  • TERM, INT
  • QUIT
  • HUP
  • USR1
  • WINCH

命令行對應的信号

  • reload:HUP
  • reopen:USR1
  • stop:TERM
  • quit:QUIT

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

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

reload 重載配置文件的真相

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

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

熱部署的真相

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

  1. 将舊的 Nginx 文件替換成新的 Nginx 文件(注意備份)
  2. 向 master 進程發送 USR2 信号
  3. master 進程修改 pid 文件名,加後綴 .oldbin
  4. master 進程用新 Nginx 文件啟動新 master 進程
  5. 向老的 master 進程發送 quit 信号,關閉老的 master
  6. 回滾操作,向老的 master 進程發送 HUP 信号,向新的 master 發 QUIT

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

優雅的關閉 worker 進程

  1. 設置定時器 worker_shutdown_timeout
  2. 關閉監聽句柄
  3. 關閉空閑連接
  4. 再循環等待全部連接關閉
  5. 退出進程

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

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

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
獵豹mattu頂配
獵豹mattu頂配
如今國産車在suv領域的表現大家都是有目共睹的,很大程度上也是改變了衆多消費者對國産車的以往看法,同時提高了國産車在suv市場地位。而要說到暢銷的國産suv,一想還真是有不少,哈弗H6、長安CS75PLUS、博越、宋Pro、缤越、瑞虎8等多...
2024-11-15
紅色生長紋和白色生長紋
紅色生長紋和白色生長紋
(悅美整形網原創)【天使名源科普——擡頭紋的“罪魁禍首”原來是TA!】在多數人的觀念中,擡頭紋等較明顯的皺紋是中老年人的“專利”,但實際卻不是這樣,如今很多年輕人也因擡頭紋過早侵占額頭,而深感困擾呢。擡頭紋問題已經有年輕化趨勢。擡頭紋到底從...
2024-11-15
開淘寶店賣文具
開淘寶店賣文具
需要營業執照。根據中華人民共和國的相關的法律法規的規定,不管你是網上的店,還是實體店應該都是需要辦理營業執照的。淘寶開文具店已經習以為常了,畢竟現在年輕一代的父母也都很習慣在網上購買孩子或者自己所需要的學習用品,商家也從中看到了利潤,那麼想...
2024-11-15
除皺針停止了會不會皺紋越來越多
除皺針停止了會不會皺紋越來越多
皮膚衰老大概是從35歲以後開始,随着人年齡的增加,脂肪堆積下垂,臉部輪廓模糊,膠原蛋白流失,臉部就會出現淚溝、法令紋、木偶紋等,面部五官呈三角形下垂,皮膚松弛等問題也随之而來,面對皺紋問題的煩惱,下面這些方法可以幫到您。一、非手術類除皺1....
2024-11-15
你們知道黑色大麗花慘案嗎
你們知道黑色大麗花慘案嗎
生前寂寂無名,死後火爆全美,空有明星夢卻始終不入流的伊麗莎白·安·肖特恐怕做夢都想不到自己竟然是以“黑色大麗花”慘案的女主角聞名于世。1947年1月15日,在美國洛杉矶的一片空地上,驚現一具無名女S,S體損毀嚴重,從肚臍處被攔腰截成兩段,指...
2024-11-15
Copyright 2023-2024 - www.tftnews.com All Rights Reserved