Nginxã®ã¢ãŒããã¯ãã£ã«ã€ããŠèª¿ã¹ãŠãããšããŸãšããã

çšèªã®ãããã
ããã»ã¹ïŒProcessïŒ
- ããã°ã©ã ã®å®è¡åäœã§ãããCPUæéåäœã§å²ãæ¯ãããã
- ç¶æ (ã¹ããŒã)ããããçŸåšåŠçäžã§ããRunningç¶æ ã ã£ãããå®è¡å¯èœç¶æ ã§ããReadyçãååšããã
- CPUãããã»ã¹ãå®è¡ããå Žåããã®ããã»ã¹ãæã€ã¡ã¢ãªããŒã¿ã«å¯ŸããŠæŒç®ãè¡ãã
- ããã»ã¹ã¯ããã¹ãã»ã°ã¡ã³ããšããŒã¿ã»ã°ã¡ã³ããããªãæ§é ããŒã¿ãã¡ã¢ãªäžã«æã£ãŠããã
-
ããã¹ãã»ã°ã¡ã³ã
- ããã°ã©ã ã®åœä»€å
-
ããŒã¿ã»ã°ã¡ã³ã
- PDA (Processor Data Area)ãšåŒã°ãããããã»ããµã®æ å ±ãããã»ã¹ç®¡ççšã®ããŒã¿é å
- ããŒã¿é åãšåŒã°ããã宿°çã眮ãããéçé åãšãéåžžã®å€æ°çã眮ãããããŒãé åãããªãé å
- ã¹ã¿ãã¯é åãšåŒã°ãããäžæçãªããŒã¿ä¿ç®¡é å
-
ããã¹ãã»ã°ã¡ã³ã
å®è¡äžã®ããã»ã¹ã確èª
~ â¯â¯â¯ ps
PID TTY TIME CMD
6966 ttys000 0:00.03 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp kenta
6968 ttys000 0:00.35 -zsh
7116 ttys001 0:00.01 -zsh
ã¹ã¬ããïŒThreadïŒ
- CPUãå©çšããããã®å®è¡åäœã§ãæå°åŠçåäœã®æŠå¿µã
-
åããã»ã¹ã¯ç¬èªã®ä»®æ³ã¡ã¢ãªãå²ãåœãŠãããããããã軜éãªå®è¡åäœãæ±ãããLinux2.4ããã€ããããã
䞊è¡ãšäžŠåã®éã
å®çŸ©
ã·ã¹ãã ãè€æ°ã®åäœïŒåŠçã®æµãïŒãåæã«å®è¡ç¶æ (in progress)ã«ä¿ãŠãæ©èœãåããŠããå Žåã 䞊è¡(concurrent)ãšèšããè€æ°ã®åäœãåæã«å®è¡ã§ããå Žåã䞊å(parallel)ãšèšããŸãã éèŠãªæŠå¿µãéãã¯ãå®è¡ç¶æ ããšããç¹ã§ãã
䞊è¡(concurrent)
- ããä»»ææéæã§äžã€ã®ä»äºããè¡ããªãããè€æ°ã®ä»äºãåãæ¿ããããšã«ããåæã«å®è¡ããããšã
- è€æ°ã®ä»äºïŒã¹ã¬ããïŒãå®è¡ç¶æ ãšããŠä¿ãŠãŠããç¶æ ã
䞊åïŒpararellïŒ
- ããä»»ææéæã§è€æ°ã®ä»äºãåæã«å®è¡ããããšã
- 䞊åã¯äžŠè¡ãå å«ããŠããããšã«æ³šæã
JavaScriptã§äŸããŠã¿ã
éåæåŠçã¯ã¡ã€ã³ã®ã¹ã¬ãããšå¥ã¹ã¬ããã§åããŠãããã䞊ååŠçã§ã¯ïŒãšæããã¡ã ããå®éã¯å¹³è¡åŠçãè¡ãªã£ãŠããã
- å ·äœçã«ãåºæ¬çã«JSã¯ã·ã³ã°ã«ã¹ã¬ããã®ããã°ã©ã ãªã®ã§äžèŠäžŠåã§åããŠããããªsetTimeoutçã®éåæåŠçãå®ã¯åãã¹ã¬ããã§åããŠããã
- ãã¥ãŒã«ç»é²ããã颿°ãé çªã«äžã€ã¥ã€å®è¡ãããããéåæåŠçã®å®è£ ã§ã¯å®è¡åŸ ã¡ã®ãã¥ãŒã«ã³ãŒã«ããã¯é¢æ°ãå²ã蟌ãŸããããã«ãªã£ãŠããã

åŒçš : https://qiita.com/klme_u6/items/ea155f82cbe44d6f5d88
ã·ã³ã°ã«ããã»ã¹ãšãã«ãããã»ã¹ïŒãã«ãã¿ã¹ã¯ïŒ
ãã«ãããã»ã¹
- è€æ°ã®ããã»ã¹ã䞊ååŠçããããšã
- ã¯ã©ã€ã¢ã³ãããã®æ¥ç¶æ¯ã«ããã»ã¹ããã©ãŒã¯ããŠåŠçããã
- ããã»ã¹ããã©ãŒã¯ïŒforkïŒããåããã»ã¹ãè€æ°ç«ã¡äžããããšã§åãããã°ã©ã ã䞊åå®è¡ããããšãã§ããã
- ããã»ã¹ â ã¹ã¬ããã®æŠå¿µã§ããããšã«æ³šæã
- ã¡ãªãã
- ã¡ã¢ãªç©ºéãåããã»ã¹æ¯ã«ç¬ç«ããŠãããããã¹ã¯ãªããèšèªçãçµã¿èŸŒã¿ãããã
- ãã¡ãªãã
- ã¡ã¢ãªç©ºéãå ±æã§ããªããããããã»ã¹éã®ã¡ã¢ãªãçŽæ¥åç §ã§ããªãã

åŒçš : https://moro-archive.hatenablog.com/entry/2014/09/11/013520
ã·ã³ã°ã«ããã»ã¹
- ãã®ãŸãŸã1ã€ã®ããã»ã¹ã§ã®ããã°ã©ã å®è¡ã瀺ãã
- ããã»ã¹ã¯äžã€ãªã®ã§ã䞊è¡åŠçãšãªã
ã·ã³ã°ã«ã¹ã¬ãããšãã«ãã¹ã¬ãã
ãã«ãã¹ã¬ãã
- è€æ°ã®ã¹ã¬ããã䞊ååŠçããããš
- ã€ãŸãã1ããã»ã¹ã®äžã§åã¹ã¬ããã®äžŠååŠçãè¡ãããšãã§ãããšããããšã
- ã¯ã©ã€ã¢ã³ãããã®æ¥ç¶æ¯ã«ã¹ã¬ãããçæããŠåŠçããã
- ã¡ãªãã
- ã¡ã¢ãªç©ºéãåã¹ã¬ããã®éã§å ±æã§ããã
- ãã«ãããã»ã¹ã¢ãã«ã«æ¯ã¹ãã¡ã¢ãªç©ºéã®åãæ¿ãããªãåãã¡ã¢ãªæ¶è²»éã*ã³ã³ããã¹ãã¹ã€ãã*ã®ãªãŒããŒããããå°ãããªãã
- ãã¡ãªãã
- ã¡ã¢ãªç©ºéãå ±æããŠãããããä»ã®ã¹ã¬ããã«äŸåããå Žåãããã¹ã¯ãªããèšèªçãçµã¿èŸŒããªãå Žåãããã

åŒçš : https://moro-archive.hatenablog.com/entry/2014/09/11/013520
ã·ã³ã°ã«ã¹ã¬ãã
- 䞊è¡ããŠè€æ°ã®ããã°ã©ã æµããå®è¡ããããã«ãã¹ã¬ãããšå¯Ÿæ¯ããŠãããã°ã©ã ã®åŠçã®æµããäžæ¬ã®ã¿ã®ç¶æ ã®ããšã
- 䞊ååŠçã§ã¯ãªããåäžã®åœä»€ã®æµãã鿬¡çã«å®è¡ããŠãã䞊è¡åŠçãæã
- 1ã€ã®ããã»ã¹ã1ã€ã®ã¹ã¬ããããæã£ãŠããªãå Žåããã®æã¯ã¹ã¬ãã=ããã»ã¹ãšãèšããã
- äŸãã°ãNode.jsã§ã¯ã·ã³ã°ã«ã¹ã¬ãããé©å¿ãããŠãããããã¡ã€ã«I/Oã®éåæããšãã€ãã³ãã«ãŒããã«ãã£ãŠå¹çããåŠçãè¡ãããšãå¯èœã«ããŠããã
ã³ã³ããã¹ãã¹ã€ãã
åææ¥ç¶æ°åã®ããã»ã¹ãã¹ã¬ãããå¿ èŠã«ãªãããã®æ°ãå€ããªããšã³ã³ããã¹ãã¹ã€ãããçºçãåŠçãé ããªãå Žåãããã
ã³ã³ããã¹ãã¹ã€ãããšã¯ãã³ã³ãã¥ãŒã¿ã®åŠçè£ çœ®ïŒCPUïŒãçŸåšå®è¡ããŠããåŠçã®æµãïŒããã»ã¹ãã¹ã¬ããïŒãäžæåæ¢ããå¥ã®ãã®ã«åãæ¿ããŠå®è¡ãåéããããšã
C10Kåé¡
ãCãã¯ãClient(ã¯ã©ã€ã¢ã³ã)ããã10Kãã¯ã1äžå°ãã衚ãã(ããŒããŠã§ã¢ããããã¯ãŒã¯æ§èœã«åé¡ããªããŠã)åæã¯ã©ã€ã¢ã³ãæ¥ç¶æ°ãããäžå®æ°ãè¶ ãããšãµãŒãããã³ã¯ããŠããŸãåé¡ã®ããšã
ã¢ãŒããã¯ãã£ã®çš®é¡
preforkãšworker
- MPMïŒMulti Processing ModuleïŒã®çš®é¡ã
- Webãã©ãŠã¶ããã®ãªã¯ãšã¹ãã®åŠçéšåãã¢ãžã¥ãŒã«åãããã®ã®ããšã
preforkã¢ãã«
- Apacheã®ããã©ã«ãã¢ãŒããã¯ãã£ã§å©çšãããŠããã
- ãã«ãããã»ã¹ã¢ãã«ã
- ã¹ã¬ããã䜿ãããå è¡ããŠforkãè¡ãªãwebãµãŒããæãïŒãªã®ã§ãpre + forkïŒã
- ãªã¯ãšã¹ããšããã»ã¹ã1察1察å¿ã§åŠçããã
- ã¡ãªãã
- åããã»ã¹ãäœããã®åå ã§åæ¢ããŠããä»ã®åããã»ã¹ã«ã¯åœ±é¿ãåãŒãããšãç¡ãéä¿¡ãç¶ç¶ã§ãããããå®å®ããéä¿¡ãè¡ããã
- ãã¡ãªãã
- åææ¥ç¶æ°ïŒã¯ã©ã€ã¢ã³ãæ°ïŒã«æ¯äŸããŠåããã»ã¹ã®æ°ãå¢ããã®ã§ã䜿çšã¡ã¢ãªéãCPUè² è·ãæ¯äŸçã«å¢å€§ããŠããããšã«ãªããC10Kåé¡ã«ç¹ããã
workerã¢ãã«
- Apacheã®ã¢ãŒããã¯ãã£ãšããŠå©çšå¯èœã
- ãã«ãããã»ã¹ãšãã«ãã¹ã¬ããã®ãã€ããªããåã¢ãã«ã
- Apacheã®åããã»ã¹1ã€1ã€ããã«ãã¹ã¬ããã§åäœããã¹ã¬ãã1ã€ã1ã€ã®ã¯ã©ã€ã¢ã³ãã®åŠçãæ ãã
- ãªã¯ãšã¹ããšã¹ã¬ããã1察1察å¿ã§åŠçããã
- ã¡ãªãã
- å€ãã®åããã»ã¹ãèµ·åããã«ãã¡ã¢ãªã®äœ¿çšéãæžããããšãã§ããã
- ãã¡ãªãã
- åææ¥ç¶æ°ïŒã¯ã©ã€ã¢ã³ãæ°ïŒã«æ¯äŸããŠã¹ã¬ããã®æ°ãå¢ããã®ã§ã䜿çšã¡ã¢ãªéãCPUè² è·ãæ¯äŸçã«å¢å€§ããŠããããšã«ãªããC10Kåé¡ã«ç¹ããã
ã€ãã³ãé§åã¢ãã«
- Nginxã®ã¢ãŒããã¯ãã£ã§å©çšãããŠããã
- ã€ãã³ãé§ååã¢ãã«ãšã¯ãã¯ã©ã€ã¢ã³ãã®ã¢ã¯ã»ã¹ãã€ãã³ããšããŠæ±ãããããããªã¬ãŒã«ããã»ã¹å ã§åŠçãè¡ãããšã
- 1ããã»ã¹ã¯1ã¹ã¬ããããå©çšããªãã®ã§ãCPUã®æ°ã ãããã»ã¹ãçšæããã¯ãŒã«ãŒã¢ãã«ãå©çšãããŠããã
- Node.jsãšåæ§ãã€ãã³ãã«ãŒãæ¹åŒïŒã·ã³ã°ã«ã¹ã¬ããã§ã«ãŒãåŠçããŸããããã¥ãŒã«æºãŸã£ãã€ãã³ããåŠçããŠããåŠçæ¹åŒïŒãå©çšãããŠããã
- ã¡ãªãã
- ã·ã³ã°ã«ã¹ã¬ããã®ããã»ã¹ã®ããã¡ã¢ãªç©ºéã®å ±æãå¯èœã
- åææ¥ç¶æ°ïŒã¯ã©ã€ã¢ã³ãæ°ïŒãå¢ããŠããããã»ã¹æ°ãã¹ã¬ããæ°ã¯å¢ããªããããC10Kåé¡ã解決ã§ããã
- ãã®ãããã¡ã¢ãªæ¶è²»éãã³ã³ããã¹ãã¹ã€ããã®ãªãŒããŒããããå°ããã
- ãã¡ãªãã
- ã¡ã¢ãªç©ºéãå ±æããŠãããããä»ã®ã¹ã¬ããã«äŸåããå Žåãããã¹ã¯ãªããèšèªçãçµã¿èŸŒããªãå Žåãããã
Nginxã§çšããããã¢ãŒããã¯ãã£
ã€ãã³ãé§åã«ããéåæçãªI/Oã«ããã¢ãŒããã¯ãã£
æ¥ç¶ããšã«ããã»ã¹ãã¹ã¬ãããç«ã¡äžããŠã³ã³ããã¹ãã¹ã€ãããèµ·ãããªãããã«ãNginxã¯ã·ã³ã°ã«ã¹ã¬ããã§åŠçãè¡ãã
ããã»ã¹ã®ä»çµã¿
ãã¹ã¿ãŒããã»ã¹
- workerããã»ã¹ã®ç«ã¡äžãã管çãæ ããnginxå šäœã®ããã»ã¹ãå¶åŸ¡ãã
ã¯ãŒã«ãŒããã»ã¹
- workerãšåŒã°ããã·ã³ã°ã«ã¹ã¬ããã®ããã»ã¹ããããããè€æ°ã®ãªã¯ãšã¹ããåŠçããã
- ã€ãŸãã1ã€ã®workerããã»ã¹ããè€æ°ã®ãªã¯ãšã¹ããåŠçããã
- ãã ãã¯ãŒã«ããã»ã¹èªäœã¯ãã«ãããã»ã¹ãšããŠæ±ãããšãå¯èœãåã¯ãŒã«ããã»ã¹ã¯ãã¹ã¿ããã»ã¹ãåä¿¡ããã·ã°ãã«ã®çš®é¡ã«å¿ããŠåã¯ãŒã«ããã»ã¹ã«ãã·ã°ãã«ãéãã
ã§ã¯ãã·ã³ã°ã«ã¹ã¬ããã«ãããïŒããã»ã¹ã§ã©ããã£ãŠã倿°ã®ã¯ã©ã€ã¢ã³ãããã®ã¢ã¯ã»ã¹ããã°ããŠããã®ãïŒ
1ããã»ã¹ã§å€æ°ã®ã¯ã©ã€ã¢ã³ãã®æ¥ç¶ãåŠçããããã«ã¯ãã«ãããã»ã¹, ãã«ãã¹ã¬ãã, éåæI/O, I/Oã®å€éåãšããæ¹æ³ãããã
I/Oã®çš®é¡ãšæŠèŠ
ããããã³ã°I/Oãšãã³ããããã³ã°I/O
ããããã³ã°I/Oã»ã»ã»ããŒã¿åŠçãå®äºãããŸã§åŸ
ã€ããš/æäœããåã«åŸ
ã¡ãçºçãããšããæ§è³ªã
ãã³ããããã³ã°I/Oã»ã»ã»ããŒã¿åŠçã®å®äºãåŸ
ããã«ä»ã®åŠçãè¡ãããš/æäœããåã«åŸ
ã¡ãçºçããããªãå³åº§ã«é¢æ°ããè¿ããšããæ§è³ªã
åæI/OãšéåæI/O
åæI/Oã»ã»ã»ããŒã¿åŠçã®å
¥åºåãå¯èœã«ãªã£ãæç¹ã§éç¥ãã/æäœãçµãããŸã§ãããã¯ãããšããæ§è³ªã
éåæI/Oã»ã»ã»ããŒã¿åŠçã®å
¥åºåãå®äºããæç¹ã§éç¥/IOæäœãçºå¹ããã¹ã¬ããèªäœããããã¯ããã«å¥ã®CPUåŠçãè¡ãããšããæ§è³ªã
I/Oã®å€éå
2ã€ä»¥äžã®I/Oã«å¯ŸããŠãã©ãããå
¥åºåå¯èœã«ãªã£ãå Žåã®éç¥ãã«ãŒãã«ã«äŸé Œããæ©èœã
I/Oã®å€éåãå®çŸããããã®ã·ã¹ãã ã³ãŒã«ãselect, poll, epoll, kqueueããšåŒã°ãããã®ãããããããã¯ãããã以äžã®åŠçãè¡ã
- äžã€ãããã¯è€æ°ã®ãã£ã¹ã¯ãªãã¿ãç£èŠ
- ãã£ã¹ã¯ãªãã¿ã®æºåç¶æ ïŒäŸ : readyïŒèªã¿æžãå¯èœïŒïŒã«ãªããŸã§åŸ ã€
- æºåãæŽã£ããã£ã¹ã¯ãªãã¿ã®éç¥
ãã¡ã€ã«ãã£ã¹ã¯ãªãã¿
ãã¡ã€ã«ãã£ã¹ã¯ãªãã¿ãšã¯ãããã°ã©ã ãããã¡ã€ã«ãæäœããéãæäœå¯Ÿè±¡ã®ãã¡ã€ã«ãèå¥ã»åå®ããããã«å²ãåœãŠãããçªå·ãOSã«ã¢ã¯ã»ã¹ãäŸé Œããéã«ãã¡ã€ã«ãæå®ããã®ã«çšããããæŽæ°å€ã§ãã
Nginxã§ã®I/OåŠçã§ã¯ã
ïŒã€ãã³ãã«ãŒãã«ããïŒéåæãªã€ãã³ãé§åãšãIOã®å€éåã«ãã£ãŠãworkerããã»ã¹ã«ãŠãªã¯ãšã¹ããå®å
šã«åŠçãããããšãåŸ
ããã«åŠçãæãããšãã§ããŠããã
Nginxã¯ãªããŒã¹ãããã·ãšããŠãå©çšã§ãã
äžè¬çãªãããã·
- ã¯ã©ã€ã¢ã³ããããããã·ãµãŒãã«ãä»»æã®WebãµãŒããžã®ãªã¯ãšã¹ããè¡ãã
ãªããŒã¹ãããã·
- WebãµãŒããŒã®ä»£çã®åœ¹å²ãè¡ãã
- WebãµãŒããŒãžã®ãªã¯ãšã¹ãã®ä»£çåä¿¡ããã¯ã©ã€ã¢ã³ããžã®ã¬ã¹ãã³ã¹ã®ä»£çéä¿¡ãã§ããã
ãªããŒã¹ãããã·ã®ã¡ãªãã
ãã£ãã·ã¥ãå§çž®ã«ããé«éå
- ãªããŒã¹ãããã·ã«ãŠããŒã¿ã®ãã£ãã·ã³ã°ãå§çž®ãããããšãå¯èœã
- åãããŒãžãžã¢ã¯ã»ã¹ããã£ãæã¯å€éšã®ãµãŒããžã¢ã¯ã»ã¹ãè¡ããã«æžããããå¿çæ§èœã®åäžãéä¿¡éã®åæžã«ãªãã
ã»ãã¥ãªãã£ã®åäž
- IPã¢ãã¬ã¹ã§ã®ãã£ã«ã¿ãªã³ã°ã«ãããæªæã®ãããã¹ãããã®ãªã¯ãšã¹ãã®é®æãç¹å®ã®IPã®ã¿èš±å¯ããããšãã§ããã
- webãµãŒãã¯çŽæ¥ã€ã³ã¿ãŒãããã«æ¥ããå¿ èŠããªããããªã¹ã¯ãäœæžããã
- ãªããŒã¹ãããã·äžã§ãã¡ã€ã¢ãŠã©ãŒã«ãªã©ã®ã»ãã¥ãªãã£å¯Ÿçãããããšã§ãWebãµãŒãã«çŽæ¥æãå ããããšãªãå®å šæ§ãé«ããããšãã§ããã
SSLã®éäžç®¡ç
- ã¯ã©ã€ã¢ã³ããšãªããŒã¹ãããã·éã®éä¿¡è·¯ãSSLã§æå·åãããå ŽåããªããŒã¹ãããã·ãéä¿¡å 容ã埩å·ããããšã§
- éä¿¡ããWebãµãŒããŒèªäœãããããHTTPSã«å¯Ÿå¿ãããããšãªããéä¿¡è·¯ãæå·åããããšãå¯èœã
è² è·åæ£
- webãµãŒãã¯è€æ°å°ã§æ§æããã1å°ã®ãªããŒã¹ãããã·ãµãŒãããè€æ°ã®WebãµãŒãã«ãªã¯ãšã¹ããæ¯ãåãè² è·åæ£ãå¯èœã
- ãŸãããªããŒã¹ãããã·ã§URLãåè§£ããŠããURLã倿ãWEBãµãŒããŒã«è»¢éãã§ããURLã®ççž®ãè¡ãããšãã§ããã
ã¡ã¢ãªå¹çã®åäž
- URLããéçã³ã³ãã³ã/åçã³ã³ãã³ããåãµãŒããŒã«æ¯ãåããŠåŠçãè¡ãããšãã§ããå šäœãšããŠã¡ã¢ãªäœ¿çšå¹çãäžããã
Apacheãšã®æ¯èŒ
ApacheãšNginxã«ã€ããŠæ¯èŒãåç §ã
åèæç®
Linuxããã»ã¹ãšã«ãŒãã«èªè§£ã®ãšã£ããã
ããã»ã¹ãšã¹ã¬ãã - Linux Kernel
䞊è¡åŠçã䞊ååŠçã®ãããã
ããã»ã¹ãšã¹ã¬ããã®éããšã¯ïŒ
ã€ã±ãŠããšã³ãžãã¢ã«ãªããã·ãªãŒãº ãã¡ã¢ãªãšããã»ã¹ãšã¹ã¬ããç·šã
Nginxã®ä»çµã¿ã«ã€ããŠå
¥é
preforkãšworker
Apache MPMãšã¯ãªããããšãã話
ãªããŒã¹ãããã·ã£ãŠäœïŒè§Šãã ãåŠãã ãµãŒããŒ/ã€ã³ãã©å
¥é
ãªããŒã¹ãããã· (reverse proxy)ãšã¯
ãããã·ãµãŒãã»ãªããŒã¹ãããã·ãµãŒããšã¯ïŒ
90ç§ã®åç»ã§åŠã¶ITããŒã¯ãŒã:ãªããŒã¹ãããã·
Nginxãæ©ãçç±ã«ã€ããŠèª¿ã¹ãïŒåºç€ïŒ
ã³ã³ããã§ããããã³ããããã³ã°IO
ãã³ããããã³ã°I/OãšéåæI/Oã®éããçè§£ãã
éåæI/Oããã³ããããã³ã°I/Oåã³I/Oã®å€éåã«ã€ããŠ
ãã¡ã€ã«ãã£ã¹ã¯ãªãã¿
Apacheã³ããã¿ãŒãèŠããApache vs nginx
ãNginxãNginxã«ã€ããŠ(æŠèŠ)
éåæ IO ã«ã€ããŠ
éåæãšãã³ããããã³ã°ãšããšäœã
JavaScriptã®éåæåŠçã䞊ååŠçãšåéãããŠããŸãããïŒ


