CGI¥¹¥¯¥ê¥×¥È¤Ï²¿¤Ç½ñ¤¯¡©
FastCGI¤Ç10Çܹ⮲½

2003ǯ2·î15Æü Matchan

CGI¤Ï²¿¸ì¤Ç½ñ¤¯¤«¡©

web¤Ç¥¢¥¯¥Æ¥£¥Ö¤Ê¥Ú¡¼¥¸¡¢¥À¥¤¥Ê¥ß¥Ã¥¯¤Ê¥Ú¡¼¥¸¤òºî¤ëÉáÄ̤ÎÊýË¡¤Ï¡¢CGI (Common Gateway Interface)¤ò»È¤¦¤³¤È¤Ç¤¹¡£ CGI¤Ï¡¢¥æ¡¼¥¶¡¼¡Ê¥Ö¥é¥¦¥¶¡Ë¤«¤é¤Î¥ê¥¯¥¨¥¹¥È¤Ë±þ¤¸¤Æweb server ¾å¤ÇÁö¤ë¥×¥í¥°¥é¥à¤Ç¡¢·ë²Ì¤È¤·¤Æhtml¤ä²èÁü¥Õ¥¡¥¤¥ë¤òÀ¸À®¤·¡¢ web server¤¬¤½¤ì¤ò¥æ¡¼¥¶¡¼¤Î¥Ö¥é¥¦¥¶¤ËÆϤ±¤Þ¤¹¡£¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¸¡º÷·ë²Ì¤òɽ¼¨¤¹¤ë¥Ú¡¼¥¸¤Ê¤É¤Ï¡¢¤Þ¤Á¤¬¤¤¤Ê¤¯¥µ¡¼¥Ð¡¼Â¦¤ÇCGI¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

CGI¤Îµ­½Ò¤Ë¤Ï¡¢perl¤äphp¤Ê¤É¤Î¥¤¥ó¥¿¥×¥ê¥¿¸À¸ì¤¬»È¤ï¤ì¤ë¤³¤È¤¬Â¿¤¤¤è¤¦¤Ç¤¹¡£ sh, bash¤Ê¤É¤Î¥·¥§¥ë¸À¸ì¤â¿¾¯»È¤ï¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¤¬¡¢C¤Î¤è¤¦¤Ê¥³¥ó¥Ñ¥¤¥é·¿¸À¸ì¤Çµ­½Ò¤µ¤ì¤ë¤³¤È¤Ï¤Û¤È¤ó¤É¤¢¤ê¤Þ¤»¤ó¡£¤³¤ì¤é¤Î¿·¶½¸À¸ì¡Ê¡©¡Ë¤¬Îɤ¯»È¤ï¤ì¤ëÍýͳ¤Ï¡¢­¡.Èæ³ÓŪ½é´ü¤«¤é CGI¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤¬ÍÑ°Õ¤µ¤ì¤¿¤³¤È,¡¡­¢.postgres¤Ê¤É¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ø¤ÎÀܳ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤¬ ÍÑ°Õ¤µ¤ì¤¿¤³¤È,¤ÎÆó¤Ä¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹. ¡Ê3ÈÖÌܤ˥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¤Ç¤¢¤Ã¤¿¤³¤È¤òÉÕ¤±²Ã¤¨¤¿¤¯¤Ê¤ê¤Þ¤¹¤¬¡Ë¡£ Perl¤äPhp¤Ë¤Ï¡¢Â¿¤¯¤Îµ¡Ç½¤¬¥é¥¤¥Ö¥é¥ê¤È¤·¤ÆÁȤ߹þ¤Þ¤ì¤Þ¤¹¤«¤é¡¢²¿¤«¤ò¤ä¤ë¤È¤­¡¢ ¤¿¤È¤¨¤Ðñ¸ì¤Î¿ô¤ò¿ô¤¨¤ë¤Î¤Ë¡¢¤¤¤Á¤¤¤Á¥×¥í¥»¥¹¤òΩ¤Á¾å¤²¤ë¤è¤¦¤Ê¤³¤È¤Ï¤Ê¤¤¤Î¤Ç¡¢ £ó£è¤è¤ê¤Ï¤º¤Ã¤È¸úΨ¤¬Îɤ¯¡¢Ê¸»úÎó½èÍý¤âÆÀ°Õ¤Ç¤¹¡£ ¤Ê¤¼¥³¥ó¥Ñ¥¤¥é·¿¸À¸ì¤¬»È¤ï¤ì¤Ê¤¤¤«¤È¸À¤¨¤Ð¡¢C¤Ê¤É¤Ï¤Ê¤«¤Ê¤«°ìÈ̤οͤˤϼê¤ò½Ð¤·¤Å¤é¤¤¤«¤é¡¢ ½èÍý»þ´Ö¤Ïµ¤¤Ë¤·¤Ê¤¤¤«¤é¡Ê¤À¤Ã¤Æ»È¤¦¤Î¤Ï¼«Ê¬¤¸¤ã¤Ê¤¯¤Æ¾¤Î¿Í¤À¤â¤Î¡©¡Ë¡¢¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£ C¤Ç¤Ï³«È¯¤Ë¼ê´Ö¤¬¤«¤«¤ë¤Î¤Ï³Î¤«¤Ç¤¹¤¬¡¢ ¡ÖCGI¤Î½èÍý»þ´Ö¤Ïµ¤¤Ë¤·¤Ê¤¯¤ÆÎɤ¤¡¢¥·¥§¥ë¤è¤ê®¤¤¤«¤é¤¤¤¤¤¸¤ã¤Ê¤¤¤Î¡×¡¢ ¤È¤¤¤¦¤Î¤Ï´Ö°ã¤Ã¤Æ¤¤¤ë¤Î¤Ç¤Ï¤Ê¤¤¤«¡¢¤È¤¤¤¦¤Î¤¬ËܹƤÎ1ÈÖÌܤμñ»Ý¤Ç¤¹¡£

CGI¤ËÍ¿¤¨¤é¤ì¤¿½èÍý»þ´Ö

½èÍý»þ´Ö¤Ïµ¤¤Ë¤·¤Ê¤¯¤Æ¤è¤¤¤Î¤«¡©CGI¤ËÍ¿¤¨¤é¤ì¤¿½èÍý»þ´Ö¤Ï¡¢¥æ¡¼¥¶¡¼¤¬¥Ü¥¿¥ó¤ä¥ê¥ó¥¯¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤«¤é¼¡¤Î²èÌ̤¬É½¼¨¤µ¤ì¤ë¤Þ¤Ç¤Î¿ôÉ䬸ÂÅ٤Ǥ¹¡£¤â¤·¤½¤Î¥µ¥¤¥È¤¬¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤Î¿Íµ¤¥µ¥¤¥È¤Ç¡¢°ìÉä˰ì²ó¤â¤Î¥¢¥¯¥»¥¹¤¬¤¢¤ë¤Ê¤é¤Ð¡¢1ÉðÊÆâ¤Ç½ª¤ï¤é¤»¤Ê¤¤¤È¥µ¡¼¥Ð¡¼¤Ï¥Ñ¥ó¥¯¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£ÄÌ¿®»þ´Ö¤â¹Íθ¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¥Í¥Ã¥È¥ï¡¼¥¯¤Îlatency¤È¤·¤Æ1É䯤餤¤ò¡¢Àè¤Û¤É¤ÎµöÍƸÂÅ٤Ȥ·¤¿¿ôÉ䫤麹¤·°ú¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£¤µ¤é¤Ë°ì¤Ä¤Î²èÌ̤¬°ì¤Ä¤ÎCGI¤òÁö¤é¤»¤Æ´°·ë¤¹¤ë¤È¤Ï¸Â¤ê¤Þ¤»¤ó¡£¤½¤Î¤è¤¤Î㤬¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼¤Ç¤·¤ç¤¦¡£¥Õ¥ì¡¼¥à¤ò»È¤Ã¤¿¥Ú¡¼¥¸¤À¤È³Æ¡¹¤Î¥Õ¥ì¡¼¥à¤¬CGI¤È¤¤¤¦¤³¤È¤â¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£

¤È¤¤¤¦°ìÈÌŪ¤Ê¹Í¤¨Êý¤¬²Äǽ¤Ç¤·¤ç¤¦¡£¤½¤³¤Ç»×¤¤Åö¤¿¤ë¤Î¤¬¡¢1990ǯÂåÁ°È¾¤Î¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤ÎóÕÌÀ´ü¤Î¤³¤È¡£Åö»þ¡¢¤³¤ÎÆó¤Ä¤Î¥·¥Ê¥ê¥ª¤Î¤¦¤Á¡¢À¤³¦Ãæ¤Î¤Û¤È¤ó¤É¤Î¥µ¥¤¥È¡Ê¤È¤¤¤Ã¤Æ¤â¿ô¤Ïº£¤È¤ÏÈæ¤Ù¤â¤Î¤Ë¤Ê¤é¤Ê¤¤¤Ç¤·¤ç¤¦¤¬¡Ë¤¬¡¢Âè2¤Î¤Î¥·¥Ê¥ê¥ª¤òºÎÍѤ¹¤ë´Ä¶­¤Ë¤¢¤Ã¤¿¤³¤È¤Ç¤·¤ç¤¦¡£¥¢¥¯¥»¥¹¤ÏÌÇ¿¤ËÍè¤Ê¤¤¡¢ÄÌ¿®Â®ÅÙ¤ÏÃÙ¤¤¡¢CGI¤Ê¤ó¤Æ°ì¤Ä¤À¤±¡¢¤À¤Ã¤¿¤éCGI¤ÏPerl¤Ç½½Ê¬¤µ¡¢¤È¤¤¤¦¤³¤È¤Ç¤Ï¤Ê¤«¤Ã¤¿¤Ç¤·¤ç¤¦¤«¡©¤½¤·¤Æ¤½¤ì¤¬¡¢¤½¤Î¸å¤âCGI¤ÏPerl¤Ç½ñ¤¯¤â¤Î¡¢¤È¿®¤¸¹þ¤Þ¤ì¤Æ狼¤Î¥³¡¼¥É¤ò¼Ú¤ê¤Æ¤­¤Æ¤Ï¼ê¤òÆþ¤ì¤Æ¡¢¤È¤¤¤¦¤Õ¤¦¤Ë¤Ï¤Ó¤³¤Ã¤ÆÍ褿¤Î¤Ç¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¤«¡©

Perl¤Ï®¤¤¤«¤éÂç¾æÉס©

¤µ¤Æ¡¢¼¡¤ËÌäÂê¤Ë¤¹¤ë¤Î¤Ï¡¢Perl¤ÎCGI¥×¥í¥°¥é¥à¤¬Î©¤Á¾å¤¬¤ë²áÄø¤Ç¤¹¡£web server¤Ï¡¢http¤Î¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¤ÆCGI¤òµ¯Æ°¤·¤Þ¤¹¤¬¡¢¤½¤ì¤Ï¡¢Perl¤Î¥¤¥ó¥¿¥×¥ê¥¿¤òµ¯Æ°¤·¡¢ Perl¤¬CGI¥×¥í¥°¥é¥à¡Ê¥¹¥¯¥ê¥×¥È¡Ë¤òÆɤ߹þ¤ó¤Ç¼Â¹Ô¤·¡¢·ë²Ì¤òhtml¥É¥­¥å¥á¥ó¥È¤È¤·¤Æweb server¤ËÁ÷¤ë¡¢¤È¤¤¤¦¼ê½ç¤Ë¤Ê¤ê¤Þ¤¹¡£ ¾å¤Ç½Ò¤Ù¤¿¤è¤¦¤Ë¡¢°ì¤Ä¤ÎCGI¤Ï0.1¡Á1É䯤餤¤ÇÁö¤êÈ´¤±¤Æ¤·¤Þ¤¤¤Þ¤¹¤¬¡¢ ¤½¤¦¤¤¤¦Ã»»þ´Ö¤ÎÃæ¤Ç¤Ï¡¢µ¯Æ°¤Ë´Ø¤ï¤ë»þ´Ö¤¬ÁêÂÐŪ¤ËÂ礭¤ÊÈæ½Å¤òÀê¤á¤ë¤Î¤Ç¤¹¡£

²¼¤Îɽ¤Ï¡¢Perl, PHP, sh ¤È¤¤¤¦ÉáÄ̤ÎCGI scripting¤Ë»È¤ï¤ì¤½¤¦¤Ê ¥¤¥ó¥¿¥×¥ê¥¿¸À¸ì¤Î¥Æ¥­¥¹¥È¥µ¥¤¥º¡Ê¥×¥í¥°¥é¥à¥³¡¼¥É¤Î¥µ¥¤¥º¡Ë¡¢ ²¾ÁÛ¥á¥â¥ê¡¢¾ïÃó¥á¥â¥ê¡¢¤ò¼¨¤·¤Þ¤¹¡£²¿¤â½èÍý¤ò¤·¤Ê¤¤¤È¤­¤Ç¤¹¤«¤é¡¢ ¤³¤ì¤é¤¬ºÇ¾®ÃͤǤ¹¡£ ¤³¤ì¤é¤Î¥á¥â¥ê¤¬Â礭¤¯¤Ê¤ë¤Èµ¯Æ°¤âÃÙ¤¯¤Ê¤ë¤À¤í¤¦¤È¿ä¬¤µ¤ì¤Þ¤¹¡£

¸À¸ìtext¥µ¥¤¥º ²¾ÁÛ¥á¥â¥ê ¾ïÃó¥á¥â¥ê
Perl 0.7MB 3.8MB 1 MB
PHP 1 MB 8.2MB 2.8MB
sh 0.5 MB 1.4MB 1.4MB

¤³¤Î¥á¥â¥ê¤Î³ä¤êÅö¤Æ¤ÈÆɤ߹þ¤ß¤ËÍפ¹¤ë»þ´Ö¡¢¥é¥¤¥Ö¥é¥ê¤Ê¤É¤È¥ê¥ó¥¯¤¹¤ë»þ´Ö¡¢ ¥á¥â¥ê¾å¤ËPerl¤ÎËÝÌõ¼Â¹Ô¤ËɬÍפʹ½Â¤¤òºîÀ®¤¹¤ë»þ´Ö¡¢¤Ê¤É¤¬¡¢Perl¤Îµ¯Æ°¤ËÍפ¹¤ë»þ´Ö¤ÎÃæ¿È¤Ç¤¹¡£ Perl¤¬Áö¤ê»Ï¤á¤ë¤È¡¢CGI¼Â¹Ô¤ËɬÍפÊPerl¥é¥¤¥Ö¥é¥ê¤òÆɤ߹þ¤à¡¢ »ØÄꤵ¤ì¤¿CGI¥×¥í¥°¥é¥à¤òÆɤ߹þ¤à¡¢¤³¤È¤¬É¬Íפǡ¢ ¤³¤ì¤Ç¤ä¤Ã¤ÈCGI¤ÎËÜÂΤνèÍý¤¬»Ï¤á¤é¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£ ;Ã̤ʤ¬¤é¡¢¤½¤ÎËÜÂΤ¬¡¢º£Æü¤ÎÆüÉÕ¤òɽ¼¨¤¹¤ë¡¢¤È¤¤¤¦¤è¤¦¤Ê¤Ï¤«¤Ê¤¤¥×¥í¥°¥é¥à¤À¤È¡¢ µ¯Æ°¤ËÍפ·¤¿½àÈ÷¤ÎÊý¤¬Â¿¤¯¤Î½èÍý»þ´Ö¤òÍפ¹¤ë¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£ ¤½¤ì¤Ç¡¢SSI (server side include)¤È¤¤¤¦¡¢¤µ¤µ¤¤¤Ê¥×¥í¥°¥é¥à¤Ïweb server¤ÎÃæ¤Ç¤¹¤Þ¤»¤ëÊý¼°¤â¼ÂÍѲ½¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

Hello World¤ò½ÐÎϤ·¤Æ½ª¤ï¤ë¥×¥í¥°¥é¥à¤òPerl, PHP, C, Lisp¤Î4¼ïÎà¤Î¸À¸ì¤ÇÍÑ°Õ¤·¤Þ¤·¤¿¡£ ¿Æ¤È¤Ê¤ë¥×¥í¥»¥¹¤«¤é¡¢¤³¤é¤é¤Î¥×¥í¥°¥é¥à¤Î¤½¤ì¤¾¤ì¤òfork and exec¤·¡¢·ë²Ì¤òpipe¤ò»È¤Ã¤Æread¤·¤Æ½ª¤ï¤ë¥µ¥¤¥¯¥ë¤ò100-1000²ó·«¤êÊÖ¤·¡¢elapsed time¤ò¬Äꤷ¤¿·ë²Ì¤¬²¼É½¤Ç¤¹¡£¥×¥í¥»¥Ã¥µ¤ÏEPIA 533MHz¤Ç¤¹¡£

ɽ1¡¡Perl, Php, C, Lisp ¤Î¶õ¥×¥í¥°¥é¥à¤Îµ¯Æ°¤ËÍפ¹¤ë»þ´Ö¡Ê¥ß¥êÉáË
½èÍý Perl PHP C Lisp
²¾ÁÛ¥á¥â¥êÎÌ 3.8MB 8.2MB 5.6MB
¾ïÃó¥á¥â¥êÎÌ 1.0MB 2.8MB 2.6MB
£± ¥¹¥¯¥ê¥×¥È¸À¸ì½èÍý·Ï¤òΩ¤Á¾å¤²¤ë
(¥á¥â¥ê¤ò³ä¤êÅö¤Ætext¤òÆɤ߹þ¤à,ld.so¤¬¥ê¥ó¥¯¤¹¤ë, ½èÍý·Ï¤Î½é´ü²½)
42ms 140-150ms 7ms 270ms
2 CGI¤ËɬÍפʥ饤¥Ö¥é¥ê¡¢CGI¥×¥í¥°¥é¥à¤òÆɤ߹þ¤à
3 CGIËÜÂΤνèÍý¤ò¤·¤Æ.HTMLÅù¤òÀ¸À®¤¹¤ë

±¦Ã¼¤ËLisp¤Î¥Ç¡¼¥¿¤òºÜ¤»¤Æ¤¢¤ê¤Þ¤¹¡£Ëܲ»¤ò¸À¤¦¤È¡¢Lisp¤ÇCGI¤ò½ñ¤­¤¿¤¤¤Î¤À¤¬¡¢ ¤É¤¦¤âΩ¤Á¾å¤¬¤ê¤¬ÃÙ¤¯¤Æ¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹°­¤¤¤Î¤Ç¡¢Â®¤¯¤Ê¤ëÊýË¡¤ò¹Í¤¨¤è¤¦¤È¸À¤¦¤³¤È¤Ê¤Î¤Ç¤¹¡£ lisp¤È¸À¤¦¤È¡¢³ç¸Ì¤À¤é¤±¤Ç½¹¤¤¡¢car, cdr, cons¡¡¤Ê¤ó¤Æ°ÕÌ£ÉÔÌÀ¤Ç¸Å¤¯¤µ¤¤¡¢¤È¤¤¤¦¿Í¤¬É¬¤º¤¤¤Þ¤¹¡£ »ä¤Ë¸À¤ï¤»¤ë¤È¡¢Perl¤äsh¤Î$ÊÑ¿ô¤ÎÊý¤¬¤è¤Û¤É³ç¸Ì°­¤¯¡¢ @ÊÑ¿ô¤ä%ÊÑ¿ô¤Ë»ê¤Ã¤Æ¤Ï¡¢Ì¤äƤ·¤Þ¤¤¤Þ¤¹¡£¸À¤¤Á褤¤Ï¤ä¤á¤Þ¤·¤ç¤¦:-)

£²¤ÎCGIÍѥ饤¥Ö¥é¥ê¤ÎÆɤ߹þ¤ß¤äCGI¥×¥í¥°¥é¥à¤Î¥í¡¼¥É¤ËÍפ¹¤ë»þ´Ö¤Ï¼Â¬¤Ç¤­¤Æ¤¤¤Þ¤»¤ó¤¬¡¢ ¿ô¥ß¥êÉäǤϤʤ¤¤«¤È¿ä¬¤·¤Þ¤¹¡£

¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼CGI¤ÎÀ­Ç½

CGI¤Ï¤¤¤í¤¤¤í¤Ê¤³¤È¤¬¤Ç¤­¤ë¤Î¤Ç¤¹¤¬¡¢¤è¤¯»È¤ï¤ì¤ëCGI¤È¤¤¤¦¤Î¤Ï¤´¤¯¾¯¿ô¤Ç¤¹¡£¾¯¿ô¤À¤«¤é¤³¤½¡¢¥×¥í¥Ð¥¤¥À¤Ïŵ·¿Åª¤ÊCGI¤ò¤¤¤¯¤Ä¤«ÍѰդǤ­¤Æ¤¤¤ë¤ï¤±¤Ç¤¹¡£Ãæ¤Ç¤âºÇ¤â¤è¤¯»È¤ï¤ì¤ë¤Î¤¬¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼¤Ç¤¹¡£¥µ¡¼¥Ð¡¼¤Ë¥«¥¦¥ó¥È¤ò³ÊǼ¤·¤Æ¤ª¤¯¥Õ¥¡¥¤¥ë¤¬¤¢¤Ã¤Æ¡¢¥¢¥¯¥»¥¹¤¬¤¢¤ë¤´¤È¤Ë¤½¤ì¤òincrement¤·¡¢·ë²Ì¤ògif¤Î³¨¤Ë¤·¤Æ½ÐÎϤ·¤Þ¤¹¡£°ìÈÖ»þ´Ö¤¬¤«¤«¤ë¤Î¤Ï¡¢³Æ·å¤Îgif¤Î³¨¤ò¤Ä¤Ê¤¤¤Ç°ì¤Ä¤Îgif file¤Ë¤¹¤ë¤È¤³¤í¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£Perl¤Ç½ñ¤¤¤¿¡¢gifcat.pl¤È¤¤¤¦¥×¥í¥°¥é¥à¤¬¤è¤¯¤Ç¤­¤Æ¤¤¤Æ¡¢¤¤¤í¤¤¤í¤Ê¤È¤³¤í¤Ç»È¤ï¤ì¤Æ¤¤¤ë¤è¤¦¤Ç¤¹¡£¤³¤ÎPerl¤Î´Ø¿ô¤Î¼Â¹Ô®ÅÙ¤ò¬¤ê¤¿¤¤¤Î¤Ç¤¹¤¬¡¢»ä¤ÏPerl»È¤¤¤Ç¤Ï¤Ê¤¤¤Î¤Ç¡¢»þ´Ö¬Äê´Ø¿ô¤Ê¤É¤òÃΤê¤Þ¤»¤ó¡£¤È¤Ë¤«¤¯¡¢¤È¤Û¤Û¤µ¤ó¤Îgif²òÀϤΥڡ¼¥¸¤ò»²¹Í¤Ë¡¢Lisp¤Çgifcat¤ò½ñ¤¤¤Æ¤ß¤Þ¤·¤¿¡£6·å¤Îgifcat¤ËÍפ¹¤ë»þ´Ö¤Ï¡¢¥¤¥ó¥¿¥×¥ê¥¿¤Ç20ms¡¢¥³¥ó¥Ñ¥¤¥ë¤·¤¿¥³¡¼¥É¤Ç¤Ï3ms¤Û¤É¤Ç¤·¤¿¡£¤³¤Î»þ´Ö¤È¡¢É½1¤Î»þ´Ö¤òÈæ¤Ù¤ë¤È¡¢µ¯Æ°¤ËÍפ¹¤ë»þ´Ö¤ÎÊý¤¬¤º¤Ã¤ÈÂ礭¤¤¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£

µ¯Æ°»þ´Ö¤ò¤Ê¤¯¤¹-- mod_perl¤ÈFastCGI

¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼¤Î¤è¤¦¤Ê·Ú¤¤CGI½èÍý¤Ë¤ª¤¤¤Æ¤Ï¡¢CGIËÜÂΤνèÍý¤è¤ê¤âµ¯Æ°»þ´Ö¤¬»ÙÇÛŪ¤Ë¤Ê¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤·¤¿¡£CGI¤Îµ¯Æ°»þ´Ö¤¬web server¤Ë¤È¤Ã¤ÆÂ礭¤ÊÉé²Ù¤Ë¤Ê¤ë¤³¤È¤Ï¡¢¤º¤Ã¤È°ÊÁ°¤«¤é¤è¤¯Ç§¼±¤µ¤ì¤Æ¤¤¤Æ¡¢¤¤¤í¤¤¤í¤Ê²ò·èºö¤¬Ä󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£Apache¥µ¡¼¥Ð¡¼¤Ç¤Ï¡¢mod_perl, mod_php¤Ê¤É¤ÎDSO¥â¥¸¥å¡¼¥ë¤Ë¤·¤Æperl¡¢php¤Î¥¤¥ó¥¿¥×¥ê¥¿¤ò¥µ¡¼¥Ð¡¼¤ËÁȤ߹þ¤ó¤Ç¤·¤Þ¤¦¤Î¤¬°ìÈÌŪ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¿·¤¿¤Ê¥×¥í¥»¥¹¤òµ¯¤³¤¹¤Î¤Ç¤Ï¤Ê¤¯¡¢¥¹¥ì¥Ã¥É¤òΩ¤Æ¤ë¤¯¤é¤¤¤Î¼ê´Ö¤ÇºÑ¤Þ¤»¤é¤ì¤ë¤Î¤À¤í¤¦¤È¿äÄꤷ¤Þ¤¹¡£mod_perl¤Î¥Û¡¼¥à¥Ú¡¼¥¸¤Ë¤Ï¡¢cgi¤À¤ÈÉÃ7²ó¤Î¥ê¥¯¥¨¥¹¥È¤Ë¤·¤«±þ¤¨¤é¤ì¤Ê¤¤¤¬¡¢mod_perl¤ËÅÐÏ¿¤·¤Æ¤ª¤¯¤ÈÉÃ240²ó¤Î¥µ¡¼¥Ó¥¹¤¬²Äǽ¤Ë¤Ê¤ë¡¢¤È¤¢¤ê¤Þ¤¹¡£Hello World¤Ç¤¹¤±¤É¤Í¡£httpd.conf¤Çcgi¤ÎÅÐÏ¿¤¬É¬ÍפǤ¹¤¬¡¢CGI¥×¥í¥°¥é¥à¤ÎÊý¤Ë¤Ï²¿¤â¼ê¤ò²Ã¤¨¤Ê¤¯¤ÆÎɤ¤¡¢¤È¤¤¤¦¤Î¤¬¤è¤¤¤Ç¤¹¤Í¡£
¤¿¤À¡¢ÉԻ׵ĤʤΤϡ¢mod_php¤òÁȤ߹þ¤ó¤Àapache¤Î¥×¥í¥»¥¹¤Î¥µ¥¤¥º¤¬¡¢virtual¤Ç5.7MB¡¢¾ïÃóÉô¤¬2.8MB¤¯¤é¤¤¤·¤«¤Ê¤¤¤³¤È¤Ç¤¹¡£libexec¤ËÃÖ¤«¤ì¤¿libperl.so¤Ï¡¢1.2MB°Ì¤Î¥µ¥¤¥º¤¬¤¢¤ê¤Þ¤¹¡£libphp.so¤Ï¡¢1.4MB°Ì¤¢¤ê¤Þ¤¹¡£¤ª¤½¤é¤¯¡¢²¿¤âCGI¤òregister¤·¤Ê¤¤¾õÂ֤Ǥϡ¢¤³¤ì¤é¤Î¥é¥¤¥Ö¥é¥ê¤Ï¥ê¥ó¥¯¤µ¤ì¤Ê¤¤¤Î¤Ç¤·¤ç¤¦¡£mod_python.so¤â¤Ç¤«¤¤¡£¸À¸ì½èÍý·Ï¤ÎDSO¥â¥¸¥å¡¼¥ë¤Ï¡¢Â¾¤Îapache¥â¥¸¥å¡¼¥ë¤ÈÈæ³Ó¤¹¤ë¤È¡¢°µÅÝŪ¤Ë¤Ç¤«¤¤¤Ç¤¹¡£

¸À¸ì·Ï¤ò¥â¥¸¥å¡¼¥ë¤Ë¤·¤ÆÁȤ߹þ¤ó¤Ç¤·¤Þ¤¨¡¢¤È¤¤¤¦¤Î¤Ï¡¢ µ¯Æ°¤Î¥ª¡¼¥Ð¥Ø¥Ã¥É¤ò¤Ê¤¯¤¹¤¿¤á¤Ë¤Ï¥Ù¥¹¥È¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡¢¤Ê¤ó¤«¶¯°ú¤Ê´¶¤¸¤¬¤·¤Þ¤¹¡£ ¤½¤ó¤Ê¤ó¤¹¤ë¤¯¤é¤¤¤Ê¤é¡¢CGI¥×¥í¥°¥é¥à¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤«¤éÁȤ߹þ¤ó¤Ç¤¯¤ì¡¢¤È»×¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£

FastCGI¤Ï¡¢¸À¸ì·Ï¤ÈCGI¥×¥í¥°¥é¥à¤òÊÌ¤Î¥×¥í¥»¥¹¤Ë¤·¤Æ¾ïÃ󤵤»¤Æ¤ª¤­¡¢ http¥ê¥¯¥¨¥¹¥È¤¬Íè¤ë¤Èsocket¤òÄ̤¸¤Æ¥³¥Þ¥ó¥É¤È·ë²Ì¤Î¸ò´¹¤ò¤¹¤ë¡¢ ¤È¤¤¤¦¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ç¤¹¡£ 'mod_fcgi'¤È¤¤¤¦¥â¥¸¥å¡¼¥ë¤òapache¤ËÁȤ߹þ¤ó¤Ç¤ª¤­¤Þ¤¹¡£ ¤Þ¤¿¡¢FastCGI.¥×¥í¥°¥é¥à¤Ë¤Ï¡¢'libfcgi.so'¤ò¥ê¥ó¥¯¤·¤Þ¤¹¡£

¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼FastCGI¤ÎÀ­Ç½

Perl, Lisp, sh ¤Ê¤É¤Î¸À¸ì¤Ç¡¢Hello World¤È¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼¤ÎCGI¤òºî¤ê¡¢°ì²ó¤Î¥ê¥¯¥¨¥¹¥È¤ÎÈ¿±þ»þ´Ö¤ò·×¬¤·¤Þ¤·¤¿¡£»ÄÇ°¤Ê¤¬¤é¡¢¤³¤Î¥µ¡¼¥Ð¡¼¤Ë¤Ïmod_perl¤ò»Å¹þ¤ó¤Ç¤¤¤Þ¤»¤ó¡£ ¤½¤ì¤«¤éPerl¤Ç½ñ¤¤¤¿CGI¤òFastCGI¤Ë¤¹¤ëÊýË¡¤ò¤è¤¯ÃΤê¤Þ¤»¤ó¡£sh¤ÏCGI¤·¤«ÊýË¡¤¬¤Ê¤¤¤Ç¤·¤ç¤¦¡£¤¦¡¼¤ó¡¢¤¢¤È¡¢C¤Ç¤â½ñ¤¤¤Æ¤ß¤ë¤«¡£

Lisp¤Ç½ñ¤¤¤¿ FastCGI¤Ï¡¢PostgreSQL¤Î¥é¥¤¥Ö¥é¥ê¤òÆɤ߹þ¤ó¤Ç¥Ç¡¼¥¿¥Ù¡¼¥¹¥µ¡¼¥Á¤Ê¤É;ʬ¤Ê»Å»ö¤â°ì½ï¤Ë¤µ¤»¤Æ¤¤¤Þ¤¹¡£ Perl¤ò¥â¥¸¥å¡¼¥ë¤Ë¤¹¤ë¤ÈËèÉÃ240²ó½èÍý¤Ç¤­¤ë¤Èmod_perl¤Î¥µ¥¤¥È¤Ë½ñ¤¤¤Æ¤¢¤Ã¤¿¤Î¤Ç¡¢Perl module¤Ï¡Ê4ms¡Ë¤È¤·¤Æ¤ª¤­¤Þ¤·¤¿¡£CGI¤À¤ÈËèÉÃ7²ó¡¢¤È¤¤¤¦¤³¤È¤Ï140ms¤¯¤é¤¤¤È¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢Perl¤ÎCGI¥é¥¤¥Ö¥é¥ê¤ò¤Á¤ã¤ó¤ÈÆɤ߹þ¤ó¤À¸å¤Çhello world¤òÊÖ¤¹¤À¤±¤Î¶õ¤·¤¤perl CGI¤Ï¡¢300ms¤¯¤é¤¤¤Ç¤·¤¿¡£¤¦¤Á¤ÎCPU¤Ïperl module¥µ¥¤¥È¤µ¤ó¤ÎȾʬ¤¯¤é¤¤¤ÎÀ­Ç½¤À¤È¤¤¤¦¤³¤È¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤½¤¦¤Ç¤¢¤ì¤Ð¡¢perl module ¤ÏÇܤÎ8ms¤ÇÈæ³Ó¤¹¤ë¤Î¤¬ÂÅÅö¤Ç¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹»Å»ö¤â¤·¤Æ¤¤¤ëLisp FastCGI¤ÏÁ´¤¯Â½¿§¤Ê¤¤¤Ç¤·¤ç¤¦¡£

¤½¤ì¤É¤³¤í¤«¡¢¤É¤¦¤â¡¢perl ¤Ï¡¢¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼¤Î¤è¤¦¤Ê½èÍý¤Ï®¤¯¤Ï¤Ê¤¤¤è¤¦¤Ç¤¹¡£µ¯Æ°¤Ï®¤¤¤¬½êÁ§¤Ï¥¤¥ó¥¿¥×¥ê¥¿¡£Lisp¤ÎCGI, FastCGI¤Ï¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢ÆäËLisp FastCGI¤Î¥«¥¦¥ó¥¿¡¼¤Ï·ë¹½¹â®¤Ç¤¹¡£Lisp¤ÎCGI¤Ï¡¢¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼¤Î½èÍý¤Ë150ms¤â¤«¤«¤Ã¤Æ¤¤¤ë¤Ç¤Ï¤Ê¤¤¤«¡¢Perl CGI ¤Ï¥«¥¦¥ó¥¿¡¼¤Î½èÍý¤Ë¤«¤«¤Ã¤Æ¤¤¤ë¤Î¤Ï116ms¤À¤è¡¢¤È¸À¤ï¤ì¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¿½¤·Ìõ¤¢¤ê¤Þ¤»¤ó¡£¥Ù¥ó¥Á¥Þ¡¼¥¯¤¬¤¤¤¤¤«¤²¤ó¤Ê¤Î¤Ç¤¹¡£¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¤Ä¤Ê¤®¤Ë¹Ô¤¯»þ´Ö¤¬100ms¤¯¤é¤¤¤¢¤ë¤È»×¤Ã¤Æ¤¯¤À¤µ¤¤¡£FastCGI¤Ï¡¢PostgreSQL¤È¤ÎÀܳ¤ò¤º¤Ã¤È°Ý»ý¤·¤¿¤Þ¤Þ¤Ç¤¹¤«¤é¡¢º¹¤Î14ms¤Î¤¦¤Á¤Î5ms¤¯¤é¤¤¤¬gif¤Î½èÍý¡¢10ms¤¯¤é¤¤¤¬¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥µ¡¼¥Á¤À¤È¿ä¬¤·¤Þ¤¹¡£

ɽ2¡¡³Æ¼ï¸À¸ì¤ÎCGI¤ÈFastCGI¤ÎÀ­Ç½Èæ³Ó
Hello World ¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼
Perl CGI 24ms 140ms
Perl FastCGI
Perl module (4ms?)
Lisp CGI 340ms 490ms
Lisp FastCGI 10ms 24ms
sh CGI 32ms
sh FastCGI


·ëÏÀ

¤¤¤º¤ì¤Ë¤»¤è¡¢¤È¤Ë¤«¤¯Lisp¤Î¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼¤Ï¡¢FastCGI¤Ë¤¹¤ë¤³¤È¤Ç°µÅÝŪ¤Ë®¤¯¤Ê¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£¤½¤ì¤Ë¡ÊÈæ³Ó¤¹¤ë¾å¤Ç¤Ï¤¤¤¤¤«¤²¤ó¤Ê¤Î¤Ç¤¹¤¬¡Ë¡¢¤³¤ÎFastCGI¤Ï¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤òÄ´¤Ù¤Ë¹Ô¤Ã¤¿¤ê¤â¤¹¤ë¤Î¤Ç¡¢½èÍýÎ̤ϼ¤Ϥº¤Ã¤È¿¤¤¤Î¤Ç¤¹¡£¤È¤¤¤¦¤ï¤±¤Ç¡¢·ëÏÀ¤Ç¤¹¡£

  1. CGI¤Ï¤µ¤Ã¤ÈÊÖ»ö¤òÊÖ¤µ¤Ê¤¤¤È¤¤¤±¤Ê¤¤
  2. ¤½¤Î¤¿¤á¤Ë¤Ïµ¯Æ°»þ´Ö¤¬Ìµ»ë¤Ç¤­¤Ê¤¤
  3. µ¯Æ°»þ´Ö¤ò¤Ê¤¯¤¹¤¿¤á¤Ë¤Ï¡¢module¤È¤·¤Æ¥µ¡¼¥Ð¡¼¤ËÁȤ߹þ¤à¤«¡¢ FastCGI¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò»È¤Ã¤ÆCGI¥×¥í¥»¥¹¤òpersistent¤Ë¾ïÃ󤵤»¤ë
  4. ¥â¥¸¥å¡¼¥ë¤Ë¤·¤Æ¤â¡¢FastCGI¤Ë¤·¤Æ¤â¡¢¾®¤µ¤ÊCGI¤Ç¤Ï10Çܤ¯¤é¤¤¤Ï´Êñ¤Ë®¤¯¤Ê¤ë¡£ Lisp¤Î¤è¤¦¤Êµ¯Æ°¤ÎÃÙ¤¤¸À¸ì¤Ç¤â½½Ê¬¼ÂÍѤˤʤ롣

web¤ÎÈ¿±þ¤¬ÃÙ¤¤¤Î¤Ï¥µ¡¼¥Ð¡¼¤¬¸Å¤¤¤»¤¤¤À¡¢ºÇ¿·¥Þ¥·¡¼¥ó¤ËÇ㤤´¹¤¨¤è¤¦¡¢ ¤È¤¤¤¦¤Î¤Ï¡¢¥µ¡¼¥Ð¡¼¤¬¸Å¤¤¤Î¤Ç¤Ï¤Ê¤¯¤Æ¡¢CGI¤¬¸Å¤¤¤Î¤Ç¤¹¡£ hardware¤Ç10ÇÜ®¤¯¤¹¤ë¤Î¤Ï¥³¥¹¥ÈŪ¤Ë¤â¥¨¥Í¥ë¥®¡¼Åª¤Ë¤â ¤ä¤µ¤·¤¯¤Ê¤¤¤Ç¤¹¤è¡£


¤ª¤Þ¤±

¤¦¤Á¤Î¥«¥¦¥ó¥¿¡¼¤Ï¡¢Â®¤¤¤À¤±¤Ç¤Ê¤¯¤Á¤ç¤Ã¤È¥¤¥ó¥Æ¥ê¥¸¥§¥ó¥È¤Ç¤¹¡£ Ʊ¤¸¥Ö¥é¥¦¥¶¤«¤é¤Î10ʬ°ÊÆâ¤Î¥¢¥¯¥»¥¹¤Ç¤Ï¥«¥¦¥ó¥È¥¢¥Ã¥×¤·¤Þ¤»¤ó¡£ ¥Ö¥é¥¦¥¶Ëè¤Î¥¢¥¯¥»¥¹¤ÎÅý·×¤Ê¤ó¤«¤â¤È¤Ã¤Æ¤¤¤Þ¤¹¡£


toshihiro¡÷matsui.dip.jp