[服務器]nginx -- 1

初探nginx架構###

淘寶團隊的nginx教材
nginx版本1.12

  1. nginx與外界提陶,nginx的master與worker之間都是通過信號相連接的恩掷。

例子:從容的重啟
master接受到信號后栗弟,重新加載配置检疫,用新配置fork新的worker出來绒尊。
master向老的worker發(fā)送信號数焊,老的worker收到信號后乍惊,不再接受處理新的連接蔫耽。
老的worker處理完現(xiàn)有連接后撩炊,從容退出外永。

這樣,利用信號就達到了不中斷服務的重新加載配置拧咳。
相關代碼:[20170512更新]
1)ngx_process.c:signals全局數(shù)組伯顶,line 39,定義了所有的信號名(nginx自定名和系統(tǒng)信號名的對應)
2)ngx_config.h:NGX_RECONFIGURE_SIGNAL 被定義為SIGHUP
3)ngx_process.c:ngx_signal_handler骆膝,所有的信號處理函數(shù)都被歸到一個信號處理函數(shù)中祭衩,用switch處理,對于worker進程阅签,SIGHUP被忽略了掐暮,對于主進程,它把一個全局的變量(類型sig_atomic_t政钟,待擴展)ngx_reconfigure設置成了1路克。
4)ngx_process_cycle.c(os/unix):3)提到的ngx_reconfigure被設置成1之后,主循環(huán)有一個判斷锥涕,調用了ngx_start_worker_processes衷戈。重新建立了幾個類型為JUST_RESPAWN的worker,這些是新worker层坠。然后向所有進程發(fā)送NGX_SHUTDOWN_SIGNAL(定義為SIGQUIT)
5)3中ngx_signal_handler中worker部分殖妇,對NGX_SHUTDOWN_SIGNAL的處理是置全局變量ngx_quit = 1;前面提到的worker_process_cycle中對這個進行了判斷破花,關閉監(jiān)聽套接字谦趣,關閉空閑連接,然后退出進程座每。(關于SIGCHLD的跟蹤待擴展)
6)子進程退出會有SIGCHLD信號觸發(fā)前鹅,ngx_signal_handler會設置ngx_reap = 1并且waitpid等到退出子進程的pid,線性遍歷數(shù)組找到子進程的控制塊峭梳,設置.exited = 1舰绘;主進程會去reap .exited=1的子進程蹂喻。

結論:SIGHUP觸發(fā)主進程的RECONFIGURE動作==>主進程建立新worker==>向所有老worker發(fā)送SIGQUIT信號==>收到>SIGQUIT的老worker掃尾退出==>主進程去收割老worker的尸體。熱重啟完成捂寿。

  1. nginx保證每個worker等概率接受處理請求的方法
    nginx沒有用一個線程接收然后分發(fā)到各個線程中去的做法口四。master進程初始化listenfd,然后fork出worker進程秦陋,worker進程持有l(wèi)istenfd蔓彩,在注冊讀事件前搶一個全局的accept_mutex互斥鎖,搶到互斥鎖的那個進程驳概,向epoll注冊讀事件赤嚼,所以接受連接這件事,都是worker在做顺又。
    但是這樣做肯定會有不公平的事情發(fā)生:ngx_accept_disabled變量更卒,它定義為worker所能承受的最大連接數(shù) * 1/8 - 空閑連接數(shù),當空閑連接數(shù)小于最大連接數(shù)的1/8時稚照,ngx_accept_disabled大于零逞壁,此時的worker就不會去搶鎖了,轉而變?yōu)槊看螕屾i的時候锐锣,會將ngx_accept_disabled減1,直至該變量小于0绳瘟。
    相關代碼:
    ngx_event.c:try_lock_accept_mutex()去獲得鎖雕憔,然后獲得鎖的進程去注冊accept事件。

美團面試問到:如果你自己設計服務器糖声,設計為多進程還是多線程斤彼?
答案幾乎一定是多進程,就是因為進程CRASH了蘸泻,其他的進程還不受影響琉苇,只影響一部分服務,線程如果CRASH了
整個進程就都沒了悦施。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末并扇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抡诞,更是在濱河造成了極大的恐慌穷蛹,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昼汗,死亡現(xiàn)場離奇詭異肴熏,居然都是意外死亡,警方通過查閱死者的電腦和手機顷窒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門蛙吏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事鸦做±常” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵馁龟,是天一觀的道長崩侠。 經(jīng)常有香客問我,道長坷檩,這世上最難降的妖魔是什么却音? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮矢炼,結果婚禮上系瓢,老公的妹妹穿的比我還像新娘。我一直安慰自己句灌,他們只是感情好夷陋,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胰锌,像睡著了一般骗绕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上资昧,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天酬土,我揣著相機與錄音,去河邊找鬼格带。 笑死撤缴,一個胖子當著我的面吹牛,可吹牛的內容都是我干的叽唱。 我是一名探鬼主播屈呕,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼棺亭!你這毒婦竟也來了虎眨?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤侦铜,失蹤者是張志新(化名)和其女友劉穎专甩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钉稍,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡涤躲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贡未。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片种樱。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒙袍,死狀恐怖,靈堂內的尸體忽然破棺而出嫩挤,到底是詐尸還是另有隱情害幅,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布岂昭,位于F島的核電站以现,受9級特大地震影響,放射性物質發(fā)生泄漏约啊。R本人自食惡果不足惜邑遏,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望恰矩。 院中可真熱鬧记盒,春花似錦、人聲如沸外傅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萎胰。三九已至碾盟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間技竟,已是汗流浹背巷疼。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留灵奖,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓估盘,卻偏偏與公主長得像瓷患,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子遣妥,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內容

  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx擅编?那么一定聽過它的“同行”Apache吧!Ngi...
    JokerW閱讀 32,642評論 24 1,002
  • 本文系轉載》》》》》》》》》》》》》》》》 編者按:高可用架構分享及傳播在架構領域具有典型意義的文章箫踩,本文由陳科在...
    demop閱讀 8,007評論 0 7
  • 什么是Nginx爱态? Nginx是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器N...
    jiangmo閱讀 2,534評論 1 9
  • 1.簡介: ? Nginx:engine X 境钟,2002年锦担,開源,商業(yè)版? http協(xié)議:web服務器(類似于ht...
    尛尛大尹閱讀 1,860評論 0 3
  • Nginx是一個高性能的HTTP和反向代理服務器慨削,其特點是占有內存少洞渔,并發(fā)能力強套媚,事實上nginx的并發(fā)能力確實在...
    TyiMan閱讀 2,243評論 0 5