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

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

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

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

為什么NGINX的reload命令不是熱加載?

OSC開源社區(qū) ? 來源:OSC開源社區(qū) ? 作者:劉維 ? 2022-11-24 11:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者 劉維

這段時間在 Reddit 看到一個討論,為什么 NGINX 不支持熱加載?乍看之下很反常識,作為世界第一大 Web 服務(wù)器,不支持熱加載?難道大家都在使用的 nginx -s reload 命令都用錯了?帶著這個疑問,讓我們開始這次探索之旅,一起聊聊熱加載和 NGINX 的故事。

NGINX 相關(guān)介紹

NGINX 是一個跨平臺的開源 Web 服務(wù)器,使用 C 語言開發(fā)。據(jù)統(tǒng)計,全世界流量最高的前 1000 名網(wǎng)站中,有超過 40% 的網(wǎng)站都在使用 NGINX 處理海量請求。

NGINX 有什么優(yōu)勢,導(dǎo)致它從眾多的 Web 服務(wù)器中脫穎而出,并一直保持高使用量呢?

我覺得核心原因在于,NGINX 天生善于處理高并發(fā),能在高并發(fā)請求的同時保持高效的服務(wù)。相比于同時代的其他競爭對手例如 Apache、Tomcat 等,其領(lǐng)先的事件驅(qū)動型設(shè)計和全異步的網(wǎng)絡(luò) I/O 處理機制,以及極致的內(nèi)存分配管理等眾多優(yōu)秀設(shè)計,將服務(wù)器硬件資源壓縮到了極致。使得 NGINX 成為高性能 Web 服務(wù)器的代名詞。

當(dāng)然,除此之外還有一些其他原因,比如:

高度模塊化的設(shè)計,使得 NGINX 擁有無數(shù)個功能豐富的官方模塊和第三方拓展模塊。

最自由的 BSD 許可協(xié)議,使得無數(shù)開發(fā)者愿意為 NGINX 貢獻(xiàn)自己的想法。

支持熱加載,能保證 NGINX 提供 7x24h 不間斷的服務(wù)。

關(guān)于熱加載

大家期望的熱加載功能是什么樣的?我個人認(rèn)為,首先應(yīng)該是用戶端無感知的,在保證用戶請求正常和連接不斷的情況下,實現(xiàn)服務(wù)端或上游的動態(tài)更新。

那什么情況下需要熱加載?在如今云原生時代下,微服務(wù)架構(gòu)盛行,越來越多的應(yīng)用場景有了更加頻繁的服務(wù)變更需求。包括反向代理域名上下線、上游地址變更、IP 黑白名單更新等,這些都和熱加載息息相關(guān)。

那么 NGINX 是如何實現(xiàn)熱加載的?

NGINX 熱加載的原理

執(zhí)行 nginx -s reload 熱加載命令,就等同于向 NGINX 的 master 進(jìn)程發(fā)送 HUP 信號。在 master 進(jìn)程收到 HUP 信號后,會依次打開新的監(jiān)聽端口,然后啟動新的 worker 進(jìn)程。

此時會存在新舊兩套 worker 進(jìn)程,在新的 worker 進(jìn)程起來后,master 會向老的 worker 進(jìn)程發(fā)送 QUIT 信號進(jìn)行優(yōu)雅關(guān)閉。老的 worker 進(jìn)程收到 QUIT 信號后,會首先關(guān)閉監(jiān)聽句柄,此時新的連接就只會流進(jìn)到新的 worker 進(jìn)程中,老的 worker 進(jìn)程處理完當(dāng)前連接后就會結(jié)束進(jìn)程。
1d07f134-6b2e-11ed-8abf-dac502259ad0.png


從原理上看,NGINX 的熱加載能很好地滿足我們的需求嗎?答案很可能是否定的,讓我們來看下 NGINX 的熱加載存在哪些問題。

NGINX 熱加載的缺陷

首先,NGINX 頻繁熱加載會造成連接不穩(wěn)定,增加丟失業(yè)務(wù)的可能性。

NGINX 在執(zhí)行 reload 指令時,會在舊的 worker 進(jìn)程上處理已經(jīng)存在的連接,處理完連接上的當(dāng)前請求后,會主動斷開連接。此時如果客戶端沒處理好,就可能會丟失業(yè)務(wù),這對于客戶端來說明顯就不是無感知的了。

其次,在某些場景下,舊進(jìn)程回收時間長,進(jìn)而影響正常業(yè)務(wù)。

比如代理 WebSocket 協(xié)議時,由于 NGINX 不解析通訊幀,所以無法知道該請求是否為已處理完畢狀態(tài)。即使 worker 進(jìn)程收到來自 master 的退出指令,它也無法立刻退出,而是需要等到這些連接出現(xiàn)異常、超時或者某一端主動斷開后,才能正常退出。

再比如 NGINX 做 TCP 層和 UDP 層的反向代理時,它也沒法知道一個請求究竟要經(jīng)過多少次請求才算真正地結(jié)束。

這就導(dǎo)致舊 worker 進(jìn)程的回收時間特別長,尤其是在直播、新聞媒體活語音識別等行業(yè)。舊 worker 進(jìn)程的回收時間通常能達(dá)到半小時甚至更長,這時如果再頻繁 reload,將會導(dǎo)致 shutting down 進(jìn)程持續(xù)增加,最終甚至?xí)?dǎo)致 NGINX OOM,嚴(yán)重影響業(yè)務(wù)。


# 一直存在舊 worker 進(jìn)程:
nobody 6246 6241 0 10:51 ? 0000 nginx: worker process 
nobody 6247 6241 0 10:51 ? 0000 nginx: worker process 
nobody 6247 6241 0 10:51 ? 0000 nginx: worker process 
nobody 6248 6241 0 10:51 ? 0000 nginx: worker process 
nobody 6249 6241 0 10:51 ? 0000 nginx: worker process 
nobody 7995 10419 0 10:30 ? 0037 nginx: worker process is shutting down  <= here 
nobody 7995 10419 0 10:30 ? 0037 nginx: worker process is shutting down 
nobody 7996 10419 0 10:30 ? 0037 nginx: worker process is shutting down

從上述內(nèi)容可以看到,通過nginx -s reload方式支持的“熱加載”,雖然在以往的技術(shù)場景中夠用,但是在微服務(wù)和云原生迅速發(fā)展的今天,它已經(jīng)捉襟見肘且不合時宜。

如果你的業(yè)務(wù)變更頻率是每周或者每天,那么 NGINX 這種 reload 還是滿足你的需求的。但如果變更頻率是每小時、每分鐘呢?假設(shè)你有 100 個 NGINX 服務(wù),每小時 reload 一次的話,就要 reload 2400 次;如果每分鐘 reload 一次,就是 864 萬次。這顯然是無法接受的。

因此,我們需要一個不需要進(jìn)程替換的 reload 方案,在現(xiàn)有 NGINX 進(jìn)程內(nèi)可以直接完成內(nèi)容的更新和實時生效。

在內(nèi)存中直接生效的熱加載方案

在 Apache APISIX 誕生之初,就是希望來解決 NGINX 熱加載這個問題的。

Apache APISIX 是基于 NGINX + Lua 的技術(shù)棧,以 ETCD 作為配置中心實現(xiàn)的云原生、高性能、全動態(tài)的微服務(wù) API 網(wǎng)關(guān),提供負(fù)載均衡、動態(tài)上游、灰度發(fā)布、精細(xì)化路由、限流限速、服務(wù)降級、服務(wù)熔斷、身份認(rèn)證、可觀測性等數(shù)百項功能。

使用 APISIX 你不需要重啟服務(wù)就可以更新配置,這意味著修改上游、路由、插件時都不用重啟。既然是基于 NGINX,APISIX 又是如何擺脫 NGINX 的限制實現(xiàn)完美熱更新?我們先看下 APISIX 的架構(gòu)。 1d33deca-6b2e-11ed-8abf-dac502259ad0.png


通過上述架構(gòu)圖可以看到,之所以 APISIX 能擺脫 NGINX 的限制是因為它把上游等配置全部放到 APISIX Core 和 Plugin Runtime 中動態(tài)指定。

以路由為例,NGINX 需要在配置文件內(nèi)進(jìn)行配置,每次更改都需要 reload 之后才能生效。而為了實現(xiàn)路由動態(tài)配置,Apache APISIX 在 NGINX 配置文件內(nèi)配置了單個 server,這個 server 中只有一個 location。我們把這個 location 作為主入口,所有的請求都會經(jīng)過這個 location,再由 APISIX Core 動態(tài)指定具體上游。因此 Apache APISIX 的路由模塊支持在運行時增減、修改和刪除路由,實現(xiàn)了動態(tài)加載。所有的這些變化,對客戶端都零感知,沒有任何影響。

再來幾個典型場景的描述。

比如增加某個新域名的反向代理,在 APISIX 中只需創(chuàng)建上游,并添加新的路由即可,整個過程中不需要 NGINX 進(jìn)程有任何重啟。再比如插件系統(tǒng),APISIX 可以通過 ip-restriction 插件實現(xiàn) IP 黑白名單功能,這些能力的更新也是動態(tài)方式,同樣不需要重啟服務(wù)。借助架構(gòu)內(nèi)的 ETCD,配置策略以增量方式實時推送,最終讓所有規(guī)則實時、動態(tài)的生效,為用戶帶來極致體驗。

總結(jié)

NGINX 的熱加載在某些場景下會長時間存在新舊兩套進(jìn)程,導(dǎo)致額外消耗資源,同時頻繁熱加載也會導(dǎo)致小概率業(yè)務(wù)丟失。面對當(dāng)下云原生和微服務(wù)的技術(shù)趨勢下, 服務(wù)變化更加的頻繁,控制 API 的策略也發(fā)生了變化,導(dǎo)致我們對熱加載的需求提出了新需求,NGINX 的熱加載已經(jīng)不能滿足實際業(yè)務(wù)需求。

現(xiàn)在是時候切換到更貼合云原生時代并且更完善的熱加載策略、性能表現(xiàn)卓越的 API 網(wǎng)關(guān)——Apache APISIX,從而享受動態(tài)、統(tǒng)一管理等特性帶來的管理效率上的極大提升。

審核編輯:湯梓紅

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

    關(guān)注

    2

    文章

    1309

    瀏覽量

    75041
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    14

    文章

    10371

    瀏覽量

    91774
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    759

    瀏覽量

    23989
  • nginx
    +關(guān)注

    關(guān)注

    0

    文章

    194

    瀏覽量

    13223

原文標(biāo)題:為什么NGINX的reload命令不是熱加載?

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

    Nginx的限流機制深度解析

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

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

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

    恢復(fù)引導(dǎo)加載程序錯誤怎么解決?

    的問題。 因此,當(dāng)連接到調(diào)試引腳并按住啟動時,初始加載器會提供一小部分命令列表。load 命令應(yīng)該為 XMODEM 連接打開以接收二進(jìn)制數(shù)據(jù)并將其加載到給定地址。在恢復(fù)指令中,這用于將
    發(fā)表于 03-26 07:18

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

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

    Nginx常見故障排查手冊

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

    Nginx高性能配置詳細(xì)步驟

    Nginx 1.26.x 是當(dāng)前 mainline 分支的最新穩(wěn)定線,在 HTTP/3 支持、動態(tài)模塊加載和內(nèi)存管理上相比 1.24.x 有明顯改進(jìn)。1.24.x 已進(jìn)入維護(hù)模式,新項目直接選 1.26.x,舊項目建議在下次維護(hù)窗口升級。
    的頭像 發(fā)表于 03-04 15:35 ?436次閱讀

    idf.py --version` 提示“不是內(nèi)部或外部命令”(ESP32S3小智調(diào)試中遇到)

    idf.py --version` 提示“不是內(nèi)部或外部命令”(ESP32S3小智調(diào)試中遇到)
    的頭像 發(fā)表于 11-28 07:22 ?1266次閱讀

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

    作為一名在生產(chǎn)環(huán)境中摸爬滾打多年的運維工程師,我見過太多因為Nginx配置不當(dāng)導(dǎo)致的性能瓶頸。今天分享一套完整的Nginx高并發(fā)優(yōu)化方案,幫助你的系統(tǒng)從10萬QPS突破到百萬級別。
    的頭像 發(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)對企業(yè)級應(yīng)用的穩(wěn)定性和效率至關(guān)重要。本指南將從運維實踐角度出發(fā),詳細(xì)介紹Nginx在企業(yè)環(huán)境中的各種調(diào)優(yōu)策略和最佳實踐。
    的頭像 發(fā)表于 07-14 11:13 ?819次閱讀

    Nginx和Apache的差異

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

    Nginx配置終極指南

    Nginx 是開源、高性能、高可靠的 Web 和反向代理服務(wù)器,而且支持熱部署,幾乎可以做到 7 * 24 小時不間斷運行,即使運行幾個月也不需要重新啟動,還能在不間斷服務(wù)的情況下對軟件版本進(jìn)行熱
    的頭像 發(fā)表于 06-18 15:56 ?1238次閱讀
    <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)在我們來對這兩個數(shù)值進(jìn)行調(diào)優(yōu)
    的頭像 發(fā)表于 06-16 13:44 ?1584次閱讀
    <b class='flag-5'>Nginx</b>性能優(yōu)化終極指南

    Nginx核心功能深度解析

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

    Nginx緩存配置詳解

    Nginx 是一個功能強大的 Web 服務(wù)器和反向代理服務(wù)器,它可以用于實現(xiàn)靜態(tài)內(nèi)容的緩存,緩存可以分為客戶端緩存和服務(wù)端緩存。
    的頭像 發(fā)表于 05-07 14:03 ?1397次閱讀
    <b class='flag-5'>Nginx</b>緩存配置詳解
    仁寿县| 南皮县| 九龙县| 青龙| 望江县| 丰城市| 利辛县| 噶尔县| 白银市| 淮北市| 高邑县| 东城区| 垫江县| 陵川县| 东源县| 化隆| 芦溪县| 新闻| 淳化县| 香河县| 九江县| 绍兴县| 贵州省| 元谋县| 思茅市| 班戈县| 江达县| 武定县| 仪陇县| 汕头市| 东兰县| 宜阳县| 延津县| 孟津县| 张家港市| 扎赉特旗| 东光县| 沈丘县| 日照市| 新郑市| 黑龙江省|