日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

分析Nginx為什么快的原因

汽車玩家 ? 來源:今日頭條 ? 作者:Java的小本家 ? 2020-05-04 14:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Nginx 以其高性能,穩(wěn)定性,豐富的功能,簡(jiǎn)單的配置和低資源消耗而聞名。本文從底層原理分析 Nginx 為什么這么快!

Nginx 的進(jìn)程模型

分析Nginx為什么快的原因

Nginx 服務(wù)器,正常運(yùn)行過程中:

多進(jìn)程:一個(gè) Master 進(jìn)程、多個(gè) Worker 進(jìn)程。

Master 進(jìn)程:管理 Worker 進(jìn)程。對(duì)外接口:接收外部的操作(信號(hào));對(duì)內(nèi)轉(zhuǎn)發(fā):根據(jù)外部的操作的不同,通過信號(hào)管理 Worker;監(jiān)控:監(jiān)控 Worker 進(jìn)程的運(yùn)行狀態(tài),Worker 進(jìn)程異常終止后,自動(dòng)重啟 Worker 進(jìn)程。

Worker 進(jìn)程:所有 Worker 進(jìn)程都是平等的。實(shí)際處理:網(wǎng)絡(luò)請(qǐng)求,由 Worker 進(jìn)程處理。Worker 進(jìn)程數(shù)量:在 nginx.conf 中配置,一般設(shè)置為核心數(shù),充分利用 CPU 資源,同時(shí),避免進(jìn)程數(shù)量過多,避免進(jìn)程競(jìng)爭(zhēng) CPU 資源,增加上下文切換的損耗。

思考:

請(qǐng)求是連接到 Nginx,Master 進(jìn)程負(fù)責(zé)處理和轉(zhuǎn)發(fā)?

如何選定哪個(gè) Worker 進(jìn)程處理請(qǐng)求?請(qǐng)求的處理結(jié)果,是否還要經(jīng)過 Master 進(jìn)程?

分析Nginx為什么快的原因

HTTP 連接建立和請(qǐng)求處理過程

HTTP 連接建立和請(qǐng)求處理過程如下:

Nginx 啟動(dòng)時(shí),Master 進(jìn)程,加載配置文件。

Master 進(jìn)程,初始化監(jiān)聽的 Socket。

Master 進(jìn)程,F(xiàn)ork 出多個(gè) Worker 進(jìn)程。

Worker 進(jìn)程,競(jìng)爭(zhēng)新的連接,獲勝方通過三次握手,建立 Socket 連接,并處理請(qǐng)求。

Nginx 高性能、高并發(fā)

Nginx 為什么擁有高性能并且能夠支撐高并發(fā)?

Nginx 采用多進(jìn)程+異步非阻塞方式(IO 多路復(fù)用 Epoll)。

請(qǐng)求的完整過程:建立連接→讀取請(qǐng)求→解析請(qǐng)求→處理請(qǐng)求→響應(yīng)請(qǐng)求。

請(qǐng)求的完整過程對(duì)應(yīng)到底層就是:讀寫 Socket 事件。

Nginx 的事件處理模型

Request:Nginx 中 HTTP 請(qǐng)求。

基本的 HTTP Web Server 工作模式:

接收請(qǐng)求:逐行讀取請(qǐng)求行和請(qǐng)求頭,判斷段有請(qǐng)求體后,讀取請(qǐng)求體。

處理請(qǐng)求。

返回響應(yīng):根據(jù)處理結(jié)果,生成相應(yīng)的 HTTP 請(qǐng)求(響應(yīng)行、響應(yīng)頭、響應(yīng)體)。

Nginx 也是這個(gè)套路,整體流程一致:

分析Nginx為什么快的原因

模塊化體系結(jié)構(gòu)

分析Nginx為什么快的原因

Nginx 的模塊根據(jù)其功能基本上可以分為以下幾種類型:

①event module:搭建了獨(dú)立于操作系統(tǒng)的事件處理機(jī)制的框架,及提供了各具體事件的處理。包括 ngx_events_module,ngx_event_core_module 和 ngx_epoll_module 等。

Nginx 具體使用何種事件處理模塊,這依賴于具體的操作系統(tǒng)和編譯選項(xiàng)。

②phase handler:此類型的模塊也被直接稱為 handler 模塊。主要負(fù)責(zé)處理客戶端請(qǐng)求并產(chǎn)生待響應(yīng)內(nèi)容,比如 ngx_http_static_module 模塊,負(fù)責(zé)客戶端的靜態(tài)頁面請(qǐng)求處理并將對(duì)應(yīng)的磁盤文件準(zhǔn)備為響應(yīng)內(nèi)容輸出。

③output filter:也稱為 filter 模塊,主要是負(fù)責(zé)對(duì)輸出的內(nèi)容進(jìn)行處理,可以對(duì)輸出進(jìn)行修改。

例如,可以實(shí)現(xiàn)對(duì)輸出的所有 html 頁面增加預(yù)定義的 footbar 一類的工作,或者對(duì)輸出的圖片的 URL 進(jìn)行替換之類的工作。

④upstream:upstream 模塊實(shí)現(xiàn)反向代理的功能,將真正的請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù)器上,并從后端服務(wù)器上讀取響應(yīng),發(fā)回客戶端。

upstream 模塊是一種特殊的 handler,只不過響應(yīng)內(nèi)容不是真正由自己產(chǎn)生的,而是從后端服務(wù)器上讀取的。

⑤load-balancer:負(fù)載均衡模塊,實(shí)現(xiàn)特定的算法,在眾多的后端服務(wù)器中,選擇一個(gè)服務(wù)器出來作為某個(gè)請(qǐng)求的轉(zhuǎn)發(fā)服務(wù)器。

常見問題剖析

Nginx vs Apache

Nginx:

IO 多路復(fù)用,Epoll(freebsd 上是 kqueue)

高性能

高并發(fā)

占用系統(tǒng)資源少

Apache:

阻塞+多進(jìn)程/多線程

更穩(wěn)定,Bug 少

模塊更豐富

Nginx 最大連接數(shù)

基礎(chǔ)背景:

Nginx 是多進(jìn)程模型,Worker 進(jìn)程用于處理請(qǐng)求。

單個(gè)進(jìn)程的連接數(shù)(文件描述符 fd),有上限(nofile):ulimit -n。

Nginx 上配置單個(gè) Worker 進(jìn)程的最大連接數(shù):worker_connections 上限為 nofile。

Nginx 上配置 Worker 進(jìn)程的數(shù)量:worker_processes。

因此,Nginx 的最大連接數(shù):

Nginx 的最大連接數(shù):Worker 進(jìn)程數(shù)量 x 單個(gè) Worker 進(jìn)程的最大連接數(shù)。

上面是 Nginx 作為通用服務(wù)器時(shí),最大的連接數(shù)。

Nginx 作為反向代理服務(wù)器時(shí),能夠服務(wù)的最大連接數(shù):(Worker 進(jìn)程數(shù)量 x 單個(gè) Worker 進(jìn)程的最大連接數(shù))/ 2。

Nginx 反向代理時(shí),會(huì)建立 Client 的連接和后端 Web Server 的連接,占用 2 個(gè)連接。

思考:

每打開一個(gè) Socket 占用一個(gè) fd?

為什么,一個(gè)進(jìn)程能夠打開的 fd 數(shù)量有限制?

HTTP 請(qǐng)求和響應(yīng)

HTTP 請(qǐng)求:

請(qǐng)求行:method、uri、http version

請(qǐng)求頭

請(qǐng)求體

HTTP 響應(yīng):

響應(yīng)行:http version、status code

響應(yīng)頭

響應(yīng)體

IO 模型

處理多個(gè)請(qǐng)求時(shí),可以采用:IO 多路復(fù)用或者阻塞 IO+多線程:

IO 多路復(fù)用:一個(gè)線程,跟蹤多個(gè) Socket 狀態(tài),哪個(gè)就緒,就讀寫哪個(gè)。

阻塞 IO+多線程:每一個(gè)請(qǐng)求,新建一個(gè)服務(wù)線程。

IO 多路復(fù)用和多線程的適用場(chǎng)景?

IO 多路復(fù)用:?jiǎn)蝹€(gè)連接的請(qǐng)求處理速度沒有優(yōu)勢(shì)。

大并發(fā)量:只使用一個(gè)線程,處理大量的并發(fā)請(qǐng)求,降低上下文環(huán)境切換損耗,也不需要考慮并發(fā)問題,相對(duì)可以處理更多的請(qǐng)求。

消耗更少的系統(tǒng)資源(不需要線程調(diào)度開銷)。

適用于長(zhǎng)連接的情況(多線程模式長(zhǎng)連接容易造成線程過多,造成頻繁調(diào)度)。

阻塞 IO +多線程:實(shí)現(xiàn)簡(jiǎn)單,可以不依賴系統(tǒng)調(diào)用。

每個(gè)線程,都需要時(shí)間和空間。

線程數(shù)量增長(zhǎng)時(shí),線程調(diào)度開銷指數(shù)增長(zhǎng)。

select/poll 和 epoll 比較如下:

詳細(xì)內(nèi)容,參考:

https://www.cnblogs.com/wiessharling/p/4106295.html

select/poll 系統(tǒng)調(diào)用:

// select 系統(tǒng)調(diào)用

int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);

// poll 系統(tǒng)調(diào)用

int poll(struct pollfd fds[], nfds_t nfds, int timeout);

select:

查詢 fd_set 中,是否有就緒的 fd,可以設(shè)定一個(gè)超時(shí)時(shí)間,當(dāng)有 fd (File descripter) 就緒或超時(shí)返回。

fd_set 是一個(gè)位集合,大小是在編譯內(nèi)核時(shí)的常量,默認(rèn)大小為 1024。

特點(diǎn):連接數(shù)限制,fd_set 可表示的 fd 數(shù)量太小了;線性掃描:判斷 fd 是否就緒,需要遍歷一邊 fd_set;數(shù)據(jù)復(fù)制:用戶空間和內(nèi)核空間,復(fù)制連接就緒狀態(tài)信息。

poll:

解決了連接數(shù)限制:poll 中將 select 中的 fd_set 替換成了一個(gè) pollfd 數(shù)組,解決 fd 數(shù)量過小的問題。

數(shù)據(jù)復(fù)制:用戶空間和內(nèi)核空間,復(fù)制連接就緒狀態(tài)信息。

epoll,event 事件驅(qū)動(dòng):

事件機(jī)制:避免線性掃描,為每個(gè) fd,注冊(cè)一個(gè)監(jiān)聽事件,fd 變更為就緒時(shí),將 fd 添加到就緒鏈表。

fd 數(shù)量:無限制(OS 級(jí)別的限制,單個(gè)進(jìn)程能打開多少個(gè) fd)。

select,poll,epoll:

I/O 多路復(fù)用的機(jī)制。

I/O 多路復(fù)用就通過一種機(jī)制,可以監(jiān)視多個(gè)描述符,一旦某個(gè)描述符就緒(一般是讀就緒或者寫就緒),能夠通知程序進(jìn)行相應(yīng)的讀寫操作;監(jiān)視多個(gè)文件描述符。

但 select,poll,epoll 本質(zhì)上都是同步 I/O:用戶進(jìn)程負(fù)責(zé)讀寫(從內(nèi)核空間拷貝到用戶空間),讀寫過程中,用戶進(jìn)程是阻塞的;異步 IO,無需用戶進(jìn)程負(fù)責(zé)讀寫,異步 IO,會(huì)負(fù)責(zé)從內(nèi)核空間拷貝到用戶空間。

Nginx 的并發(fā)處理能力

關(guān)于 Nginx 的并發(fā)處理能力:并發(fā)連接數(shù),一般優(yōu)化后,峰值能保持在 1~3w 左右。(內(nèi)存和 CPU 核心數(shù)不同,會(huì)有進(jìn)一步優(yōu)化空間)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11332

    瀏覽量

    225991
  • nginx
    +關(guān)注

    關(guān)注

    0

    文章

    194

    瀏覽量

    13223
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Nginx日志分析命令實(shí)踐和常見問題排查思路

    日常運(yùn)維工作中,日志分析是排查問題最直接的手段。Nginx 作為入口層代理,幾乎所有請(qǐng)求都要經(jīng)過它。當(dāng)網(wǎng)站出現(xiàn)響應(yīng)慢、500 錯(cuò)誤、502 網(wǎng)關(guān)超時(shí)、限流失效等問題時(shí),第一反應(yīng)應(yīng)該是查 Nginx
    的頭像 發(fā)表于 04-15 14:12 ?256次閱讀

    Nginx的限流機(jī)制深度解析

    很多運(yùn)維工程師對(duì) Nginx 的認(rèn)知停留在"反向代理"和"負(fù)載均衡",但實(shí)際上 Nginx 在安全防護(hù)方面也相當(dāng)強(qiáng)大——限流可以防止 CC 攻擊和 API 濫用,黑白名單可以精準(zhǔn)控制訪問來源,基礎(chǔ)安全配置可以防護(hù)常見的 Web 攻擊。
    的頭像 發(fā)表于 04-10 16:40 ?697次閱讀

    Nginx中Master與Worker進(jìn)程的工作機(jī)制

    Nginx是現(xiàn)代互聯(lián)網(wǎng)架構(gòu)中最常用的Web服務(wù)器和反向代理軟件。很多運(yùn)維工程師使用Nginx多年,卻對(duì)其核心架構(gòu)一知半解,配置優(yōu)化時(shí)只會(huì)機(jī)械地調(diào)整幾個(gè)參數(shù)。本文從Nginx進(jìn)程模型出發(fā),深入講解worker進(jìn)程的工作機(jī)制,幫助你
    的頭像 發(fā)表于 04-08 14:21 ?126次閱讀

    Nginx高并發(fā)連接調(diào)優(yōu)實(shí)戰(zhàn)手冊(cè)

    Nginx 的高性能源自其事件驅(qū)動(dòng)架構(gòu)。與 Apache 的"每連接一線程"模型不同,Nginx 使用單線程事件循環(huán)處理數(shù)千個(gè)并發(fā)連接。理解這套架構(gòu)是調(diào)優(yōu)的前提。
    的頭像 發(fā)表于 03-16 15:28 ?491次閱讀

    Nginx常見故障排查手冊(cè)

    Nginx 報(bào) 502、504、連接超時(shí),看起來都是“請(qǐng)求沒成功”,但根因完全不是一類問題。502 更多是上游服務(wù)直接返回?zé)o效響應(yīng)、連接被拒絕或進(jìn)程掛了;504 更像是請(qǐng)求已經(jīng)到上游,但超時(shí)窗口內(nèi)沒
    的頭像 發(fā)表于 03-11 09:47 ?476次閱讀

    Nginx常見故障案例總結(jié)

    在互聯(lián)網(wǎng)公司的運(yùn)維生涯中,Nginx故障可以說是最常見也最讓人頭疼的問題之一。從簡(jiǎn)單的配置錯(cuò)誤到復(fù)雜的性能瓶頸,從偶發(fā)的502到持續(xù)的高延遲,每一個(gè)故障背后都有其獨(dú)特的原因和解決方案。
    的頭像 發(fā)表于 09-18 14:51 ?1538次閱讀

    如何基于Nginx構(gòu)建微服務(wù)網(wǎng)關(guān)

    今天,我將分享我們團(tuán)隊(duì)如何基于Nginx構(gòu)建了一個(gè)日均處理10億+請(qǐng)求的微服務(wù)網(wǎng)關(guān),以及踩過的那些坑。這套方案已經(jīng)穩(wěn)定運(yùn)行2年+,經(jīng)歷過多次大促考驗(yàn)。
    的頭像 發(fā)表于 09-02 16:29 ?996次閱讀

    Nginx高并發(fā)優(yōu)化方案

    作為一名在生產(chǎn)環(huán)境中摸爬滾打多年的運(yùn)維工程師,我見過太多因?yàn)?b class='flag-5'>Nginx配置不當(dāng)導(dǎo)致的性能瓶頸。今天分享一套完整的Nginx高并發(fā)優(yōu)化方案,幫助你的系統(tǒng)從10萬QPS突破到百萬級(jí)別。
    的頭像 發(fā)表于 08-13 15:51 ?1254次閱讀

    Nginx在企業(yè)環(huán)境中的調(diào)優(yōu)策略

    Nginx作為現(xiàn)代互聯(lián)網(wǎng)架構(gòu)中最重要的Web服務(wù)器和反向代理服務(wù)器,其性能調(diào)優(yōu)對(duì)企業(yè)級(jí)應(yīng)用的穩(wěn)定性和效率至關(guān)重要。本指南將從運(yùn)維實(shí)踐角度出發(fā),詳細(xì)介紹Nginx在企業(yè)環(huán)境中的各種調(diào)優(yōu)策略和最佳實(shí)踐。
    的頭像 發(fā)表于 07-14 11:13 ?817次閱讀

    Nginx和Apache的差異

    Nginx是一個(gè) 輕量級(jí)/高性能 的反向代理Web服務(wù)器,用于 HTTP、HTTPS、SMTP、POP3 和IMAP 協(xié)議。
    的頭像 發(fā)表于 07-09 09:45 ?817次閱讀

    Nginx配置終極指南

    Nginx 是開源、高性能、高可靠的 Web 和反向代理服務(wù)器,而且支持熱部署,幾乎可以做到 7 * 24 小時(shí)不間斷運(yùn)行,即使運(yùn)行幾個(gè)月也不需要重新啟動(dòng),還能在不間斷服務(wù)的情況下對(duì)軟件版本進(jìn)行熱
    的頭像 發(fā)表于 06-18 15:56 ?1238次閱讀
    <b class='flag-5'>Nginx</b>配置終極指南

    云原生環(huán)境里Nginx的故障排查思路

    本文聚焦于云原生環(huán)境下Nginx的故障排查思路。隨著云原生技術(shù)的廣泛應(yīng)用,Nginx作為常用的高性能Web服務(wù)器和反向代理服務(wù)器,在容器化和編排的環(huán)境中面臨著新的故障場(chǎng)景和挑戰(zhàn)。
    的頭像 發(fā)表于 06-17 13:53 ?1188次閱讀
    云原生環(huán)境里<b class='flag-5'>Nginx</b>的故障排查思路

    Nginx性能優(yōu)化終極指南

    而worker 進(jìn)程數(shù)默認(rèn)為 1 。單進(jìn)程最大連接數(shù)為1024。如下圖(打開Nginx目錄下的/conf/nginx.conf 文檔),現(xiàn)在我們來對(duì)這兩個(gè)數(shù)值進(jìn)行調(diào)優(yōu)
    的頭像 發(fā)表于 06-16 13:44 ?1581次閱讀
    <b class='flag-5'>Nginx</b>性能優(yōu)化終極指南

    Nginx核心功能深度解析

    Nginx核心功能深度解析
    的頭像 發(fā)表于 05-09 10:50 ?1039次閱讀

    Nginx緩存配置詳解

    Nginx 是一個(gè)功能強(qiáng)大的 Web 服務(wù)器和反向代理服務(wù)器,它可以用于實(shí)現(xiàn)靜態(tài)內(nèi)容的緩存,緩存可以分為客戶端緩存和服務(wù)端緩存。
    的頭像 發(fā)表于 05-07 14:03 ?1395次閱讀
    <b class='flag-5'>Nginx</b>緩存配置詳解
    固安县| 五指山市| 洞头县| 平阴县| 桑日县| 丰都县| 宁武县| 资溪县| 阳山县| 肇东市| 方山县| 白银市| 新晃| 奎屯市| 文登市| 长白| 尼木县| 若羌县| 宜都市| 平谷区| 锦州市| 静乐县| 石棉县| 淮滨县| 广灵县| 邵阳县| 沙河市| 宣城市| 孝义市| 泗水县| 南部县| 黑龙江省| 玉门市| 武宁县| 剑阁县| 敦化市| 上杭县| 安塞县| 鹤峰县| 武邑县| 江达县|