sap abap开发从入门到精通_Nginx 开发从入门到精通《实战书籍》学会这些就够了...
緣起
nginx由于出色的性能,在世界范圍內受到了越來越多人的關注,在淘寶內部它更是被廣泛的使用,眾多的開發以及運維同學都迫切的想要了解nginx模塊的開發以及它的內部原理,但是國內卻沒有一本關于這方面的書,源于此我們決定自己來寫一本。本書的作者為淘寶核心系統服務器平臺組的成員,本書寫作的思路是從模塊開發逐漸過渡到nginx原理剖析。書籍的內容會定期在這里更新,歡迎大家提出寶貴意見,不管是本書的內容問題,還是字詞錯誤,都歡迎大家提交issue(章節標題的左側有評注按鈕),我們會及時的跟進。
下面先說說:正向代理和反向代理的區別:說白了,反向代理就是負載均衡!!!為服務器分發請求,隱藏主服務器
Nginx 開發從入門到精通
nginx 在啟動后,會有一個 master 進程和多個 worker 進程。master 進程主要用來管理 worker
進程,包含:接收來自外界的信號,向各 worker 進程發送信號,監控 worker 進程的運行狀態,當 worker
進程退出后 (異常情況下),會自動重新啟動新的 worker 進程。而基本的網絡事件,則是放在 worker 進程中
來處理了。多個 worker 進程之間是對等的,他們同等競爭來自客戶端的請求,各進程互相之間是獨立的。一個
請求,只可能在一個 worker 進程中處理,一個 worker 進程,不可能處理其它進程的請求。worker 進程的
個數是可以設置的,一般我們會設置與機器 cpu 核數一致,這里面的原因與 nginx 的進程模型以及事件處理模
型是分不開的。nginx 的進程模型,可以由下圖來表示:
上篇:nginx 模塊開發篇
這里就簡單和大家分享一下了 需要資料的大家可以私信資料,送大家
好現在我們說說
nginx 基礎概念 (100%)
在 nginx 中 connection 就是對 tcp 連接的封裝,其中包括連接的 socket,讀事件,寫事件。利用 nginx 封
裝的 connection,我們可以很方便的使用 nginx 來處理與連接相關的事情,比如,建立連接,發送與接受數
據等。而 nginx 中的 http 請求的處理就是建立在 connection 之上的,所以 nginx 不僅可以作為一個 web
服務器,也可以作為郵件服務器。當然,利用 nginx 提供的 connection,我們可以與任何后端服務打交道。
結合一個 tcp 連接的生命周期,我們看看 nginx 是如何處理一個連接的。首先,nginx 在啟動時,會解析配置
文件,得到需要監聽的端口與 ip 地址,然后在 nginx 的 master 進程里面,先初始化好這個監控的 socket(創
建 socket,設置 addrreuse 等選項,綁定到指定的 ip 地址端口,再 listen),然后再 fork 出多個子進程出來,
然后子進程會競爭 accept 新的連接。此時,客戶端就可以向 nginx 發起連接了。當客戶端與 nginx 進行三次
握手,與 nginx 建立好一個連接后,此時,某一個子進程會 accept 成功,得到這個建立好的連接的 socket,
然后創建 nginx 對連接的封裝,即 ngx_connection_t 結構體。接著,設置讀寫事件處理函數并添加讀寫事件
來與客戶端進行數據的交換。最后,nginx 或客戶端來主動關掉連接,到此,一個連接就壽終正寢了。
當然,nginx 也是可以作為客戶端來請求其它 server 的數據的(如 upstream 模塊),此時,與其它 server
創建的連接,也封裝在 ngx_connection_t 中。作為客戶端,nginx 先獲取一個 ngx_connection_t 結構體,
然后創建 socket,并設置 socket 的屬性(比如非阻塞)。然后再通過添加讀寫事件,調用 connect/read/
write 來調用連接,最后關掉連接,并釋放 ngx_connection_t。
在 nginx 中,每個進程會有一個連接數的最大上限,這個上限與系統對 fd 的限制不一樣。在操作系統中,通過
ulimit -n,我們可以得到一個進程所能夠打開的 fd 的最大數,即 nofile,因為每個 socket 連接會占用掉一個
fd,所以這也會限制我們進程的最大連接數,當然也會直接影響到我們程序所能支持的最大并發數,當 fd 用完
后,再創建 socket 時,就會失敗。不過,這里我要說的 nginx 對連接數的限制,與 nofile 沒有直接關系,可
以大于 nofile,也可以小于 nofile。nginx 通過設置 worker_connectons 來設置每個進程可使用的連接最大
值。nginx 在實現時,是通過一個連接池來管理的,每個 worker 進程都有一個獨立的連接池,連接池的大小
是 worker_connections。這里的連接池里面保存的其實不是真實的連接,它只是一個 worker_connections
大小的一個 ngx_connection_t 結構的數組。并且,nginx 會通過一個鏈表 free_connections 來保存所有的
空閑 ngx_connection_t,每次獲取一個連接時,就從空閑連接鏈表中獲取一個,用完后,再放回空閑連接鏈表
里面。
在這里,很多人會誤解 worker_connections 這個參數的意思,認為這個值就是 nginx 所能建立連接的最大
值。其實不然,這個值是表示每個 worker 進程所能建立連接的最大值,所以,一個 nginx 能建立的最大連接
數,應該是 worker_connections * worker_processes。當然,這里說的是最大連接數,對于 HTTP 請求本
地資源來說,能夠支持的最大并發數量是 worker_connections * worker_processes,而如果是 HTTP 作為
反向代理來說,最大并發數量應該是 worker_connections * worker_processes/2。因為作為反向代理服務
器,每個并發會建立與客戶端的連接和與后端服務的連接,會占用兩個連接
總結;
我們就來說說最關鍵的,nginx到底有什么作用呢?今天先說些大家都比較熟悉的。
說反向代理之前,我們先看看正向代理,正向代理也是大家最常接觸的到的代理模式,我們會從兩個方面來說關于正向代理的處理模式,分別從軟件方面和生活方面來解釋一下什么叫正向代理。
在如今的網絡環境下,我們如果由于技術需要要去訪問國外的某些網站,此時你會發現位于國外的某網站我們通過瀏覽器是沒有辦法訪問的,此時大家可能都會用一個操作FQ進行訪問,FQ的方式主要是找到一個可以訪問國外網站的代理服務器,我們將請求發送給代理服務器,代理服務器去訪問國外的網站,然后將訪問到的數據傳遞給我們!
總結
以上是生活随笔為你收集整理的sap abap开发从入门到精通_Nginx 开发从入门到精通《实战书籍》学会这些就够了...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3.7知识点汇总
- 下一篇: ultilize什么意思_ultiliz