1. 程式人生 > >Nginx 架構——【核心流程+模組介紹】

Nginx 架構——【核心流程+模組介紹】

開發十年,就只剩下這套架構體系了! >>>   

1. Nginx簡介以及特點

Nginx簡介:

Nginx (engine x) 是一個高效能的Web伺服器和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器

  • 俄羅斯程式設計師Igor Sysoev於2002年開始
  • Nginx是增長最快的Web伺服器,市場份額已達33.3%
  • 全球使用量排名第二2011年成立商業公司

Nginx社群分支:

  • Openresty作者@agentzh(章宜春)開發的,最大特點是引入了ngx_lua模組,支援使用lua開發外掛,並且集合了很多豐富的模組,以及lua庫。
  • Tengine主要是淘寶團隊開發。特點是融入了因淘寶自身的一些業務帶來的新功能。
  • Nginx官方版本,更新迭代比較快,並且提供免費版本和商業版本。

Nginx原始碼結構:

  • 程式碼量大約11萬行C程式碼
  • 原始碼目錄結構
  • core (主幹和基礎設定)
  • event (事件驅動模型和不同的IO複用模組)
  • http (HTTP伺服器和模組)
  • mail (郵件代理伺服器和模組)
  • os (作業系統相關的實現)
  • misc (雜項)

Nginx特點:

  • 反向代理,負載均衡器
  • 高可靠性、單master多worker模式
  • 高可擴充套件性、高度模組化
  • 非阻塞
  • 事件驅動
  • 低記憶體消耗
  • 熱部署
  • {看到文末本人總結了一一些資料!}

2. Nginx應用場景

場景如下:

  • 靜態檔案伺服器
  • 反向代理,負載均衡
  • 安全防禦
  • 智慧路由(企業級灰度測試、地圖POI一鍵切流)
  • 灰度釋出
  • 靜態化
  • 訊息推送
  • 圖片實時壓縮
  • 防盜鏈
  •  

3. Nginx框架模型及流程介紹

程序元件角色:

  • master程序
  • 監視工作程序的狀態
  • 當工作程序死掉後重啟一個新的
  • 處理訊號和通知工作程序
  • worker程序
  • 處理客戶端請求
  • 從主程序處獲得訊號做相應的事情
  • cache loader程序
  • 載入快取索引檔案資訊,然後退出
  • cache manager程序
  • 管理磁碟的快取大小,超過預定值大小後最少使用資料將被刪除

框架模型:

 

框架模型流程:

 

框架模型流程:

 

 

 

核心流程圖:

 

 

 

核心流程圖:

 

 

 

http請求流程:

 

 

 

 

Upstream設計:

  • 訪問第三方Server伺服器
  • 底層HTTP通訊非常完善
  • 非同步非阻塞
  • 上下游記憶體零拷貝,節省記憶體
  • 支援自定義模組開發

 

upstream流程:

 

 

 

 

 

4. Nginx定製化模組開發

Nginx的模組化設計特點:

  • 高度抽象的模組介面
  • 模組介面非常簡單,具有很高的靈活性
  • 配置模組的設計
  • 核心模組介面的簡單化
  • 多層次、多類別的模組設計

 

核心模組:

 

handler模組:

接受來自客戶端的請求並構建響應頭和響應體。

 

filter模組:

過濾(filter)模組是過濾響應頭和內容的模組,可以對回覆的頭和內容進行處理。它的處理時間在獲取回覆內容之後,向用戶傳送響應之前。

 

 

upstream模組:

使nginx跨越單機的限制,完成網路資料的接收、處理和轉發,純非同步的訪問後端服務。

 

 

load_balance:

負載均衡模組,實現特定的演算法,在眾多的後端伺服器中,選擇一個伺服器出來作為某個請求的轉發伺服器。

 

 

ngx_lua模組:

  • 指令碼語言
  • 記憶體開銷小
  • 執行速度快
  • 強大的 Lua 協程
  • 非阻塞
  • 業務邏輯以自然邏輯書寫

 

以上是個人對Nginx的一下見解,如果你對技術提升很感興趣,可以加入Java高階技術來秋秋群:856443934,裡面都是同行,有資源分享和技術進階思維導圖,其中:(分散式架構、高可擴充套件、高效能、高並 發、Jvm效能調優、Spring,MyBatis,Nginx原始碼分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。歡迎一到五年的工程師加入,合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

相關推薦

Nginx 架構——核心流程+模組介紹

開發十年,就只剩下這套架構體系了! >>>   

Activti與SpringBoot整合後相關核心Api的介紹

使用編譯器:Eclipse(因為流程圖使用的是Eclipse的繪圖工具,所以程式碼也就直接在上面編輯,編碼Idea也是非常好用的工具,同學如果不習慣的話,可以畫完圖,複製到Idea上,編寫程式碼) 核心Api介紹: # 核心API介紹 ProcessEngine(最核心Api) &n

-01- VDMA IP的GUI配置介紹Xilinx-VDMA模組學習

使用的是Vivado 2015.4,XC7Z020, AXI Video Direct Memory Acess(6.2)。 在我的系統中,GUI配置圖片如下:(其實和預設配置沒有太大區別) 下面介紹VDMA IP內各個引數的配置說明。 1.Basic標籤頁 Add

Spark學習記錄(三)核心API模組介紹

spark ------------- 基於hadoop的mr,擴充套件MR模型高效使用MR模型,記憶體型叢集計算,提高app處理速度。 spark特點 ------------- 速度:在記憶體中儲存中間結果。 支援多種語言。Scala、Java、Python 內建了80+的運算元. 高階分析

大資料實時計算Spark學習筆記(4)—— Spak核心 API 模組介紹

1 Spark 介紹 1.1 Spark 特點 速度:在記憶體中儲存中間結果 支援多種語言 內建 80+ 的運算元 高階分析:MR,SQL/ Streaming/Mlib/Graph 1.2 Spark 模組 core : 通用執行

Python開發內建模組datetime

獲取當前日期和時間 1 >>> from datetime import datetime 2 >>> now = datetime.now() 3 >>> now 4 datetime.datetime(2018, 12,

Python開發內建模組collections

namedtuple namedtuple是一個函式,它用來建立一個自定義的tuple物件,並且規定了tuple元素的個數,並可以用屬性而不是索引來引用tuple的某個元素。 這樣一來,我們用namedtuple可以很方便地定義一種資料型別,它具備tuple的不變性,又可以根據屬性來引用,使用十分方便。

Python開發內建模組configparser

生成配置檔案 import configparser config = configparser.ConfigParser() config["DEFAULT"] = {'ServerAliveInterval': '45', 'Com

Python開發內建模組日誌模組

logging配置 1 import logging 2 logging.basicConfig(level=logging.WARNING, 3 format='%(asctime)s %(filename)s[line:%(line

Python開發內建模組os模組

1.當前路徑及路徑下的檔案 os.getcwd():檢視當前所在路徑。 >>> import os >>> os.getcwd() 'E:\\test' >>> os.listdir(path):列舉目錄下的所有檔案。返回的是列表型別

unity系統模組開發Unity5.5.2UI打包AssetBundle

之前已經有幾篇文章寫打包AssetBundle,但畢竟沒有實際在專案中寫過都寫的比較淺。 剛好最近專案更新Unity5.5.2就順便由我來更新ui打包流程 這裡就把這次的經驗寫一下 這裡還是稍微解釋一下打包的基本目的: 打包ui就是把你做的介面打包出來成assetbund

Node網路模組NET

環境:Node v8.2.1; Npm v5.3.0; OS Windows10 net 模組提供了建立基於流的 TCP 或 IPC 伺服器(net.createServer())和客戶端(net.createConnection()) 的非同步網路 API。

QML實現可定製模態對話方塊核心部分詳解

轉自 http://blog.csdn.net/r5014/article/details/70139689  

《大型網站技術架構核心原理與案例分析》PDF下載

優化 均衡 1.7 3.3 架設 框架 應用服務器 博客 分布式服務框架 《大型網站技術架構:核心原理與案例分析》【PDF】下載鏈接: https://u253469.pipipan.com/fs/253469-230062557 內容簡介 本書通過梳理大型網站技

Keras入門日誌(2 Keras裡的模組介紹

【時間】2018.10.30 【Keras入門日誌(2】 Keras裡的模組介紹 目錄 概述 一、Keras中的模組  keras模組思維導圖 1.1 Optimizers 1.2 Objectives 1.3 Act

Vue架構基礎篇-第02章介紹

介紹 一、Vue.js是什麼 Vue是一套用於構建使用者介面的漸進式框架。與其他大型框架不同的是,Vue被設計為可以自底向上逐層應用。Vue的核心庫只關注檢視層,不僅易於上手,還便於與第三方庫或既有專案整合。另一方面,當與現代化的工具鏈以及各種支援類庫結合使用時,Vue也完全能夠為複雜的單頁應用提供驅動。

python—threading.Semaphore和BoundedSemaphorethreading模組介紹04

https://blog.csdn.net/a349458532/article/details/51589460 一、Semaphore物件 1. 基本介紹 Semaphore 是最古老的同步原語之一,由荷蘭電腦科學家 Edsger W. Dijkstra 發明。(他最早使用名為 P()

基於spring boot和mongodb打造一套完整的許可權架構(五)整合使用者模組、選單模組、角色模組

      在第四章我們已經實現了對security的整合,我們已經實現了登陸到我們的系統中了,但是大家會發現我們登陸成功以後並沒有顯示左側的選單節點,本章我們將開始整合使用者模組、選單模組以及角色模組。      1、首先我們需要在sys的entity目錄底下建立Tree、

ZYNQ_LINUX如何把自己的驅動編譯進核心模組(Kconfig和Makefile

linux驅動編寫(Kconfig檔案和Makefile檔案) feixiaoxing 2013年09月08日 17:12 5502 【 宣告:版權所有,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】      在linux編寫驅動的過程中,有兩個檔案是我們必須

OpenCV3.4.0影象拼接Stitching模組介紹

Images stitching 是opencv3.4.0中的模組之一,使用此模組可以實現對影象的拼接。在此之前需要編譯opencv3.4.0+contrib。具體編譯方法可以點此連結。也可以直接