
WebãµãŒãã¹ã®æ§é
ã¢ã³ãã¬ã€ã»ã¹ãã«ãã
WebãµãŒãã¹ã®ããã¯ãšã³ãã®ãã¬ããããšãã¬ãããã«å ¥ãããã®å éšããã€ã¹ããµãŒãã¹ã®å¹çã«ã©ã®ããã«åœ±é¿ãããã補åããã®ç¹æ§ãããã³ã¢ããªã±ãŒã·ã§ã³ãéãè² è·ã«èããããããã«ããæ¹æ³ã説æããŸããããéãåäœããŸãã
WebãµãŒãã¹ãããã¯ãšã³ããã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãã©ã®éšåãšåŒã³ãŸããïŒ å€å žçãªã¢ãŒããã¯ãã£ã§ã¯ããããhttpãªããŒã¹ãããã·ãŸãã¯ããŒããã©ã³ãµã®èåŸã«ãããŸãããäžæ¹ã§ããŒã¿ããŒã¹ãmemcachedãªã©ããããŸããããããŸãã«ãã®ããã¯ãšã³ãã§ãã
ããã¯ãšã³ãã¯äœãããŠããŸããïŒ

ããã»ããµé床ãšãããã¯ãŒã¯æ¥ç¶ã®æ¯çãèŠããšãéãã¯æ°æ¡ã§ãã ããšãã°ããã®ã¹ã©ã€ãã§ã¯ã1 KBã®ããŒã¿ã®å§çž®ã«ã¯3ÎŒsããããŸãããåãããŒã¿ã»ã³ã¿ãŒå ã§ãã£ãŠããäžæ¹åãžã®åŸåŸ©ã¯ãã§ã«0.5ããªç§ã§ãã ããã¯ãšã³ããå¿ èŠãšãããããã¯ãŒã¯çžäºäœçšïŒããšãã°ãããŒã¿ããŒã¹ãžã®èŠæ±ã®éä¿¡ïŒã«ã¯å°ãªããšã2åã®ã©ãŠã³ãããªãããå¿ èŠã§ããããã¯ãããŒã¿ã®åŠçã«è²»ããããããã»ããµãŒæéãšæ¯èŒãããšãŸã£ããéèŠã§ã¯ãããŸããã ã»ãšãã©ã®å Žåããªã¯ãšã¹ãã¯åŠçãããããã¯ãšã³ãã¯äœãããã«åŸ æ©ããŸãã ãªã圌ã¯åŸ ã£ãŠããŸããïŒ æ¯èŒçè€éãªäœæ¥ã®å€§éšåã¯ããªããŒã¹ãããã·ãŸãã¯ããã«çŽé¢ããŠããããŒããã©ã³ãµãŒã«ãã£ãŠè¡ãããŸãã ãã®ãããã¡ãªã³ã°èŠæ±ãšå¿çãããã³æ€èšŒhttpãäœéã¯ã©ã€ã¢ã³ããšã®ãæŠãããæå·åhttpsã æåéãäžå¯Ÿã®tcpãã±ããã§æ¢ã«ãããã¡ãªã³ã°ãããŠããçŽç²ãªhttp-validãªã¯ãšã¹ããããã¯ãšã³ãã«å±ããŸãã ãããã·å¿çãããã¯ãšã³ãçšã«ãããã¡ãªã³ã°ããæºåãã§ããŠããããããè¡ãå¿ èŠã¯ãããŸããã
ããã¯ãšã³ãã¯ãWebã¢ãŒããã¯ãã£ã®æ倧ã®ããŒãã¡ãŒã®1ã€ã§ãã 圌ã«ã¯2ã€ã®ã¿ã¹ã¯ãããããŸããã
- ãããã¯ãŒã¯I / O-ããã¯äžæ¹ã§ãããã·ãšã®éä¿¡ã§ã-HTTPãªã¯ãšã¹ããåä¿¡ããŠââããã«å¿çããä»æ¹ã§ããŒã¿ãä¿åããããããçš®é¡ã®ãµãŒãã¹ãšéä¿¡ããŸã-ãããã¯ããŒã¿ããŒã¹ããã¥ãŒãmemcachedãªã©ã§ã
- æååã®æ¥ç-ããŒã¿ãJSONã§ã·ãªã¢ã«åããhtmlã«åºã¥ããŠãã³ãã¬ãŒããäœæããsh1ãŸãã¯md5ãèšç®ããŸããïŒ ããŒã¿å§çž®ãå®è¡ããŸãã
ãããŠãããã¯ãšã³ãã®ããžãã¹ããžãã¯ãšã¯äœã§ããïŒ ãããã¯ããå€æ°ã®å€ã3ãè¶ ããå Žåãå®è¡ããŸãããããŠãŒã¶ãŒããã°ã€ã³ããŠããå Žåã¯1ã€ã衚瀺ãããã°ã€ã³ããŠããªãå Žåã¯å¥ã®è¡šç€ºãããããªã©ã®ãã§ãã¯ã§ãã ãã¡ãããç»åã®ãµã€ãºã®å€æŽããããªã®å€æãªã©ãç¹å®ã®ã¿ã¹ã¯ããããŸãããã»ãšãã©ã®å Žåããã®ãããªã¿ã¹ã¯ã¯ãã¥ãŒãã¯ãŒã«ãŒãªã©ã䜿çšããŠããã¯ãšã³ãã®å€éšã§è§£æ±ºãããŸãã
ã¯ãšãªã®åæå®è¡æ§
ããã¯ãšã³ãã«ã€ããŠè©±ãããã®ããã©ãŒãã³ã¹ã補åã®å šäœçãªããã©ãŒãã³ã¹ã倧ããå·Šå³ããå Žåã2ã€ã®æé©åç®æšãèšå®ã§ããŸãã
- 1ç§ãããã®ãªã¯ãšã¹ãæ°ãããã€ãžã§ã¹ããã«ãããã€ãŸã çç£æ§ãåäžããã
- 2çªç®ã®ç®æš-補å-ã¯ãå¿çæéãççž®ããããšã§ããã€ãŸããåèŠæ±ãã¯ããã«éãå®è¡ããããŠãŒã¶ãŒã«ãšã£ãŠçµæãããéã衚瀺ãããããã«ãªããŸãã
ããã¯ãšã³ããã¢ã€ãã©ãŒã§ãããã»ãšãã©ã®æéåŸ æ©ããããšãæãåºããšãããã¯ãšã³ããå¯èœãªéãå€ãã®è² è·ã«èããããšãã§ãããšãã芳ç¹ããã1ã€ã®ãªã¯ãšã¹ãã§ã¯ãªããè€æ°ã®ãªã¯ãšã¹ããåãããã»ããµã³ã¢å ã§åŠçããå¿ èŠãããããšã¯å®å šã«è«ççã§ãã«ã CPUæéã¯éåžžã«çãããããã®éã«åŸ æ©ééããããŸããåãã³ã¢ã§è€æ°ã®ãªã¯ãšã¹ããåŠçããããçš®ã®ãããã¯ãŒã¯I / OãåŸ ã£ãŠåŠçããããã¯ããããšããããåãæ¿ããŸãã

äžæ¹ãå¿çæéãæé©åããå Žåãå¿çæéã«åœ±é¿ãäžãããã®ã¯äœã§ããïŒ ããã¯ãããã¯ãšã³ããè¡ãããšã§ã-ã¹ããªã³ã°åãšãããã¯ãŒã¯I / Oã ãããã¯ãŒã¯I / Oã¯1æ¡é·ãæéãããããããæé©åããå¿ èŠããããŸãã ãããè¡ãã«ã¯ããã¹ãŠã®åŸ æ©æéã䞊ååããããšãã§ããŸã-ãã¹ãŠã®èŠæ±ãåæã«éä¿¡ãããã¹ãŠã®åçãåŸ æ©ããã¯ã©ã€ã¢ã³ãã®ãããã¯ã圢æããŠè¿ä¿¡ããŸãã ãã¡ãããããžãã¹ããžãã¯ã«ãã£ãŠããã€ãã®èŠæ±ãåæã«éä¿¡ã§ããå Žåã¯ãå¿çæéãå€§å¹ ã«ççž®ãããŸãã
ãããã¯ãŒã¯å ¥åºå
ãããã¯ãŒã¯I / Oããå§ããŸãããã I / Oã®ç·šæã«ã¯ãããããã³ã°ãéããããã³ã°ãéåæã®3ã€ã®ãªãã·ã§ã³ããããŸãã åŸè ã¯ãããã¯ãŒã¯ã®ãã®ã§ã¯åäœããŸããã2ã€ã®ãªãã·ã§ã³ããããŸã-ãããã¯ãéãããã¯ã
APIãœã±ãããBSDãœã±ããã®äŸã䜿çšããŠããããèŠãŠã¿ãŸãããããããã¯UNIX-eäžãWindowsäžã§ã¯ãã¹ãŠåãã§ã-åŒã³åºãã¯ç°ãªãæ¹æ³ã§åŒã³åºãããŸãããããžãã¯ã¯åãã§ãã äœã¬ãã«tcpãœã±ããAPIã¯ã©ã®ãããªãã®ã§ããïŒ ããã¯äžé£ã®èª²é¡ã§ãã ãµãŒããŒã«ã€ããŠè©±ããŠããå Žåã¯ããœã±ãããäœæãããªãã¹ã³ããŠããç¹å®ã®ã¢ãã¬ã¹ã«ãã€ã³ããããªãã¹ã³ããçä¿¡æ¥ç¶ãåŸ æ©ããããšãå ±åããå¿ èŠããããŸãã 次ã«ãacceptåŒã³åºãããããŸããããã¯ãæ°ãããœã±ãããç¹å®ã®ã¯ã©ã€ã¢ã³ããšã®æ°ããæ¥ç¶ãæäŸããŸãããã®æ¥ç¶å ã§ããã®ãœã±ããããããŒã¿ãèªã¿æžãã§ããŸãã ãªã¯ãšã¹ããåä¿¡ããã¬ã¹ãã³ã¹ãéä¿¡ããæåŸã«ãã®ãœã±ãããéããŸãã
I / Oããããã¯ãããŠããå ŽåãããŒã¿ãæ°ããæ¥ç¶ããŸãã¯ã·ã¹ãã ãããã¯ãŒã¯ãããã¡ãŒãèªç±ã«æžã蟌ãŸãããŸã§ãã»ãšãã©ã®éèŠãªæäœããããã¯ãããŸãã å®è¡ã¹ã¬ããã¯ãäœããã®æäœã®å®äºãåŸ ã¡ãŸãã ããããæãåçŽãªçµè«ãåŸãããŸããåäžã®ã¹ã¬ããå ã§ã¯ãè€æ°ã®æ¥ç¶ãæäŸããããšã¯ã§ããŸããã
äžæ¹ããã®ãªãã·ã§ã³ã¯éçºã®èŠ³ç¹ããæãåçŽã§ãã
ãããã2çªç®ã®ãªãã·ã§ã³-ãã³ããããã³ã°I / OããããŸãã è¡šé¢çã«ã¯ãéãã¯åºæ¬çãªãã®ã§ã-ãããã¯ããã代ããã«ããã¹ãŠã®æäœã¯ããã«å®äºããŸãã ããŒã¿ã®æºåãã§ããŠããªãå Žåã¯ãç¹å¥ãªãšã©ãŒã³ãŒããè¿ãããŸããããã«ãããåŸã§åŒã³åºããè©Šã¿ãå¿ èŠãããããšãæ確ã«ãªããŸãã ãã®ãªãã·ã§ã³ã䜿çšãããšãåãã¹ã¬ããããè€æ°ã®ãããã¯ãŒã¯æäœãåæã«å®è¡ã§ããŸãã ãããããªããªã ãœã±ãããI / Oã®æºåãã§ããŠãããã©ããã¯äžæã§ããããã察å¿ããèŠæ±ã§åãœã±ãããé çªã«åãå¿ èŠããããå®éã«ã¯ãæ°žç¶çãªãµã€ã¯ã«ã§ã¹ãã³ããŸãããããã¯éå¹ççã§ãã ãã¹ãŠã®ãœã±ãããå®è¡ã§ããæºåããŒãªã³ã°ã¡ã«ããºã ãå¿ èŠã§ãã圌ã¯ãã©ã®ãœã±ãããI / Oã«å¯Ÿå¿ããŠããããæããŠãããŸãã æºåãã§ããããå¿ èŠãªãã¹ãŠã®æäœãå®è¡ããŸãããã®åŸããããã¯ããŠãœã±ãããåŸ æ©ããåã³I / Oã®æºåãã§ããŸãã ãã®ãããªæºå調æ»ã¡ã«ããºã ã¯ããã€ããããŸããã詳现ã¯ããã©ãŒãã³ã¹ãç°ãªããŸãããéåžžã¯ããã³ãããã®äžãã«ãããç§ãã¡ã«ã¯èŠããŸããã
ãã³ããããã³ã°å ¥åºåãäœæããæ¹æ³ã¯ïŒ æºå調æ»ãšI / Oæäœããä»æ¥æºåãæŽã£ãŠãããœã±ããã®ã¿ãšçµã¿åãããŸãã æºå調æ»ã¯ãå°ãªããšã1ã€ã®ãœã±ããã«ããŒã¿ã衚瀺ããããŸã§ãããã¯ãããŸãã
ããã³ãããã®äžãã«ãããã®ã«ã€ããŠã®2çªç®ã®è³ªåã¯ããã«ãã¿ã¹ã¯ã®åé¡ã§ãã è€æ°ã®ãªã¯ãšã¹ãã®åæåŠçãã©ã®ããã«ä¿èšŒã§ããŸããïŒãããå¿ èŠã§ããããšã«åæããŸããïŒïŒ
3ã€ã®åºæ¬ãªãã·ã§ã³ããããŸãã
åã ã®ããã»ã¹
æãç°¡åã§æŽå²çã«æåã®æ¹æ³ã¯ãåãªã¯ãšã¹ããåŠçããããšã§ããåå¥ã®ããã»ã¹ãéå§ããŸãã ããããã³ã°I / Oã䜿çšã§ãããããããã¯è¯ãããšã§ãã ããã»ã¹ãçªç¶ã¯ã©ãã·ã¥ããå ŽåãåŠçããããªã¯ãšã¹ãã®ã¿ã«åœ±é¿ããä»ã®ãªã¯ãšã¹ãã«ã¯åœ±é¿ããŸããã
ãã€ãã¹ã®-ããªãè€éãªã³ãã¥ãã±ãŒã·ã§ã³ã æ£åŒã«ã¯ãããã»ã¹éã«æ£åŒãªãã®ã¯ã»ãšãã©ãããŸãããæŽçãããéèŠãªéä¿¡ã¡ã«ããºã ã«ã¯ãã¢ã¯ã»ã¹ãåæãããªã©ã®è¿œå ã®åªåãå¿ èŠã§ãã ãã®ã¹ããŒã ã®å€èŠ³-ããã€ãã®ãªãã·ã§ã³ããããŸãããéåžžã¯æåã®ããã»ã¹ãéå§ãããããšãã°ãªãã¹ã³ããŸãããã®åŸãã¯ãŒã«ãŒçšã®ããã»ã¹ã»ãããçæããŸããåããã»ã¹ã¯åããœã±ããã§åãå ¥ããçä¿¡æ¥ç¶ãäºæããŸãã
çä¿¡æ¥ç¶ã衚瀺ããããšããã«ãããã»ã¹ã®1ã€ããããã¯è§£é€ããããã®æ¥ç¶ãåä¿¡ããæåããæåŸãŸã§åŠçãããœã±ãããéããŠã次ã®èŠæ±ãå床å®è¡ããæºåãæŽããŸãã ããŸããŸãªããªãšãŒã·ã§ã³ãå¯èœã§ã-çä¿¡æ¥ç¶ããšã«ããã»ã¹ãçæãããããã¹ãŠãäºåã«éå§ãããªã© ããã¯ããã©ãŒãã³ã¹ç¹æ§ã«åœ±é¿ãäžããå¯èœæ§ããããŸãããç§ãã¡ã«ãšã£ãŠããã»ã©éèŠã§ã¯ãããŸããã
ãã®ãããªã·ã¹ãã ã®äŸïŒPHPãæãé »ç¹ã«å®è¡ãã人ã®ããã®FastCGIãããŒã¿ããŒã¹ãããã¬ãŒã«ãã«æžã蟌ã人ã®ããã®Phusion Passenger-ããã¯PostgresSQLã§ãã æ¥ç¶ããšã«åå¥ã®ããã»ã¹ãå²ãåœãŠãããŸãã
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã¹ã¬ãã
1ã€ã®ããã»ã¹ã®äžéšãšããŠãè€æ°ã®ã¹ã¬ãããçæããŸãã1ã€ã®ã¹ã¬ããã®ã¿ããããã¯ããããããI / Oã®ãããã¯ã䜿çšã§ããŸãã OSã¯ã¹ã¬ããã«ã€ããŠç¥ã£ãŠãããã¹ã¬ãããããã»ããµéã§åæ£ãããæ¹æ³ãç¥ã£ãŠããŸãã ã¹ã¬ããã¯ããã»ã¹ããã軜éã§ãã æ¬è³ªçã«ãããã¯åãã·ã¹ãã ã§ããå€ãã®ã¹ã¬ãããçæã§ããããšãæå³ããŸãã 1äžåã®ããã»ã¹ãéå§ã§ããå¯èœæ§ã¯äœãã§ããã1äžåã®ã¹ã¬ãããéå§ã§ããŸãã ããã1äžåã§å¹æçã§ãããšããäºå®ã§ã¯ãããŸããããããã§ãããããã¯ãããã軜éã§ãã
äžæ¹ãæç±æã¯ãããŸããã äœããã®ã¯ã©ãã·ã¥ãçºçããå Žåãåå¥ã®ã¹ã¬ããã§ã¯ãªããããã»ã¹å šäœããã€ã³ãããŸãã ãããŠæ倧ã®é£ç¹ã¯ãããã¯ãšã³ãã§åŠçãããããã»ã¹ã«ãŸã äžè¬çãªããŒã¿ãããå Žåãã¹ã¬ããéã®åé¢ããªãããšã§ãã å ±æã¡ã¢ãªãã€ãŸããå ±æã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ãåæããå¿ èŠããããŸãã å ±æã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ãåæããåé¡ã¯æãåçŽãªå Žåã§ããããšãã°ãããŒã¿ããŒã¹ãžã®æ¥ç¶ããŸãã¯ããŒã¿ããŒã¹ãžã®æ¥ç¶ã®ããŒã«ããããããã¯çä¿¡æ¥ç¶ãåŠçããããã¯ãšã³ãå ã®ãã¹ãŠã®ã¹ã¬ããã«å ±éã§ãã ã¢ã¯ã»ã¹åæãæ£ããè¡ãããšã¯å°é£ã§ãã
é£æ床ã«ã¯2ã€ã®ã¯ã©ã¹ããããŸãã
- æœåšçãªåé¡ãåæããã»ã¹äžã®ãããããã¯ã§ããå Žåãç§ãã¡ã®äžéšããã£ãããšããã¯ããå®è¡ãç¶ç¶ã§ããªãå Žåã
å ±æããŒã¿ãžã®ç«¶äºåã®ããã¢ã¯ã»ã¹ãšã倧ãŸãã«èšããš2ã€ã®ã¹ããªãŒã ãããå Žåãåæãäžååã§ããããããã®ããŒã¿ã¯åæã«å€åããããããæãªããŸãã ãã®ãããªããã°ã©ã ããããã°ããããšã¯ããé£ããããã¹ãŠã®ãã°ãããã«çŸããããã§ã¯ãããŸããã ããšãã°ãæåãªGILïŒGlobal Interpreter LockïŒã¯ããã«ãã¹ã¬ããã¢ããªã±ãŒã·ã§ã³ãäœæããæãç°¡åãªæ¹æ³ã®1ã€ã§ãã ãã¹ãŠã®ããŒã¿æ§é ããã¹ãŠã®ã¡ã¢ãªã¯ãããã»ã¹å šäœã§1ã€ã®ããã¯ã ãã§ä¿è·ãããŠãããšèšããŸãã ããã¯ã1ã€ã®ã¹ã¬ããããå®è¡ã§ãããããã¯ã1ã€ãããªãã誰ãããããã€ããã§ãä»ã®ãã¹ãŠãæ©èœããªãããããã«ãã¹ã¬ããå®è¡ãäžå¯èœã§ããããšãæå³ãããšæãããŸãã ã¯ããããã¯äºå®ã§ãããã»ãšãã©ã®å Žåããã»ã¹ã§äœæ¥ããã®ã§ã¯ãªãããããã¯ãŒã¯I / OæäœãåŸ ã€ããããããã¯ãããI / Oæäœã®åŒã³åºããçºçãããšãGILãäœäžããã¹ã¬ããããªã»ãããããŸããå®è¡æºåãã§ããŠããå¥ã®ã¹ã¬ããã«åãæ¿ãããŸãã ãããã£ãŠãããã¯ãšã³ãã®èŠ³ç¹ããèŠããšãGILã®äœ¿çšã¯ããã»ã©æããªããããããŸããã
è€æ°ã®ã¹ã¬ããã§è¡åãä¹ç®ããããšãããšãGILã䜿çšããã®ã¯æãã§ã-äžåºŠã«1ã€ã®ã¹ã¬ããããå®è¡ãããªããããããã¯ç¡æå³ã§ãã
äŸã ããã¯ããŒã¿ããŒã¹ããã®MySQLã§ããããªã¯ãšã¹ãã®åŠççšã«å¥ã®ã¹ã¬ãããå²ãåœãŠãããŠããŸãã å¥ã®ãã¹HTTPãã£ãã·ã¥ãã¯ãŒã«ãŒã¯åã ã®ãªã¯ãšã¹ããåŠçããã¹ã¬ããã§ãã
å調ãã«ãã¿ã¹ã¯
3çªç®ã®ãªãã·ã§ã³ã¯æãå°é£ã§ãã ããã§èšãOSã¯ãã¡ããã¯ãŒã«ã§ãããã«ã·ã§ããŒããããããã»ã¹ãã¹ã¬ããããããã®éã®åéºãæŽçãããã¯ãåŠçããããšãã§ããŸãããããã«ã€ããŠã¯ããã«æªãããšãç¥ã£ãŠããŸãç§ãã¡ãç¥ã£ãŠããããããã¢ããªã±ãŒã·ã§ã³ã®é 眮æ¹æ³ã ããã»ããµäžã§ããã€ãã®æäœãå®è¡ãããç¬éããããã»ãšãã©ã®å Žåãããã¯ãŒã¯I / Oãäºæ³ããããããåã ã®èŠæ±ã®åŠçããã€åãæ¿ããããããããŸãã
OSã®èŠ³ç¹ãããããšãå調ãã«ãã¿ã¹ã¯ã¯å®è¡ã®1ã€ã®ã¹ã¬ããã«ãããŸãããããã®å éšã§ã¯ãã¢ããªã±ãŒã·ã§ã³èªäœãåã ã®èŠæ±ã®åŠçãåãæ¿ããŸãã ããŒã¿ãå°çãããšããã«ããããèªãã§httpãªã¯ãšã¹ãã解æããäœãããå¿ èŠãããããèããmemcachedãªã¯ãšã¹ããéä¿¡ããŸããããããã¯ããããã³ã°æäœã§ãããã¬ã¹ãã³ã¹ãmemcachedããæ¥ããŸã§åŸ æ©ããåŸ æ©ãã代ããã«ãå¥ã®ãªã¯ãšã¹ãã®åŠçãéå§ããŠããŸãã
ãã®ãããªããã°ã©ã ãæžãããšã®è€éãã¯ãç§ãçŸåšç¹å®ã®èŠæ±ããšã«è¡ã£ãŠããåãæ¿ããã³ã³ããã¹ãã®ç¶æã®ããã»ã¹ãéçºè ã«ãããšããäºå®ã«ãããŸãã äžæ¹ãäžå¿ èŠãªã¹ã€ããããªããã¹ã¬ãããšããã»ã¹ãåãæ¿ããéã®ããã»ããµã³ã³ããã¹ããªã©ã®åãæ¿ãã«åé¡ããªããããå¹çãåäžããŸãã
å調ãã«ãã¿ã¹ã¯ãå®è£ ããã«ã¯2ã€ã®æ¹æ³ããããŸãã
1ã€ã¯æ瀺çãªã¡ãœããã§ãããå€æ°ã®ã³ãŒã«ããã¯ã«ãã£ãŠåºå¥ãããŸãã ã¢ã¯ã·ã§ã³ããã€ãçºçãããã€ãã¯çµæããããšãã«ã³ã³ãããŒã«ãè¿ããããšããäºå®ã«ã€ãªãããã¹ãŠã®ãããã¯æäœããããããã³ãŒã«ããã¯ãåžžã«ç»é²ããå¿ èŠããããŸã-ãªã¯ãšã¹ããå®è¡ããããšããããå®è¡ãããæåããªãå Žåã¯å®è¡ãããŸãã ã³ãŒã«ããã¯ã¯æçœãªãªãã·ã§ã³ã§ãããå®éã«ã¯éåžžã«å°é£ãªå Žåããããããå€ãã®äººã¯ãããæããŠããŸãã
2çªç®ã®ãªãã·ã§ã³ã¯ãå調çãªãã«ãã¿ã¹ã¯ãååšããªãããã«ããã°ã©ã ãèšè¿°ããå Žåã«æé»çã§ãã ããããã³ã°æäœãè¡ããŸããããçµæã¯ããã§æåŸ ããŠããŸãã å®éãã©ããã«ãããŒãã®äžã®ãã©ãã¯ããžãã¯ãããããŸãããã®æç¹ã§ãããããã³ã°æäœãéããããã³ã°ã«å€æããOSã¹ã¬ããã®æå³ã§ã¯ãªãè«çã¹ã¬ããã«å¶åŸ¡ã転éããããã°ã©ãã³ã°èšèªã®ã©ã³ã¿ã€ã ãã¬ãŒã ã¯ãŒã¯ãæ¢ã«èŠã€ããŸãããå éšã«ããããã©ãŒãã³ã¹ã ãã®ãªãã·ã§ã³ã¯ãã°ãªãŒã³ã¹ã¬ãããšåŒã°ããŸãã
å調ãã«ãã¿ã¹ã¯ã®å éšã«ã¯ããã¹ãŠã®I / OåŠçãæ åœããäžå€®ãªã³ã¯ãåžžã«ãããŸãã ããã¯ãªã¢ã¯ã¿ãŒãšåŒã°ããŸãã ããã¯äžçš®ã®éçºãã¿ãŒã³ã§ãã ãªã¢ã¯ã¿ãŒã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯æ¬¡ã®ãšããã§ããããœã±ãããšã³ãŒã«ããã¯ã®æããã ããããã®ãœã±ãããI / Oã®æºåãã§ããããé»è©±ããŸããã
ãªã¢ã¯ã¿ãŒãæäŸãã2çªç®ã®ãµãŒãã¹ã¯ã¿ã€ããŒã§ã-ãéåžžã«å€ãã®ããªç§åŸã«å€æŽããåŒã³åºããããã«åŒã³åºãå¿ èŠãããã³ãŒã«ããã¯ããããŸããã ãã®ããšã¯ãæ瀺çãŸãã¯æé»çã«å調ãã«ãã¿ã¹ã¯ãè¡ãããå Žæã§ããã°ã©ãã§ãèŠã€ãããŸãã
éåžžããªã¢ã¯ã¿ãŒå ã¯éåžžã«ã·ã³ãã«ã«é 眮ãããŠããŸãã ã¿ã€ããŒã§ãœãŒããããã¿ã€ããŒã®ãªã¹ãããããŸãã ãããã£ãŠã圌ã¯äžãããããœã±ããã®ãªã¹ããååŸããæºåããŒãªã³ã°ã¡ã«ããºã ã«éä¿¡ããŸãã ãŸããæºåããŒãªã³ã°ã¡ã«ããºã ã«ã¯åžžã«ãã1ã€ã®ãã©ã¡ãŒã¿ãŒããããŸãããããã¯ãŒã¯ã¢ã¯ãã£ããã£ããªãå Žåã«ãããã¯ã§ããæéã瀺ããŸãã ãããã¯æéãšããŠãæãè¿ãã¿ã€ããŒã®å¿çæéã瀺ããŸãã ãããã£ãŠãäœããã®ãããã¯ãŒã¯ã¢ã¯ãã£ããã£ããããããœã±ããã®1ã€ãI / Oã®æºåãã§ããŠããããæãè¿ãã¿ã€ããŒãèµ·åããããã¯ã解é€ããŠãå®éã«å®è¡ã®è«çãããŒãžã®å¶åŸ¡ã1ã€ãŸãã¯å¥ã®ã³ãŒã«ããã¯ã«è»¢éããã®ãåŸ ã¡ãŸãã
ããã¯ãæ瀺çãªã³ãŒã«ããã¯ã䜿çšããå調ãã«ãã¿ã¹ã¯ã®å€èŠ³ã§ãã

ããçš®ã®ããããã³ã°æäœãå®è¡ããnode.jsã®äŸ-å®éã«ã¯net.connectã ãããŒãã®äžããããã¯ãã³ããããã³ã°ã§ããããã¹ãŠãæ£åžžã§ãããã³ãŒã«ããã¯ãç»é²ããŸãã ãã¹ãŠãæåããå Žåã¯ãããè¡ãã倱æããå Žåã¯ãããè¡ããŸãã
ã³ãŒã«ããã¯ã®åé¡ã¯ãæçµçã«ãããŒãã«ãã«å€ããããšã§ããããã®åé¡ã«æ»ããŸãã
2çªç®ã®äŸã

ããã§ããå調åãã«ãã¿ã¹ã¯ãããã°ã©ã ã«è¡šç€ºãããŠããŸãããã
ããã§ãè€æ°ã®ã¹ã¬ãããèµ·åãããããããåæã«äžŠè¡ããŠããã®ãããããŸããïŒ å®éãå調ãã«ãã¿ã¹ã¯ã¯æ¬¡ã ã«ããããã³ã°æäœãå®è¡ããŸãããããã€ãã®URLãããŠã³ããŒãããŸãã ãã®urlopené¢æ°ã¯å®éã«ãããã¯ããŸãããgeventã¯ããã€ãã®ããã©ãã¯ããžãã¯ããè¡ãããããã®ãã¹ãŠã®ãããã¯ãããã¯ãŒã¯æäœã¯éããããã³ã°ãå調ãã«ãã¿ã¹ã¯ãã³ã³ããã¹ãã®åãæ¿ãã«ãªããŸã-ããã¯ãã¹ãŠè¡šç€ºããããéåžžã®å®å šã«ã·ãŒã±ã³ã·ã£ã«ãªã³ãŒãã§ããããã¹ãŠã®å éšéåžžã«å¹ççã«æ©èœããŸãã
å調åãã«ãã¿ã¹ã¯ã䜿çšããã·ã¹ãã ã®äŸïŒRedisãmemcachedïŒå®å šã«å調åã®ãã«ãã¿ã¹ã¯ã§ã¯ãããŸããããå€ãã®äººãããã ãšèããŠããŸãïŒã 圌ãã®ç¹åŸŽã¯äœã§ããããªã圌ãã¯ãããè¡ãäœè£ããããŸããïŒ ããã¯ããŒã¿ã¹ãã¬ãŒãžã§ããããã¹ãŠã®æäœããã¹ãŠã®ããŒã¿ã¯ã¡ã¢ãªå ã«ãããããããã¯ãšã³ããšåæ§ã«ãåäžã®ãªã¯ãšã¹ãã®åŠçã«è²»ããããã»ããµæéã¯éåžžã«å°ãããªããŸãã ã€ãŸã æãåçŽãªã±ãŒã¹ã§ã¯ãgetãªã¯ãšã¹ããåŠçããã«ã¯ãå éšããã·ã¥ã®ããŒãèŠã€ããããŒã¿ãããã¯ãèŠã€ããŠãããè¿ãå¿ èŠããããŸããçããšããŠãœã±ããã«æžã蟌ãã ãã§ãã ãããã£ãŠãååçãªãã«ãã¿ã¹ã¯ã¯åœŒãã«ãšã£ãŠå¹æçã§ãã
RedisãŸãã¯memcachedãI / Oã«ãã£ã¹ã¯ã䜿çšããå Žåããã¹ãŠãå®è¡ãããŠããã¯ãã§ãããI / Oã§å¯äžã®ã¹ã¬ããããããã¯ãããå Žåãããã¯ãã¹ãŠã®ã¯ã©ã€ã¢ã³ãããã®ãªã¯ãšã¹ãã®åŠçãåæ¢ãããããåçŽã«æ©èœããŸããã§ããã å®è¡ã®ã¹ã¬ããã¯1ã€ã ãã§ãããã©ãã§ããããã¯ããäœè£ã¯ãããŸããããã¹ãŠã®æäœãè¿ éã«å®è¡ããå¿ èŠããããŸãã
ããããæ°å¹Žåã®3ã4幎åã«èª°ããRedisãæãåºããšãããçš®ã®ä»®æ³ã¡ã¢ãªïŒããŒã¿ã®äžéšããã£ã¹ã¯ã«ä¿åããæ©èœïŒãäœæããããšããèè ã®è©Šã¿ããããŸããã ããã¯ä»®æ³ã¡ã¢ãªãšåŒã°ããŠããŸããã 圌ã¯ãããå®è¡ããããšããŸãããããã£ã¹ã¯I / Oãéå§ããããšããã«Redisã®å¿çæéãæ°æ¡ãçããªãããã®æå³ã倱ãããããšãæå³ããããããããæ©èœããªãããšã«ããã«æ°ä»ããŸããã
ããããå®éã«ã¯ãããã3ã€ã®ãªãã·ã§ã³ã¯ã©ããçæ³çã§ã¯ãããŸããã ç¹ã«ãæ¥ç¶ãé·æéãã³ã°ããç¶æ³ã§ã¯ãå調åãã«ãã¿ã¹ã¯ãéåžžåã€ãããçµã¿åãããããŒãžã§ã³ãæé©ã«æ©èœããŸãã ããšãã°ãWebãœã±ããã¯é·æéåç¶ããæ¥ç¶ã§ããã1æéåç¶ã§ããŸãã 1ã€ã®ããã»ã¹ãŸãã¯1ã€ã®ã¹ã¬ãããéžæããŠ1ã€ã®Webãœã±ãããåŠçãããšãäžåºŠã«1ã€ã®ããã¯ãšã³ãã§ä¿æã§ããæ¥ç¶ã®æ°ãå€§å¹ ã«å¶éãããŸãã ãŸããæ¥ç¶ã¯é·æéåç¶ãããããå€ãã®åææ¥ç¶ãç¶æããããšãéèŠã§ããäžæ¹ãåæ¥ç¶ã«ã¯ã»ãšãã©äœæ¥ããããŸããã
å調ãã«ãã¿ã¹ã¯ã®æ¬ ç¹ã¯ããã®ãããªããã°ã©ã ã1ã€ã®ããã»ããµã³ã¢ãã䜿çšã§ããªãããšã§ãã ãã¡ãããåããã·ã³äžã§ããã¯ãšã³ãã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãå®è¡ã§ããŸãããå¿ ããã䟿å©ã§ã¯ãªããæ¬ ç¹ããããããè€æ°ã®ããã»ã¹ãŸãã¯è€æ°ã®ã¹ã¬ãããå®è¡ããåããã»ã¹ãŸãã¯ã¹ã¬ããå ã§å調ãã«ãã¿ã¹ã¯ã䜿çšããããšããå§ãããŸãã ãã®ãããªçµã¿åããã«ãããäžæ¹ã§ã¯ã·ã¹ãã ã§å©çšå¯èœãªãã¹ãŠã®ããã»ããµã³ã¢ã䜿çšã§ããä»æ¹ã§ã¯ãåã ã®æ¥ç¶ãåŠçããããã«å€§ããªãªãœãŒã¹ãå²ãåœãŠãããšãªããåã³ã¢å ã§å¹ççã«äœæ¥ã§ããŸãã
2ã€ã®å žåçãªäŸã¯nginxã§ãã¯ãŒã«ãŒã®æ°ãèšå®ããŸããã¯ãŒã«ãŒã®æ°ãã·ã¹ãã å ã®ã«ãŒãã«ã®æ°ãŸã§å¢ããã®ã¯çã«ããªã£ãŠããŸãããããã¯å¥åã®ããã»ã¹ã§ãã ã¯ãŒã«ãŒå ã§ã¯ãåã¯ãŒã«ãŒã¯ãã³ããããã³ã°I / Oãšå調ãã«ãã¿ã¹ã¯ã䜿çšããŠãå€æ°ã®åææ¥ç¶ãåŠçããŸãã ã¯ãŒã«ãŒã¯ãåã ã®ããã»ããµéã§äžŠååããããã«ã®ã¿å¿ èŠã§ãã
2çªç®ã®äŸã¯memcachedã§ãããã«ã€ããŠã¯æ¢ã«åŒçšããŸããã 圌ã«ã¯ãè€æ°ã®ã¹ã¬ãããããã€ãã®OSã¹ã¬ããã§èµ·åãããªãã·ã§ã³ããããŸãã 次ã«ãè€æ°ã®ã¹ã¬ãããéå§ããããããã®å éšã§ãªã¢ã¯ã¿ãŒãå転ããŸããããã«ããããã³ããããã³ã°å ¥åºåãšå調ãã«ãã¿ã¹ã¯ãæäŸãããè€æ°ã®ã¹ã¬ããã«ããè€æ°ã®ããã»ããµã³ã¢ãå¹ççã«äœ¿çšã§ããŸãã ããŠãmemcachedã®å ±æã¡ã¢ãªã¯ãã£ãã·ã¥ã§ãããå®éã«ãã£ãã·ã¥ãæäŸããŸãã ãããã®ã¹ã¬ããã¯ãã¹ãŠãåããã£ãã·ã¥ããèªã¿åãããã³æžã蟌ã¿ãè¡ããŸãã
ããäžã€è³ªåã ç§ãã¡ã¯ãããã¯ãšã³ããã©ã®ããã«åŠçãããã«ã€ããŠåžžã«è©±ãåã£ãŠããŸãããã»ãšãã©ã®å Žåãå°ãªããšããçä¿¡ãããªã¯ãšã¹ããžã®çä¿¡HTTPæ¥ç¶ã«ã€ããŠã§ãã ããããããã¯ãšã³ãã¯çºä¿¡ãªã¯ãšã¹ããäœæããHTTPãä»ããä»ã®ãµãŒãã¹ãããŒã¿ããŒã¹ãRedisãmemcachedããã¥ãŒãªã©ã®ãµãŒãã¹æåã¢ãŒããã¯ãã£ã§ã¯ããã®ãããªãªã¯ãšã¹ããå€æ°çºçããå¯èœæ§ããããŸããããã¯åããããã¯ãŒã¯I / Oã§ããæåã«ããã«åæããããã«ãããã¯ãšã³ãã®ç¹æ§ã«åœ±é¿ãäžããŸãã
ããŒã¿ããŒã¹ã®ãã®ãã©ã€ããŒãïŒæ¡ä»¶ä»ãã§ïŒé 眮ããæ¹æ³ãšããããããå¹ççã«ããæ¹æ³ãèŠãŠã¿ãŸãããã ãŸãããã®ãããªã¢ãŒããã¯ãã£ã®æŠèŠã説æããŸãã

è€æ°ã®ãµãŒããŒããããåãµãŒããŒãããã¯ãšã³ãã®1ã€ä»¥äžã®ã³ããŒãå®è¡ããã¢ããªã±ãŒã·ã§ã³ãµãŒããŒããã®æ¥ç¶å ã§ãããããã§ã¯æ¡ä»¶ä»ãã§DBãšåŒã°ããããŒã¿ã¹ãã¬ãŒãžãååšãããšä»®å®ããŸãã æåã®è³ªåã¯ã1ã€ã®ãªã¯ãšã¹ãã§æ¥ç¶ã䜿çšãããã©ãããã€ãŸã 1åã®çä¿¡HTTPãªã¯ãšã¹ãã§ãããŒã¿ããŒã¹ãžã®æ¥ç¶ãªã©ãéããšãèšå€§ãªæéã倱ãããŸãã

åã ã®ãã§ãŒãºã«å¯Ÿå¿ããæ£æ¹åœ¢ã以äžã«ç€ºããŸãã ãããã¯çž®å°ºã©ããã«æãããŠãããããããã¯ãŒã¯ã¢ã¯ãã£ããã£ã¯ããã»ããµäžã®ã¢ã¯ãã£ããã£ãããæéãããããŸãã ã€ãŸã 1ã€ã®èŠæ±ã§æ¥ç¶ãè¡ãå Žåãæåã«æ¥ç¶ã確ç«ããéãæ¥ç¶ãéããéã«èšå€§ãªæéã倱ããŸããããšãã°ãããŒã¿ããŒã¹ã§ä»ã®ã¢ã¯ã»ã¹èš±å¯ãå¿ èŠãªå Žåãããã«å€ãã®æéã倱ããŸãã åæã«å€©æåŠçã§ãããæ¥ç¶ãäžå®ã§ããã°ãæ¯å確ç«ãããæ¥ç¶ã§è¡ã£ãããã2ã€ã®èŠæ±ã«å¯Ÿããå¿çãéåä¿¡ã§ããŸãã æ°žç¶çãªæ¥ç¶ãç¶æããæ¹ãã¯ããã«å¹ççã§ãã
2çªç®ã®è³ªåã¯ã次ã®ãªã¯ãšã¹ããéä¿¡ããåã«ããªã¯ãšã¹ãã«å¯Ÿããå¿çãåŸ ã€å¿ èŠãããã®ã¯ãªãã§ããïŒ ãªã¯ãšã¹ãéã«è«ççãªæ¥ç¶ããªããå®éããªã¯ãšã¹ãã¹ããªãŒã ãåå¥ã®ç¡é¢ä¿ãªãªã¯ãšã¹ãã§æ§æãããŠããå ŽåãåçãåŸ ããã«ããã«éä¿¡ããŠããããã¹ãŠã®åçãåŸ ã£ãŠã¿ãŸãããïŒ
ãã¡ããã§ããŸãã ããã¯ãã€ãã©ã€ã³ãšåŒã°ããŸãã

ããšãã°ãPostgreSQLã¯ãã€ãã©ã€ã³åŠçãå®è¡ã§ããŸãã
ããŒã¿ããŒã¹ããã®å¿çæéãå€§å¹ ã«ççž®ã§ãããããããã¯ãšã³ãå šäœã®å¿çæéãççž®ã§ããŸãã
ããäžã€ã ããã¯ãšã³ããšããŒã¿ããŒã¹ã®éã«ãããã·ãé 眮ã§ããŸãã

ãã®ãããªãããã«èªåŒµãããç¶æ³ãããã«æãããŠããŸããéäžã«2ã€ã®ãããã·ããããŸãã1ã€ã¯ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®ãããã¹ãã«ããããã1ã€ã¯ããŒã¿ããŒã¹ã®åã«ãããŸãã ããã¯å¿ ãããããã§ã¯ãããŸããã1ã€ã®çµµã«2ã€ã®ã±ãŒã¹ãæããŠã¿ãŸããã
äžè¬çã«ããããã·ãå¿ èŠãªã®ã¯ãªãã§ããïŒ åªããããŒã¿ããŒã¹ãã©ã€ããŒãããå Žåãã€ãŸãããã¹ãŠãå¹ççã«å®è¡ããäžå®ã®æ¥ç¶ããã€ãã©ã€ã³ãªã©ãããå Žåãäžè¬çã«èšãã°ãããã©ãŒãã³ã¹ã®èŠ³ç¹ãããããã·ã¯å¿ èŠãããŸãããããã«ãããã©ãŒãã³ã¹ã®èŠ³ç¹ããã¯æ害ã§ããå¿çæéãäœäžããŸãã
äžæ¹ã貧匱ãªããŒã¿ããŒã¹ãã©ã€ããŒã䜿çšããŠããå Žåãããè³¢ããããšãã°ãã€ãã©ã€ã³åŠçãæ°žç¶çãªæ¥ç¶ãè¡ããããã·ã䜿çšãããšãå¿çæéãççž®ã§ããŸãã
第äžã«ããããã·ã¯ä»ã®å€ãã®çšéã«ã䜿çšã§ããŸããããšãã°ãmemcachedã§ããŒã¿ããŒã¹ãžã®åäžã®ãšã³ããªãã€ã³ããäœæã§ãããããã·ã䜿çšãããšãã·ã£ãŒãã£ã³ã°ãåæ§æãã¢ããªã±ãŒã·ã§ã³ãªãã§åãæ¿ããããšãã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãããã·ãµãŒããŒã§åäœãããã®èåŸã«ãããã®ãèªèããããããã·ãä»»æã«åæ§æã§ããŸãã
ãã ããå¿ èŠãªãããã·ãµãŒããŒããããŸãã ããšãã°ãPostgreSQLã䜿çšããŠããå ŽåãPgBouncerãå®è¡ããåã«å¿ èŠãªãã¹ãŠã®ç®æãèªãããšã§ãããªãã®äººçã¯ãã£ãšè¯ããªããŸãã ãªãã§ïŒ ãã®çç±ã¯ç°¡åã§ã-ãã§ã«è¿°ã¹ãããã«ãPostgreSQLã¯åæ¥ç¶ãåŠçããããã®å¥åã®ããã»ã¹ãèµ·åããŸãããã©ãŒã¯ã¯éåžžã«é«äŸ¡ãªæäœã§ãã å€ãã®ããã»ã¹ãåæ¥ç¶ã®å€ãã®ã€ã³ã¹ã¿ã³ã¹ãä¿æããã®ã«äžå©ã§äžäŸ¿ã§ãããŸããPostgreSQLã®åã«ãããããã·ã«ããããã®ããžãã¹ãæé©åã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®æ°ã«é¢ä¿ãªããå¿ èŠãªæ°ã®æ¥ç¶ã䜿çšããããããPostgreSQLãžã®ããå°ãªãæ¥ç¶ïŒçŽ100ïŒã«ãããããŸãã
ãµãŒãã¹æåã®ã¢ãŒããã¯ãã£ã䜿çšããŠããå ŽåããããŸã§ã«èª¬æãããã¹ãŠã®åé¡ã«ç¹å®ã®ä¿æ°Kãæããããããå€ãã®ãããã¯ãŒã¯ãžã®åžæããããåãã¯ã©ã€ã¢ã³ããªã¯ãšã¹ãã«çããããã«ããã«ãªã¯ãšã¹ããè¡ãå¿ èŠããããŸãããã®ããžãã¹ãããå¹ççã«å®è£ ã§ããã»ã©ãæçµçã«ããã¯ãšã³ãã®å¹æãé«ãŸããŸãã
å®äžç
å ±åæžã®ç§ãæããŠããéšåã«è¿ã¥ããŠããã®ã§ãè ã£ãããããä»ã®æªãæç©ãç§ã®äžã«é£ã³èŸŒãŸãªãããã«ãã«ã¡ãããççšããŸãã

ãæ°ã«å ¥ãã®ããã°ã©ãã³ã°èšèªããã«ãã¿ã¹ã¯ããããã¯ãŒã¯I / Oãã©ã®ããã«é 眮ãããŠãããããããããäœãåŸãããšãã§ãããã«ã€ããŠã話ããŸãã
ãããã£ãŠã JavaScriptã§èšè¿°ããŠããå Žå ã JavaScriptã¯ãWebã¯ãŒã«ãŒãé€ããŠã·ã³ã°ã«ã¹ã¬ããã§ãããå€ç«ãããšã³ãã£ãã£ã§ãã èšç®ã¢ãã«ã®èŠ³ç¹ããã¯ã·ã³ã°ã«ã¹ã¬ããã§ããããããã¯ãããªãéåæI / Oããããã³ãŒã«ããã¯ãªã©ã§ã¿ã€ããŒãç»é²ããç¹å®ã®ãªã¢ã¯ã¿ãŒããããŸãã äœãããã«ããŠããJavaScriptã³ãŒããæžãã ãã§ã¯ãã³ãŒã«ããã¯ãã麺ãã§ããŠããŸããŸãã 幞ããªããšã«ãæè¿JavaScriptã®äžçã¯DeferredãPromiseãªã©ã®ããšãåŠã³ããããã¯ãŒã«ã§ãããç©æ¥µçã«å®è£ ãããŠããããšãçºèŠããŸããã ããã¯äžçš®ã®æœè±¡åã§ãããã³ãŒã«ããã¯ãšæ瀺çã«å調ãã«ãã¿ã¹ã¯ãè¡ãããã°ã©ãã³ã°èšèªã§åœ¹ç«ã¡ãŸããããã«ããããã®ã麺ãã解ãæŸã¡ãäžè²«æ§ãé«ããããšãã§ããŸãã é 延ãŸãã¯çŽæã¯ãé 延çµæã®æŠå¿µã§ãã çµæãå°çãããšãã«çµæã空ã®ãããã¯ã«æ»ãããšãçŽæãããŠããŸãã ãã®ç©ºã®ãããã¯ã§ããšã©ãŒãŸãã¯æåããç¶æ³ã®ãã³ãã©ãŒãç»é²ãããã§ãŒã³ã«é 眮ããPromiseãå¥ã®Promiseã«æ¥ç¶ããå®éãéåžžã®åæçãªãã®ãšãŸã£ããåãããã°ã©ãã³ã°ãã¿ãŒã³ãã·ãã¥ã¬ãŒããã人çãå€§å¹ ã«ç°¡çŽ åã§ããŸãã
PHP ãã«ãã¹ã¬ããå®è¡ã¢ãŒããæ£åŒã«ãµããŒãããŠããŸãããå®éã«ã¯ããã€ãã®æŽå²çãªçç±ã«ããæ©èœããŸããã ã»ãšãã©ã®å ŽåãPHPãå®è¡ããŠããå Žåã®é倧ãªæ¬ ç¹ã¯ãçä¿¡èŠæ±ããšã«ãã¹ãŠãã¯ãªã¢ããæåããããçŽãããšã§ãã ãããã£ãŠãããããçš®é¡ã®PHPã¢ã¯ã»ã©ã¬ãŒã¿ããã£ãã·ã¥ãªã©ããããŸãã ãªã© ã»ãšãã©ã®å Žåãããããããããã¯ãããI / Oå ã§ã®ãã«ãããã»ã¹ã¯ãšãªã®å®è¡ãããšãã°åå¥ã®ããããããã®åœ¢ã§ã®ããŒã¿ããŒã¹ãžã®æ°žç¶çãªæ¥ç¶ãªã©ãåã ã®ãªã¯ãšã¹ãã®åŠçéã§æç¶ã§ããäžçš®ã®ç¶æ ãªã©ã§ãã ãªã©
Ruby on Railsã¯ãäžçã«ãã倧ããªåœ±é¿ãäžãããã®ã§ãã Ruby 1.9以åã§ã¯ãç§ãééã£ãŠããªããã°ãRubyå ã®ã¹ã¬ããã¯ã°ãªãŒã³ã¹ã¬ããã§ããã å®éã«ã¯å調çãªãã«ãã¿ã¹ã¯ã§ããã ãããã¯æ£çŽãªOSã¹ã¬ããã§ãã ããŸããŸãªãªãã·ã§ã³ããããŸãã æãåºæ¬çãªã®ã¯ããã«ãããã»ã¹ãšå ¥åºåã®ãããã¯ã§ãã Twisted Pythonãã¬ãŒã ã¯ãŒã¯ããå»æ¢ãããEventMachineãã¬ãŒã ã¯ãŒã¯ã¯ãå調çãªãã«ãã¿ã¹ã¯ãå¯èœã«ããŸãã é·æãšçæããããEventMachineã䜿çšããå®è£ ããããŸãã
PythonããããŸãã Pythonã¯ããããããªãã·ã§ã³ãèšè¿°ã§ããããšãå¬ããæããŸãã ãã«ãããã»ã¹ãµãŒããŒãäœæãããããã«ãã¹ã¬ããåãããã§ããŸããå調ãã«ãã¿ã¹ã¯ãã³ãŒã«ããã¯ããŸãã¯ã°ãªãŒã³ã¹ã¬ããã䜿çšã§ããŸãã ãã¹ãŠãããŸããŸãªãªãã·ã§ã³ãšçµã¿åããã§å©çšã§ããŸãããååãšããŠãã¹ãŠãåã³éå±ã§ããã¹ãŠãåãã§ãã
Javaã«ã¯ç¬èªã®ä»®æ³ãã·ã³ããããããã«å¿ããŠãJVMäžã§å®è¡ããããã¹ãŠã®èšèªãOSã¹ã¬ãããé·ãé䜿çšãããŠããŸããã ããããã³ã°ããã³ãã³ããããã³ã°I / Oãå®è¡ããæ©èœããããä»ã®äŒæ¥ã®äžçã®ããã«ãéäžã§åºå·ã§ãããã¬ãŒã ã¯ãŒã¯ããããç§ã«ãšã£ãŠã¯ãã®å šäœãæœè±¡åããŸãã ç§ã¯æ°ã«ããŸãããç§ã¯åœŒã«äœããã¹ãããèšã£ãã ãã§ãç§ã®ä»äºã¯äœããäžçªäžã«æžãããšã§ãã
.NETããããŸã ãããã¯ãã¹ãŠåãã§ã-OSã¹ã¬ãããªã©ãç¹å®ã®äœè«ã§ãããäœããã®æ¹æ³ã§DeferredãŸãã¯Promiseã«äŒŒãéåæ/åŸ æ©èšèªæ§é ããããŸãã ãªã軜ãã®ã§ããïŒ ãã®åã«ããã¹ãŠãéåžžã«åãã§æ²ããã§ãã
æ¯èŒçæè¿ç»å ŽããGoãããã®ã§ãæåã¯è¿œè·¡è ããé¢ããŠããã«é¢çœãããšãããããšãã§ããŸããã Goã«ã¯ãŽã«ãŒãã³ããããŸããããã¯æ¬è³ªçã«ç·ã®ã¹ã¬ããã§ãã ãããã¯OSã¹ã¬ããã§ã¯ãããŸããããäžæ¹ã§ãå éšå®è¡ã¡ã«ããºã ã¯ããŽã«ãŒãã³ãããŸããè€æ°ã®OSã¹ã¬ãããéå§ã§ãããšããäºå®ã«åºã¥ããŠããŸãã å調çãªãã«ãã¿ã¹ã¯ãšãã«ãã¹ã¬ããã®çµã¿åããã§ãã ããã³ãããã®äžãã«ã¯ãåžžã«ãã³ããããã³ã°I / OããããŸãã ç§ã®ãŽã«ãã³ããããŸãã§ãããããããã¯ãããŠãããã®ããã«æäœããŸãããå®éã«ã¯ãŽã«ãŒãã³éã«åãæ¿ããããããããã¯ããããšããã«å¥ã®ãŽã«ãã³ãå®è¡ãããŸãã Goã«ã¯ä»ã«ãå€ãã®èå³æ·±ããã®ããããŸãããã£ãã«ã競åããã°ã©ãã³ã°ã®ç¬èªã®æŠå¿µããããŸãããããã«ã€ããŠã¯è©±ããŠããŸããã
Goãããå€ãErlangããããŸãããŸããErlangããã»ã¹ã«ã¯ãããã競åããã°ã©ãã³ã°ã®ç¬èªã®ã¢ãã«ããããGoã«ãŒãã³Goãšã¯ç°ãªããè«ççã«ã¯å®éã®ããã»ã¹ã«äŒŒãŠãããšããç¹ã§ãèå³æ·±ãã§ããã€ãŸã ãããã¯äºãã«å®å šã«åé¢ãããŠããããŽã«ãŒãã³ã¯å ±éã®ã¢ãã¬ã¹ç©ºéã§åäœãããã¹ãŠã®ã¡ã¢ãªãåç §ããŸãã å®è£ ã«é¢ããŠã¯ããããã¯åããã³ããããã³ã°I / Oãå調ãã«ãã¿ã¹ã¯ãããã³å©çšå¯èœãªãã¹ãŠã®ããã»ããµã³ã¢ã䜿çšããããã®OSã¹ã¬ããã®äœ¿çšã§ãã
GoãšErlangãæåŸã«ä»ããã®ã¯ãªãã§ããããªããã£ãšé¢çœãã®ã§ããïŒ åºæ¬çã«ãå¹ççãªãããã¯ãŒã¯I / Oãšå¹ççãªãã«ãã¿ã¹ã¯ãè¡ãããã«ããã¬ãŒã ã¯ãŒã¯å šäœããã§ã«èšèªã«çµã¿èŸŒãŸããŠããããã§ãã , , , . , http- Go, Go, . , , , .
â , - , .
: libevent. , ? , - , ?
: - . , â . , , , . libevent libev, . - â . , libevent- - , libev-e â , « » - . - , .
: PHP : , , 2 -. , -, , , , «» â , , , ?
: , , , PHP? , - . - , . , - ..
: : , , , - , . - , ? . ? ⊠proxy - , ?
: Proxy . , . â , . framework , . , . â . â , , . , . , - , , , . .