ãã¡ãããSPDYèªäœã«ã€ããŠç¥ã£ãŠããŸãã 2011幎ã«ãããã€ãã®Googleéçºè ããéåžžã®HTTPã眮ãæããããã«èšèšãããæ°ãããããã³ã«ã®ãã©ãããå ¬éããŸããã äž»ãªéãã¯ãå¿çã®å€éåãããããŒã®å§çž®ãããã³ãã©ãã£ãã¯ã®åªå é äœä»ãã§ããã æåã®ããã€ãã®ããŒãžã§ã³ã¯å®å šã«æåããŸããã§ãããã2012幎ãŸã§ã«ä»æ§ã確ç«ãããæåã®ä»£æ¿ïŒGoogle以å€ã®ïŒå®è£ ãç»å Žãããã©ãŠã¶ãŒã§ã®ãµããŒãã®ã·ã§ã¢ã80ïŒ ã«éããSPDYããµããŒãããnginxã®å®å®ããŒãžã§ã³ãç»å ŽããŸããã

æããã«ããããã³ã«ã¯ææãªèŠ³ç¹ããåªãããåçåããããœãªã¥ãŒã·ã§ã³ã«å€ããã€ã€ãããæ¬æ Œçãªå®è£ äœæ¥ãµã€ã¯ã«ãéå§ããŠããããšãããããŸããã ãã¡ããããã¹ãããå§ããŸããã ç§ã¯åœŒãªãã§ãããŽã¹ãã£ã¢ã§å ¬éãããè³è³ãæ¬åœã«ä¿¡ãããã£ãã®ã§ãããããã¯äœçŸäžäººãã®ãŠãŒã¶ãŒããããããžã§ã¯ãã§ã¯ã§ããŸããã SPDYãæ¬åœã«å éå¹æãæã£ãŠãããšãã確èªãåãåã£ãŠããã¯ãã§ãã
Googleèªäœãå«ããSPDYã«é¢ããèå³æ·±ãç 究ãæ°å€ããããŸãã ãããã³ã«ã®äœæè 㯠ã圌ãã®å ŽåãSPDYãããŠã³ããŒãã40ïŒ é«éåããããšã瀺ããŸããã SPDYãããã³ã«ã®ç 究ãOperaã«ãã£ãŠè¡ãããŸããã ããããèšç®æ¹æ³ãããã®ãããªå°è±¡çãªçµæãéæãããããŒãžã®äŸãããããã®ç 究ã«ã¯ãããŸããã§ããã
SPDYã å 芳
SPDYãããã³ã«ã¯éåžžã«è€éã§ããã説æãå°é£ã§ãã ãããã©ã®ããã«æ©èœããããæ確ã«èª¬æããŠã¿ãŸãããã
è€æ°ã®JavaScriptãã¡ã€ã«ãšCSSãã¡ã€ã«ãæ¥ç¶ãããWebããŒãžãæ³åããŠãã ããã ãã©ãŠã¶ã¯ãµãŒããŒãžã®è€æ°ã®æ¥ç¶ãéãããããã®ãã¡ã€ã«ã®ãµãŒããŒããã®ããŠã³ããŒãã䞊è¡ããŠéå§ããŸãã ãµãŒããŒã§HTTPSãæå¹ã«ãªã£ãŠããå ŽåïŒYandex.MailãHTTPSçµç±ã§åäœããããšãããã£ãŠããå ŽåïŒãæ¥ç¶ããšã«SSLãã³ãã·ã§ã€ã¯ãè¡ãå¿ èŠããããŸããã€ãŸãããã©ãŠã¶ãŒãšãµãŒããŒã¯éä¿¡ããŒã¿ãæå·åããããŒã亀æããå¿ èŠããããŸãã ãã®ããã«ã¯ããµãŒããŒãšãã©ãŠã¶ãŒã®äž¡æ¹ããããçšåºŠã®æéãšããã»ããµãŒãªãœãŒã¹ãè²»ããå¿ èŠããããŸãã
SPDYãããã³ã«ã¯ããµãŒããŒãžã®æ¥ç¶ã1ã€ã ã確ç«ããå¿ èŠããããšããäºå®ã«ãããæéãççž®ããããã«èšèšãããŠããŸããã€ãŸãããã³ãã·ã§ã€ã¯ã«å¿ èŠãªæ¥ç¶ã¯1ã€ã ãã§ãã ãã®çµæãéçãã¡ã€ã«ãããŠã³ããŒãããããã«ããã©ãŠã¶ãŒã¯ãµãŒããŒãšã®æ¥ç¶ã確ç«ããå¿çãåŸ ããã«ããã«é 次ãå¿ èŠãªãã¹ãŠã®ã¹ã¯ãªããã®èŠæ±ãéä¿¡ããŸãã

ãã®åŸããµãŒããŒã¯ãããã®ãã¡ã€ã«ãé çªã«æäŸãå§ããŸãã
Https
æ¥ç¶+ TLSãã³ãã·ã§ã€ã¯ | æ¥ç¶+ TLSãã³ãã·ã§ã€ã¯ | æ¥ç¶+ TLSãã³ãã·ã§ã€ã¯ |
---|---|---|
> GET /bootstrap.css
> ... <HTTP / 1.1 200 OK <... <body {marginïŒ0;} | > GET /jquery.min.js
> ... <HTTP / 1.1 200 OK <... <ïŒé¢æ°ïŒãŠã£ã³ããŠãæªå®çŸ©ïŒ{ <... | > GET / logo.png
> ... <HTTP / 1.1 200 OK <... <[ããŒã¿] <... |
HTTPS + SPDY
æ¥ç¶+ TLSãã³ãã·ã§ã€ã¯ |
---|
> GET /bootstrap.css
> GET /jquery.js > GET /logo.png <[bootstrap.css content] <... <[jquery.jsã³ã³ãã³ã] <... <[logo.png content] |
æåã®èµ·åãé«éåãã
ç§ãã¡ã®ã¡ãŒã«ã¯å€ãã®éçãªãã®ã䜿çšããŠããŸãã æå°åããã圢åŒã§ã¯ãåèšã¯ããã¹ãŠã®ããŒãããã³ãã¹ãŠã®ããŒãžã®çŽ500 MBã®ãªãœãŒã¹ã§ãã ãããã¯cssããã³jsãã¡ã€ã«ãããã³ç»åã§ãã 倧éã®å¿ èŠãªçµ±èšæ å ±ããããããæåã®èµ·åæéã¯ããã»ã©éããããŸããã
ãã®éçããŒã¿ã¯ãã¢ã¹ã¯ã¯ããã³CDNã«ããçŽ200ã®ãµãŒããŒã®ãŠãŒã¶ãŒã«ãã·ã¢ããã³æµ·å€ã§é åžããŠããŸãã NginxããµãŒããŒãšããŠäœ¿çšããŸããããã¯ãéçãé åžã§ããæ¢åã®WebãµãŒããŒã®äžã§æãé«éã§ä¿¡é Œæ§ãé«ããšèããŠããããã§ãã æšå¹ŽãNginxããŒã ã¯SPDYããŒãžã§ã³2ãããã³ã«ãã¢ãžã¥ãŒã«ãšããŠå®è£ ããããšãçºè¡šããŸããã ãããŠã2013幎åé ã«ãNginxãšãã®ã¢ãžã¥ãŒã«ã䜿çšããŠéçããŒã¿ã®é åžãè©Šã¿å§ããŸããã
ç¶ç¶çãªæé©å
éçãªããŠã³ããŒãé床ãé·ãéå¿é ãããŠããŸããã ãŠãŒã¶ãŒãã§ããã ãéçã«ããŒãããå¿ èŠããªãããã«ããã§ã«å€ãã®ããšãè¡ã£ãŠããŸãã ãŸãããã¡ããããã¹ãŠã®jsã¹ã¯ãªãããšcssã¯ã¢ã»ã³ããªäžã«æå°åãããŸãã åçã®ãµã€ãºãå¶åŸ¡ããã¡ãŒã«ã«å¿ èŠãªéé»æ°ã®éãè¶ ããªãããã«ããŸãã
第äºã«ãããããããªãŒãºã¹ã¿ãã£ãã¯ã®æè¡ã䜿çšããŸãã ãã¡ã€ã«ã®å 容ãå€æŽãããŠããªãå ŽåããŠãŒã¶ãŒã¯ãã¡ã€ã«ãåããŠã³ããŒãããå¿ èŠã¯ãããŸããã ãããã£ãŠãããŒãžã§ã³ããããŒãžã§ã³ãžã®ãã¹ãå€æŽãããªãããã«ããŸãã ã¬ã€ã¢ãŠããæ§ç¯ãããšãããã®ãã¹ã¯ãã¡ã€ã«ã®å 容ã®ããã·ã¥åèšãèšç®ããããšã«ããååŸãããŸãã ããšãã° ã ãã®ãããªãã¹ã圢æããã«ã¯ã Borshchikã䜿çšããŸã ã
ããŒãæéã®æž¬å®æ¹æ³
æåã«ãèšå®ã§SPDYãæå¹ã«ããã ãã§ãã©ãã ãå éãããããã¹ããã·ã³ã§æž¬å®ããããšã«ããŸããã Ubuntu 12.04ãå®è¡ããŠããããŠãŒã¶ãŒãã¢ã¯ã»ã¹ã§ããªã1å°ã®ç©çãã·ã³ã«éçããŒã¿ãé 眮ããŸããã ã¿ã€ãã©ã€ã¿ãŒã«ã¯ã12ã³ã¢ãš20GBã®RAMããããŸããã ãã¹ãŠã®ã¹ã¿ãã£ãã¯ã¯ãRAMå ã®RAMãã£ã¹ã¯ã«é 眮ãããŸããã
ãããã®æž¬å®ããå€æãããšãã¡ãŒã«ãéåžžã«é¡èã«å éããŸããã Googleã枬å®ãå éããã®ãšã»ãŒåãæ¹æ³ã§ã ããããç§ãã¡ã®å éšã§ã¯ãã¡ãŒã«ã®ããŠã³ããŒãããããã¯ãŒã¯ã®åé¡ããã±ããæ倱ããã®ä»ã®TTLã®ãã¹ãŠã®æ©èœãå®å šã«ãšãã¥ã¬ãŒãããããšã¯ã§ããŸããã§ããã ãããã£ãŠã誰ãã®ããŠã³ããŒããé ããããã©ãããç解ããããã«ããŠãŒã¶ãŒã«å¯ŸããŠå®éšãè¡ãããšã«ããŸããã
ãã®äžã§ã10ïŒ ããã¹ãŠã®äžããã©ã³ãã ã«éžæããã2ã€ã®ã°ã«ãŒãã«åããããŸãããæåã®ã°ã«ãŒãã¯SPDYãä»ããŠéçã«äžãããã2çªç®ã®ã°ã«ãŒãã¯ã³ã³ãããŒã«ã§ããã
æåã®ã°ã«ãŒãã§ã¯ãéçå€æ°ã¯ãã¡ã€ã³experiment.yandex.stããèªã¿èŸŒãŸãã2çªç®ã®ã°ã«ãŒãã§ã¯meth.yandex.stããèªã¿èŸŒãŸããŸããã å¶åŸ¡ã°ã«ãŒãã®å¿ èŠæ§ã¯ããã¹ãŠã®ã¡ãŒã«ãŠãŒã¶ãŒã«å¯ŸããŠéçããŒã¿ããã£ãã·ã¥ã§ãããšããäºå®ã«ãã£ãŠæ±ºå®ãããŸããã ãããã£ãŠã圌ããå¥ã®ãã¡ã€ã³ã«ç§»åããå ŽåãéçããŒã¿ããªããŒãããå¿ èŠããããŸãããå®éšã«åå ããªãã£ããŠãŒã¶ãŒã¯ããããŸããã æ¯èŒã¯æ£ãããããŸããã
ææš
ææ°ã®ãã©ãŠã¶ã¯ãã¹ãŠã Navigation Timing APIããµããŒãããŠããŸã ã ããã¯ãã©ãŠã¶ã®JavaScript JavaScript APIã§ãããããŒãæéã«é¢ããããŸããŸãªããŒã¿ãåãåãããšãã§ããŸãã ããã«ããããŠãŒã¶ãŒããã¡ãŒã«ãããŒãžã«ã¢ã¯ã»ã¹ããéçããŒã¿ã®ããŒãããéæ³ãå§ãŸã£ãããªç§ãŸã§ç¥ãããšãã§ããŸãã ã¯ã©ã€ã¢ã³ãåŽã¯ãå¿ èŠãªãã¹ãŠã®éçãã¡ã€ã«ãããŒããããç¬éãèªèããããã«æ©èœããŸãã ã¹ã¯ãªããã§ã¯ã2çªç®ã®ç¬éãã1çªç®ã®ç¬éãå·®ãåŒãããã¹ãŠã®çµ±èšãå®å šã«ããŒãããŠãã®æ°å€ããµãŒããŒã«éä¿¡ããæéãååŸããŸãã
ããŠã³ããŒãé床ã«å ããŠãç§ãã¡ã«ãšã£ãŠéèŠãªåŽé¢ã¯éçããŠã³ããŒãã®æ°ã§ãã ã¯ã©ã€ã¢ã³ãã§2ã€ã®ããšã確èªããŸãã
1. éçãã¡ã€ã«ãååŸã§ããŸãããïŒ ããšãã°ããµãŒããŒã¯ããã®ãããªãã¡ã€ã«ã¯ãªããšçããŸããã ãã®ãããªåã¢ã³ããŒãã®äºå®ããµãŒããŒã«éä¿¡ãããããã®æ°ã®ã°ã©ããäœæããŸãã
2. ãã¡ã€ã«ãæ¬æ¥ããã¹ããµã€ãºã«ãªã£ããã©ãã ã ãã®ã¿ã€ãã®ãšã©ãŒã«ã€ããŠè©³ãã説æããŸãããã ãã¡ã€ã«è»¢éäžã«ãµãŒããŒãšã¯ã©ã€ã¢ã³ãéã®æ¥ç¶ãåæãããå Žåã®ãã©ãŠã¶ãŒã®åäœã確èªããŸããã FirefoxãIEãããã³å€ãOperaã200ã®ã¹ããŒã¿ã¹ãšãã¹ãŠã®å€±ãããã³ã³ãã³ããæäŸããããšãå€æããŸããã ãã©ãŠã¶ã¯ãContent-LengthããããŒã«ç€ºãããŠããããŒã¿ãšãŸã£ããåãããŒã¿ãåä¿¡ããããšã確èªããŸããã ããããããã«æªãããšã«ãIEãšOperaã¯åæã«ãã®åä¿¡äžè¶³ã®ã³ã³ãã³ãããã£ãã·ã¥ããŸãããããã£ãŠããã£ãã·ã¥ãçããŠããéã¯ããã¡ã€ã«ãåããŠã³ããŒãããããã«æ£ããåäœããŸããã 幞ããªããšã«ãFirefoxã¯æ¬¡ã®ãªã¯ãšã¹ãã§ãµãŒããŒããããŒã¿ããªããŒãããŸãã ãã®äžæ£ãªåäœãå ±åãããã°ã¯ãMozillaãã©ãã«ãŒã«ãããŸãã
枬å®çµæ
æ°å€ã«åºã¥ããŠãéçãå¹³åãããã³80ïŒ ã®ããŒã»ã³ã¿ã€ã«ã®å¹³åããŒãæéãèšç®ããŸããã æ®å¿µãªãããæ©åšã®å éã¯çµ±èšèª€å·®ãå æããŸããã§ããã

å¹³åããŒãæéã¯0.6ïŒ æžå°ããŸããã ã€ãŸããGoogleã®ãã¹ãŠã®ä¿èšŒã«ãé¢ããããSPDYèªäœã¯ã40ã50ïŒ ã®ã¯ã¬ã€ãžãŒãªãŠãŒã¶ãŒã«ãã£ãŠãµã€ããååŸããŠé«éåããããšã¯ã§ããŸããã
Opera 12.16ãšã³ã³ãã³ãé·
mail.yandex.ruã§SPDY / 2ãæå¹ã«ããããšããŸããã ãªã³ã«ããåŸããã°ã«å€ãã®ãšã©ãŒãèšé²ãããããããªãã«ããå¿ èŠããããŸããã Operaã«ã¯äžå¿«ãªãã°ããããŸãããããã¯ãµããŒããæ¢ã«äžæ¢ãããŠãããããä¿®æ£ãããèŠèŸŒã¿ã¯ãããŸããã ããã¯ãPOSTãªã¯ãšã¹ããéä¿¡ãããšãã«Operaãç¡å¹ãªContent-LengthããããŒãéä¿¡ãããšããäºå®ã«ãããŸãã åé¡ã¯ããã«èšè¿°ãããŠããŸãïŒ trac.nginx.org/nginx/ticket/337
å€ãOperaïŒ12. *ïŒã®èšªåè ãå€ããPOSTèŠæ±ã䜿çšãããŠããå ŽåãSPDYãæå¹ã«ããããšã¯ãå§ãããŸããã
UPDïŒSPDYã®éçºè ã¯ãããŒãžã§ã³1.5.10以éã§ã¯ãnginxããã§ã«ãããã³ã«ã®3çªç®ã®ããŒãžã§ã³ãå®è£ ããŠãããšããã³ã¡ã³ããæ±ããŠãããããå€ãOperaã¯SPDYã䜿çšããéã«SPDYã䜿çšããªããªããŸãã ãããã£ãŠãOperaã®ãã°ã¯ç¡é¢ä¿ã§ãã
çµè«
ç§ãã¡ã®ç 究ã®åŸãSPDYã¯ç§ãã¡ã«ãšã£ãŠäœãå éããªããšããçµè«ã«éããŸãããéçã®ããŒããæé©åãããã®ãµã€ãºãçž®å°ããæé©ãªãã£ãã·ã³ã°ã¯ã¯ããã«-æ¡éãã«-ã€ã³ã¿ãŒãã§ãŒã¹ã®é床ã«é¡èãªå¹æããããããŸãã
ããããSPDYã§ã¯ãç§ãã¡èªèº«ã«äºæ³å€ã®å©çãèŠåºããŸããã å€ãã®ã¯ã©ã€ã¢ã³ããåãã¡ã€ã«ã®æ¥ç¶ã®äœæãåæ¢ãããšããäºå®ã«ããããããã®æ¥ç¶ã¯èããå°ãªããªããŸãããã€ãŸããããã»ããµã®èªã¿èŸŒã¿ãå°ãªããªããŸããã ã€ãŸãããããããããç¯çŽããããŸãã
ããã¯ããµãŒããŒäžã®ãªãŒãã³æ¥ç¶ã°ã©ãã§SPDYãå«ããæ¹æ³ã§ãã

éçèªã¿èŸŒã¿ãšã©ãŒã®æ°ã«éãã¯èŠã€ãããŸããã§ããã ããã¯ãSPDYãNginxã«å«ããŠãããµããŒããããŠããªãå Žåã§ããã©ãŠã¶ãŒã§åé¡ãçºçããªãããšãæå³ããŸãã
nginxã§SPDYãããã³ã«ã®å®è£ ããªããŒã¹ãšã³ãžãã¢ãªã³ã°ããæå³ãããšããã«æ©èœããããšã確èªããŸããã ãã¹ãã§ã¯ãSPDYã¢ãžã¥ãŒã«ãæ¥ç¶ãããApacheãä»ããŠéçå€æ°ãé åžããåæã¯ãšãªã§åãæ¹æ³ã§æž¬å®ããããšãè©Šã¿ãŸããã ãã®å Žåãå é床ãéåžžã«å°ããéã§ãããšç¢ºä¿¡ããŸããã
ãã®çµæããã¹ãŠã®yandex.stã«SPDYãå«ããŸããã 100500ïŒ ã®å éã¯ãããŸããã§ããããCPUè² è·ãå°ãªããããé»åãç¯çŽã§ããŸãã:)
é«éåãè¡ãããªããã1ã€ã®çç±ã¯ãNginxèªäœãéåžžã«é«éãªãµãŒããŒã§ããããšã§ãã åœåãSPDYã¯ApacheãµãŒããŒã®ã¢ãžã¥ãŒã«ãšããŠå®è£ ãããŠããŸãããããåç¥ã®ããã«ãæ¥ç¶ãç¶æããã«ã¯å€ãã®ãªãœãŒã¹ãå¿ èŠã§ãã ãããã£ãŠãApacheã§æ¥ç¶ãä¿åãããšããã®ããã©ãŒãã³ã¹ãèããåäžããŸãã Nginxã§ã¯ã10,000ã®éã¢ã¯ãã£ãHTTPããŒãã¢ã©ã€ãæ¥ç¶ãç¶æããããã«çŽ2.5Mã®ã¡ã¢ãªãå¿ èŠã§ãïŒãœãŒã¹-nginx.org/ru ïŒã
æ®å¿µãªãããGoogleãSPDYå é床枬å®ã§ã©ã®ããã«ç 究ãè¡ã£ãããææ¡ããããšã¯ã§ããŸããã§ããã ãããã£ãŠãæã ã®ç 究ã®çµæã¯ããã®ãããã³ã«ãäœãå éããªããšããã¡ãã»ãŒãžãšããŠåãåãããã¹ãã§ã¯ãããŸããã ç§ãã¡ã®èª¿æ»çµæã¯ãSPDYã䜿çšããŠéååŠãé åžããç¹å®ã®ã±ãŒã¹ã®ç 究ã®çµæã§ãã