nginx

一、簡(jiǎn)介

nginx是一個(gè)輕量級(jí)的http和反向代理服務(wù)器允悦,占用內(nèi)存少,并發(fā)能力強(qiáng)溅呢。

二澡屡、相關(guān)概念

正向代理

程序要去訪問一個(gè)地址,不直接訪問咐旧,而是向一個(gè)代理服務(wù)器發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)地址驶鹉,代理服務(wù)器訪問目標(biāo)地址,然后將結(jié)果返回給程序铣墨,資源服務(wù)就是程序指定的服務(wù)室埋。例如代碼里請(qǐng)求時(shí),設(shè)置proxy;瀏覽器配置fiddler代理等姚淆。

反向代理

程序訪問代理服務(wù)孕蝉,代理服務(wù)可能自己沒有資源,將請(qǐng)求轉(zhuǎn)給另一個(gè)服務(wù)腌逢,然后將取到的結(jié)果返回給原程序降淮,資源服務(wù)對(duì)于原程序來說是不可知的。

動(dòng)靜分離

將動(dòng)態(tài)資源和靜態(tài)資源分開存放搏讶,放到不同的服務(wù)器佳鳖,這樣就方便對(duì)靜態(tài)資源做一些緩存。通過location將不同的資源請(qǐng)求轉(zhuǎn)發(fā)到不同的服務(wù)媒惕,通過expires參數(shù)讓瀏覽器進(jìn)行緩存系吩。

負(fù)載均衡

負(fù)載均衡就是把任務(wù)分?jǐn)偟綆讉€(gè)服務(wù)上去執(zhí)行。有以下集中方式:

  • 輪詢(默認(rèn))
  • 按權(quán)重妒蔚。upstream可配置權(quán)重穿挨。
  • ip_hash。每個(gè)請(qǐng)求按訪問 ip 的 的 hash 結(jié)果分配肴盏,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器科盛。
  • fair(第三方)。按后端服務(wù)器的響應(yīng)時(shí)間來分配請(qǐng)求叁鉴,響應(yīng)時(shí)間短的優(yōu)先分配土涝。

三、高可用集群

高可用集群是基于keepalived實(shí)現(xiàn)的幌墓,架構(gòu)圖:


nginx高可用集群.png

什么是keepalived但壮?

keepalived的作用一個(gè)是對(duì)外提供一個(gè)虛擬ip(VIP)讓調(diào)用方訪問,另一個(gè)是心跳檢測(cè)常侣,監(jiān)測(cè)服務(wù)(如nginx)是不是掛了蜡饵。他是基于協(xié)議VRRP(Virtual Router Redundancy Protocol,即虛擬路由冗余協(xié)議)來實(shí)現(xiàn)的:

VRRP協(xié)議將兩臺(tái)或多臺(tái)路由器設(shè)備虛擬成一個(gè)設(shè)備胳施,對(duì)外提供虛擬路由器IP(一個(gè)或多個(gè))溯祸。然而,在路由器組內(nèi)部舞肆,如果實(shí)際擁有這個(gè)對(duì)外IP的路由器如果工作正常的話焦辅,就是master,或者是通過算法選舉產(chǎn)生的椿胯,MASTER實(shí)現(xiàn)針對(duì)虛擬路由器IP的各種網(wǎng)絡(luò)功能筷登,如ARP請(qǐng)求,ICMP哩盲,以及數(shù)據(jù)的轉(zhuǎn)發(fā)等前方,其他設(shè)備不具有該IP狈醉,狀態(tài)是BACKUP。除了接收MASTER的VRRP狀態(tài)通告信息外惠险,不執(zhí)行對(duì)外的網(wǎng)絡(luò)功能苗傅,當(dāng)主級(jí)失效時(shí),BACKUP將接管原先MASTER的網(wǎng)絡(luò)功能班巩。
VRRP協(xié)議配置時(shí)渣慕,需要配置每個(gè)路由器的虛擬路由ID(VRID)和優(yōu)先權(quán)值,使用VRID將路由器進(jìn)行分組趣竣,具有相同VRID值的路由器為同一個(gè)組摇庙,VRID是一個(gè)0-255的整數(shù)旱物;同一個(gè)組中的路由器通過使用優(yōu)先權(quán)值來選舉MASTER遥缕。優(yōu)先權(quán)大者為MASTER,優(yōu)先權(quán)也是一個(gè)0-255的正整數(shù)宵呛。

keepalived工作原理

keepalived可提供vrrp以及health-check功能单匣,可以只用它提供雙機(jī)浮動(dòng)的vip(vrrp虛擬路由功能),這樣可以簡(jiǎn)單實(shí)現(xiàn)一個(gè)雙機(jī)熱備高可用功能宝穗;keepalived是以VRRP虛擬路由冗余協(xié)議為基礎(chǔ)實(shí)現(xiàn)高可用的户秤,可以認(rèn)為是實(shí)現(xiàn)路由器高可用的協(xié)議,即將N臺(tái)提供相同功能的路由器組成一個(gè)路由器組逮矛,這個(gè)組里面有一個(gè)master和多個(gè)backup鸡号,master上面有一個(gè)對(duì)外提供服務(wù)的vip(該路由器所在局域網(wǎng)內(nèi)其他機(jī)器的默認(rèn)路由為該vip),master會(huì)發(fā)組播须鼎,當(dāng)backup收不到VRRP包時(shí)就認(rèn)為master宕掉了鲸伴,這時(shí)就需要根據(jù)VRRP的優(yōu)先級(jí)來選舉一個(gè)backup當(dāng)master。這樣的話就可以保證路由器的高可用了晋控。

四汞窗、多進(jìn)程工作模型

nginx進(jìn)程模型.png

從上圖中可以很明顯地看到,4個(gè)worker進(jìn)程的父進(jìn)程都是master進(jìn)程赡译,表明worker進(jìn)程都是從父進(jìn)程fork出來的仲吏,并且父進(jìn)程的ppid為1,表示其為daemon進(jìn)程蝌焚。
需要說明的是裹唆,在nginx多進(jìn)程中,每個(gè)worker都是平等的只洒,因此每個(gè)進(jìn)程處理外部請(qǐng)求的機(jī)會(huì)權(quán)重都是一致的许帐。
Master進(jìn)程的作用是?
讀取并驗(yàn)證配置文件nginx.conf红碑;管理worker進(jìn)程舞吭;
Worker進(jìn)程的作用是泡垃?
每一個(gè)Worker進(jìn)程都維護(hù)一個(gè)線程(避免線程切換),處理連接和請(qǐng)求羡鸥;注意Worker進(jìn)程的個(gè)數(shù)由配置文件決定蔑穴,一般和CPU個(gè)數(shù)相關(guān)(有利于進(jìn)程切換),配置幾個(gè)就有幾個(gè)Worker進(jìn)程惧浴。
Nginx如何做到熱部署存和?
所謂熱部署,就是配置文件nginx.conf修改后衷旅,不需要stop nginx捐腿,不需要中斷請(qǐng)求,就能讓配置文件生效J炼ァ(nginx -s reload 重新加載/nginx -t檢查配置/nginx -s stop)
修改配置文件nginx.conf后茄袖,重新生成新的worker進(jìn)程,當(dāng)然會(huì)以新的配置進(jìn)行處理請(qǐng)求嘁锯,而且新的請(qǐng)求必須都交給新的worker進(jìn)程宪祥,至于老的worker進(jìn)程,等把那些以前的請(qǐng)求處理完畢后家乘,kill掉即可蝗羊。
Nginx如何做到高并發(fā)下的高效處理?
Nginx采用了Linux的epoll模型仁锯,epoll模型基于事件驅(qū)動(dòng)機(jī)制耀找,它可以監(jiān)控多個(gè)事件是否準(zhǔn)備完畢,如果OK业崖,那么放入epoll隊(duì)列中野芒,這個(gè)過程是異步的。worker只需要從epoll隊(duì)列循環(huán)處理即可腻要。

連接數(shù)worker_connection
worker_connection是一個(gè)worker支持的最大并發(fā)連接數(shù)复罐。
瀏覽器發(fā)送1個(gè)請(qǐng)求,如果是請(qǐng)求靜態(tài)資源雄家,那就占用1個(gè)連接效诅。如果是要反向代理的,那就占用2個(gè)趟济。有時(shí)候?yàn)g覽器一個(gè)接口會(huì)發(fā)送2次請(qǐng)求(第一次option)乱投,那就是占用4個(gè)連接了。
nginx支持的最大并發(fā)數(shù):
普通的靜態(tài)訪問最大并發(fā)數(shù)是: worker_connections * worker_processes / 2
如果作為反向代理:worker_connections * worker_processes / 4

參考資料

Nginx篇——語雀
Keepalived基礎(chǔ)知識(shí)詳細(xì)完整總結(jié)
通俗易懂的Nginx工作原理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末顷编,一起剝皮案震驚了整個(gè)濱河市戚炫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌媳纬,老刑警劉巖双肤,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件施掏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡茅糜,警方通過查閱死者的電腦和手機(jī)七芭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔑赘,“玉大人狸驳,你說我怎么就攤上這事∷跞” “怎么了耙箍?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長酥馍。 經(jīng)常有香客問我辩昆,道長,這世上最難降的妖魔是什么物喷? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任卤材,我火速辦了婚禮,結(jié)果婚禮上峦失,老公的妹妹穿的比我還像新娘。我一直安慰自己术吗,他們只是感情好尉辑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著较屿,像睡著了一般隧魄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上隘蝎,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天购啄,我揣著相機(jī)與錄音,去河邊找鬼嘱么。 笑死狮含,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的曼振。 我是一名探鬼主播几迄,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼冰评!你這毒婦竟也來了映胁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤甲雅,失蹤者是張志新(化名)和其女友劉穎解孙,沒想到半個(gè)月后坑填,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弛姜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年穷遂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娱据。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚪黑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出中剩,到底是詐尸還是另有隱情忌穿,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布结啼,位于F島的核電站掠剑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏郊愧。R本人自食惡果不足惜朴译,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望属铁。 院中可真熱鬧眠寿,春花似錦、人聲如沸焦蘑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽例嘱。三九已至狡逢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拼卵,已是汗流浹背奢浑。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腋腮,地道東北人雀彼。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像低葫,于是被迫代替她去往敵國和親详羡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容